ll0s0ll / Rapid_Text_To_Speech

OpenJTalkとOpenALで、割と高速で、割と長文も怖くないテキスト読み上げシステムを作る
1 stars 1 forks source link
linux openal openjtalk raspberry-pi raspberrypi

Rapid Text To Speech – OpenJTalkとOpenALで、割と高速で、割と長文も怖くないテキスト読み上げシステムを作る

以前、Open JTalkで生成した音声をALSAで鳴らすで、読み上げの高速化を試しましたが、もう少し改善できないか試してみました。今回は以下をポイントとして作成しました。

動作を収録した動画を撮りました。

https://user-images.githubusercontent.com/3046839/210189279-1ea458c6-2f93-4da6-a43c-91d4fdeb278a.mp4

ざっくりとした仕組み

OpenJTalkでテキストを音声に変換して、OpenALを使って音声を再生しています。OpenALにはストリーミング形式のような機能があって、音声ファイルを継続的に読み込ませることで、音声を途切れなく再生し続けることができます。その機能を利用して、OpenJTalkでテキストを細切れに音声へ変換し、OpenALに読み込ませ続けることで、長文時の発話までの待ち時間を短縮しています。また、OpenALには音声の一時停止機能もありますので、それを利用して発話をコントロールできるようにしています。

使い方

※Open JTalkは1.05、hts_engine APIは1.06のバージョンを対象にしています。

Raspberry Pi

  1. OpenJTalkをダウンロードします。現時点では最新は1.08ですが、バージョン1.05をダウンロードして、任意の場所に展開します。

  2. 辞書ファイルをダウンロードします。現時点では最新は1.08ですが、バージョン1.05をダウンロードして、任意の場所に展開します。

  3. ボイスファイルをダウンロードします。OpenJTalk標準はこちら。バージョン1.04をダウンロードして、任意の場所に展開します。RapidTextToSpeechのボイスパラメータは、MMDAgentに含まれている’Mei’のボイスに合わせて設定されています。もちろんOpenJTalk標準でも動作します。

  4. OpenJTalkをmakeします。

  5. RapidTextToSpeechのソースコードを入手する。zipはこちら

    $ git clone https://github.com/ll0s0ll/Rapid_Text_To_Speech
  6. 任意の場所に展開し、makeします。makeのオプションに、make済みOpenJTalkディレクトリへのパスをOJTDIRで、make済みHTSEngineディレクトリへのパスをHTSEDIRで指定してください。例.

    $ make OJTDIR=/path/to/openjtalkdir HTSEDIR=/path/to/htsenginedir
  7. makeが完了したら実行します。オプションに、辞書ファイルディレクトリ、ボイスファイルディレクトリへのパスを指定します。例.

    $ ./RapidTextToSpeech -d /path/to/dicdir -v /path/to/voicedir

Mac OS X (Lion 10.7)

上記のRaspberry Piの場合と同様ですが、makeのオプションに、OS=MACOSXを指定して、makeしてください。例.

$ make OJTDIR=/path/to/openjtalkdir HTSEDIR=/path/to/htsenginedir OS=MACOSX

プログラムについて

プログラムが起動すると、「>」を表示して、発話するテキストを待ち受けする状態になります。テキストを入力すると発話します。発話が開始した時にビープが1回、発話が終了したときにビープが2回なるようになっています。発話が開始すると、再び待ち受け状態に戻ります。発話中でもテキストを入力すると、現在の発話を終了して、新しいテキストを発話します。待ち受け中に下記のコマンドを入力すると、それぞれの動作をします。

コマンド