PaPeRo iでOpen JTalkによる音声合成を試す

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を参考にさせていただきました。


0