Skip to content

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

Notifications You must be signed in to change notification settings

ll0s0ll/Rapid_Text_To_Speech

Repository files navigation

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

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

  • はじめの音声が出るまでの時間を短くする
  • 長文を読み上げる時でも、はじめの音声が出るまでの時間を短くする
  • 読み上げを一時停止、再生できる

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

rapid_text_to_speech_360.mp4

ざっくりとした仕組み

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

  • OpenAL
    OpenAL (Open Audio Library)はクロスプラットフォームのオーディオAPIであるフリーソフト。マルチチャンネル3次元定位オーディオを効率よく表現するように設計された。APIのスタイルと慣習は意図的にOpenGLと似せてある。Wikipedia

  • OpenJTalk
    Open JTalkは、名古屋工業大学の徳田・李研究室で開発された日本語テキスト音声合成システムです。入力したテキストを解析して合成音声を生成してくれます。形態素解析エンジンのMeCab(和布蕪、めかぶ)、奈良先端大学を中心にして開発された形態素解析用辞書のnaist-jdic、隠れマルコフモデル(HMM)に基づく音声合成エンジンhts_engineが使われています。

使い方

※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回なるようになっています。発話が開始すると、再び待ち受け状態に戻ります。発話中でもテキストを入力すると、現在の発話を終了して、新しいテキストを発話します。待ち受け中に下記のコマンドを入力すると、それぞれの動作をします。

コマンド

  • exit
    RapidTextToSpeech を終了します。

  • pause
    読み上げを一時停止します。resumeで読み上げを再開します。

  • resume
    pauseで一時停止した読み上げを再開します。

  • stop
    読み上げを停止します。再開はできません。

About

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

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published