TurtleBot1に喋らせるためにOpenJTalkを導入した。OpenJTalkとは、日本語で書かれた文書を読み上げるオープンソースのソフトウェアである。
http://open-jtalk.sourceforge.net/
例によってubuntu(12.04LTS)のレポジトリから入手できるバージョンは古いため、上記サイトから最新版を導入することにした。
導入の方法はOpenJTalkを使ってみる。が詳しい。ほぼ同じ手順でインストールした。
準備
http://open-jtalk.sourceforge.net/より、以下のファイルをダウンロードする。
- open_jtalk-1.06.tar.gz
- open_jtalk_dic_utf_8-1.06.tar.gz
- hts_voice_nitech_jp_atr503_m001-1.05.tar.gz
また、http://hts-engine.sourceforge.net/より、以下のファイルをダウンロードする。
- hts_engine_API-1.07.tar.gz
上記を適当なフォルダに保存しておく。ここでは説明の都合上、~/Downloads に保存したものとする。
ビルド
手順としては、
- hts_engine_APIのビルド
- open_jtalk-1.06にパッチを当てる
- open_jtalk-1.06のビルド
の順でビルドを行う。
例によって ~/workspace フォルダに上記ファイルを展開していくものとする。
hts_engine_APIのビルド
cd ~/workspace
tar xzf ../Downloads/hts_engine_API-1.07.tar.gz
cd hts_engine_API-1.07
./configure
make
sudo make install
open_jtalk-1.06にパッチを当てる
何もせずにopen_jtalkをビルドすると、文章によっては読み上げの途中でものすごく間延びすることがある。これを解決するにはソースにパッチをあてる必要がある。
*** jpcommon/jpcommon_label.c.orig 2012-12-24 17:18:53.000000000 +0900 --- jpcommon/jpcommon_label.c 2013-05-27 16:35:45.195252424 +0900 *************** *** 284,289 **** --- 284,290 ---- if (index == a) break; } + if (i > 3) i = 3; return i; } *************** *** 383,388 **** --- 384,390 ---- for (i = 0, index = m->next; index != NULL; index = index->next) i++; + if (i > 10) i = 10; return index_mora_in_utterance(m) + i; }
上記を適当なファイルmanobi.patchにコピー&ペーストしてworkspaceフォルダに保存する。その後以下を実行する。
cd ~/workspace
tar xzf ../Downloads/open_jtalk-1.06.tar.gz
cd open_jtalk-1.06/
patch -p0 < ../manobi.path
open_jtalk-1.06をビルドする
パッチが成功したら続けてビルドする。
./configure --with-charset=UTF-8
make
sudo make install
各種データファイルの設定
辞書ファイルおよび音声ファイルを展開する。
tar xzf ../Downloads/hts_voice_nitech_jp_atr503_m001-1.05.tar.gz
tar xzf ../Downloads/open_jtalk_dic_utf_8-1.06.tar.gz
sudo mkdir /usr/local/share/open_jtalk
sudo mv hts_voice_nitech_jp_atr503_m001-1.05/ open_jtalk_dic_utf_8-1.06/ /usr/local/share/open_jtalk/
実行
open_jtalk -m /usr/local/share/open_jtalk/hts_voice_nitech_jp_atr503_m001-1.05/nitech_jp_atr503_m001.htsvoice -ow output.wav -x /usr/local/share/open_jtalk/open_jtalk_dic_utf_8-1.06/
上記を実行すると入力待ちになるので、適当な日本語文章を入力してEnterを押す。すると、その文章を読み上げたファイル(output.wav)が生成されるため、適当なプレイヤー(mplayer等)で再生すればよい。
パラメータが長いので適当なシェルスクリプトを作っておいた方がいいだろう。