ゆっくりボイスを.NETアプリに組み込む

2021/08/08

現在、自前の動画編集ソフトを作っています。画像や動画を並べて、それらに合成音声でナレーションを入れていくと1つの動画になるようなソフトです。既に Microsoft Azure のText to Speechサービスを使ったナレーションの挿入には対応していたのですが、世間の動画でよく耳にするゆっくりボイスにも対応しようと思い、ゆっくりボイスを自前のツールに取り込みました。

その際に色々とゆっくりボイスについて、知らなかった事などがあったので、こちらの記事にメモを残しておきます。


ゆっくりボイスの正体は AquesTalk

まず、俗に言うゆっくりボイスと呼ばれているものの正体について、そもそも私は知りませんでした。調べて見ると、株式会社アクエストという会社が販売している AquesTalk という音声合成エンジンで作られた合成音声がゆっくりボイスの正体でした。

広告付き動画でのゆっくりボイス使用は有料

それで、AquesTalk の使用ライセンスを確認すると基本的に有料である事が分かりました。あまりに広く普及しているので、私はゆっくりボイスは無償で使える合成音声なのだと勘違いしていました。無償で利用できるのは個人、かつ、非営利目的のコンテンツでの使用のみのようです。こちらの使用ライセンスの項目に以下の記載があります。

外部から当社製品のライブラリが組み込まれた無償アプリを入手して、これを実行するときにも必要です。例えば、SofTalkで実況動画を作成し、YouTubeに広告つきで公開するなど、合成音声を営利目的のコンテンツに使用したり、社内で利用する場合も含まれます。このライセンスはオンラインストアで購入できます。

AquesTalk が組み込まれたフリーウェアで営利目的のコンテンツを作る場合も同様に使用ライセンスが必要になるとの事です。

使用が無償となる具体的な条件はこちらに記載されています。

AquesTalk の合成音声を自作ソフトウェアで利用する手段

AquesTalk のSDKを使用する

フリーウェアの開発、かつ、いくつかのソフトウェア配布規定に従っていれば、1980円のライセンス発行手数料のみの支払いで、無償で SDK を利用できるそうです。手数料は発生しますが、この方法が最も柔軟性が高い方法です。

SofTalk のコマンドライン機能を使用する


「SofTalk」というソフトウェアがあります。このソフトウェアはコマンドラインから合成音声の再生などを行う機能が備わっており、このインターフェースを経由する事で合成音声の再生を外から制御できます。こちらからダウンロードできます。

棒読みちゃんのコマンドライン機能を使用する

「棒読みちゃん」というソフトウェアがあります。このソフトウェアも SofTalk と同様にコマンドラインから合成音声の再生などを行う事ができます。こちらからダウンロードできます。どうでもいいですが、この作者のサイト、タイトルに「404 Fight Not Found」とジョークが書いてあるのですが、初見でリンク切れかと勘違いしてしまいましたw

どの方法で利用するのが良いか?

まず、ソフトウェアにどのように組み込むか次第ですが、提供されている SDK を利用できる形で組み込めるソフトウェアであって、かつ、手数料を気にしないのであれば、AquesTalk の SDK を直接使用するのが最も良いでしょう。

私の場合はとりあえずお試しで組み込んでみたいだけでしたので、手数料を払ってまで組み込みたくはなかったので、SDKの利用は避けました。

スクリプトなどから利用したい、もしくは、私のように手数料を支払いたくない場合は「SofTalk」「棒読みちゃん」のいずれかのコマンドラインインターフェースを利用する事になります。

「SofTalk」「棒読みちゃん」のどちらが適しているかについては次の項目で説明します。

「SofTalk」「棒読みちゃん」どちらを使うのが良いか?

どちらが良いかは用途によると思うのですが、結論から言うと「SofTalk」の方が組み込み用の機能が充実していて扱いやすい面が多いものの、私のやりたい事は「棒読みちゃん」じゃないとできなかったので、私は「棒読みちゃん」を使用する事にしました。

SofTalk も棒読みちゃんも起動中のプロセスに対して、コマンドを送信して再生や停止などの操作を行えるようになっています。SofTalk については同梱の softalkw.exe を使うと、新しいプロセスで指定された処理を実行して、処理が終わったらプロセスを終了するような事も可能になっています。しかし、この方法だとプロセス起動に3秒ほど待たされてしまい、リアルタイム性が求められる動画編集のような用途では使えなかったので、起動中のプロセスに対してコマンドを送信する方法を利用する事にしました。

この方法において、SofTalk は以下の操作ができない点が私の利用用途だと致命的でした。

  • 現在の再生状態の取得

SofTalk の即時実行オプションは以下のものがあります。

[即時実行オプション]
/play_now 再生
/stop_now 中止
/pause_now 一時停止
/resume_now 一時停止解除
/next_now 次行
/previous_now 前行
/repeat_now リピート
/no-repeat_now リピート解除
/clear_now クリア
/close_now 終了
/close2_now 終了(変更を保存しない)

私がやりたい事は以下でした。

  1. テキストの読み上げを開始する
  2. テキストが読み上げ終わるまで画像を表示する、読み上げ中に停止ボタンが押されたら停止する
  3. テキストの読み上げが終わったタイミングで次の画像に切り替え、次のテキストを読み上げる

ここで、2番目の「テキスト読み上げが終わるまで画像を表示する」を実装しようとした時、テキストの読み上げが終わったのかどうかを判定する必要があり、そのためには現在の再生状態を取得する必要があったのですが、残念ながら SofTalk にはそのようなオプションが存在しませんでした。

一方、棒読みちゃんの方にはその機能がありました。以下は棒読みちゃんのコマンドライン機能を提供する RemoteTalk.exe のオプション一覧です。

>RemoteTalk /Talk [文章]                                       【再生】
>RemoteTalk /Talk [文章] [速度] [音程] [音量] [声質]           【再生】
>RemoteTalk /Pause                                         【一時停止】
>RemoteTalk /Resume                                  【一時停止の解除】
>RemoteTalk /Skip                      【現在の行をスキップし次の行へ】
>RemoteTalk /Clear                       【残りタスクを全てキャンセル】
>RemoteTalk /GetPause                            【一時停止状態の取得】
>RemoteTalk /GetNowPlaying                       【音声再生状態の取得】
>RemoteTalk /GetTaskCount                        【残りタスク数の取得】

/GetNowPlaying  というオプションを指定して RemoteTalk を実行すると、再生中なら終了コード 1、再生中でなければ終了コード 0 が返ってくるようになっていました。これのおかげで現在再生中かどうかを判定できるようになり、再生が終わるまでアプリケーション側に任意の処理をし続けるという事が可能になります。

ただし、棒読みちゃんの場合は、棒読みちゃんのUIを非表示にする機能が存在しないため、棒読みちゃんのUIを常に表示しておく必要があります。SofTalk の方では起動時に UI を非表示にする機能があるので、ユーザーの見えない裏で動かすソフトウェアとしては SofTalk の方が適しています。

欲を言えば、SofTalk の方に現在の再生状態を取得する機能が備わっているか、棒読みちゃんにUIを非表示にする機能があったら、私の使用用途としては最高だったのですが、ないものは仕方がないです。

SofTalk は 2021/06/2 に新しいバージョンが公開されていますし、棒読みちゃんも 2020/12/24 に新しいバージョンが公開されている事から、まだ開発が進んでいるようですので、今後のアップデートに期待しつつ、直近では「棒読みちゃん」をゆっくりボイスの再生に活用させていただこうと思います。


  このエントリーをはてなブックマークに追加  

<<「ソフトウェア開発」の記事一覧に戻る

関連記事