PaPeRo iでOpen JTalkによる音声合成を試してみました。
ソースの入手
Open JTalkのビルドに必要なソースは、
(1) hts_engine_API-1.10.tar.gz (http://hts-engine.sourceforge.net/より)
(2) open_jtalk-1.11.tar.gz (http://open-jtalk.sourceforge.net/より)
です。実行時に必要なファイルは、
(3) open_jtalk_dic_utf_8-1.11.tar.gz (http://open-jtalk.sourceforge.net/より)
(4) hts_voice_nitech_jp_atr503_m001-1.05.tar.gz (同上)
です。
ビルド手順
今回はdebian 9上で簡単にcrossbuild-essential-armhfを利用してビルドしました。
$ sudo apt install crossbuild-essential-armhf
(1) まずhts_engine_APIをビルドします。/home/foo/openjtalkで実行するとして、
$ cd /home/foo/openjtalk
$ tar xvzf hts_engine_API-1.10.tar.gz
$ cd hts_engine_API-1.10/
$ ./configure --host arm-linux-gnueabihf --target arm-linux-gnueabihf
$ make
(2) 次に、そのままクロスビルドすると失敗するところがあるので、open_jtalkのネイティブをビルドします。
$ cd /home/foo/openjtalk
$ tar xvzf open_jtalk-1.11.tar.gz
$ mkdir native
$ cd native
$ ../open_jtalk-1.11/configure --with-hts-engine-header-path=/home/foo/openjtalk/hts_engine_API-1.10/include --with-hts-engine-library-path=/home/foo/openjtalk/hts_engine_API-1.10/lib
途中で失敗しますが、mecab/src/mecab-dict-indexが出来ていればOKです。
(3) 次にクロスビルドします。
$ cd ../open_jtalk-1.11/
$ ./open_jtalk-1.11/configure --host arm-linux-gnueabihf --target arm-linux-gnueabihf --with-hts-engine-header-path=/home/foo/openjtalk/hts_engine_API-1.10/include --with-hts-engine-library-path=/home/foo/openjtalk/hts_engine_API-1.10/lib LDFLAGS="-static"
$ make
途中で
../mecab/src/mecab-dict-index -d . -o . -f UTF-8 -t UTF-8
/bin/bash: ../mecab/src/mecab-dict-index: バイナリファイルを実行できません: 実行形式エラー
Makefile:481: ターゲット 'char.bin' のレシピで失敗しました
make[1]: *** [char.bin] エラー 126
make[1]: ディレクトリ '/home/foo/openjtalk/open_jtalk-1.11/mecab-naist-jdic' から出ます
となるので
$ cp ../buildnative/mecab/src/mecab-dict-index mecab/src
$ make
これで/home/foo/openjtakl/open_jtalk-1.11/bin/にopen_jtalkができます。
動かす
(1) open_jtalk_dic_utf_8-1.11.tar.gzとhts_voice_nitech_jp_atr503_m001-1.05.tar.gzをPaPeRo iに転送して展開します。
# mkdir /tmp/openjtalk
# cd /tmp/openjtalk
# tar xvzf ../open_jtalk_dic_utf_8-1.11.tar.gz
# tar xvzf ../hts_voice_nitech_jp_atr503_m001-1.05.tar.gz
(2) ビルドしたopen_jtalkと喋らせたいテキストをUTF-8で作成してパペロに転送し(hello.txt)、
# ./open_jtalk -m hts_voice_nitech_jp_atr503_m001-1.05/nitech_jp_atr503_m001.htsvoice -x open_jtalk_dic_utf_8-1.11/ -ow /dev/stdout hello.txt | aplay -
これでパペロのスピーカーから音声が流れました。「こんにちは」でコマンド実行から喋り出しまで3秒程度、また実行に必要なFLASHの容量は、open_jtalk_dic_utf_9-1.11が大きいのですが、合計で110MByte強といった所でした。音声の品質は、やはりPaPeRo i本来の声に較べると劣る印象でした。
上記のやり方だと音声は男性の声になりますが、Open JTalkは「音響モデル」を入れ替えれば違う声で喋らせることが出来るそうです。
ビルド済みopen_jtalkバイナリをこちらにご用意しました。
※実運用でPaPeRo iに本来の声とは違う声で喋らせて良いかは、NECプラットフォームズ様にお問い合わせいただく必要があるかと思います。また、Open JTalkや音響モデルなどのライセンスにも充分ご注意ください。
※http://d.hatena.ne.jp/rattcv/20130704を参考にさせていただきました。