PaPeRo iでeSpeak NGによる多言語音声合成を試してみました。
eSpeak NGとは
eSpeak NGは英語及び多言語に対応した音声合成エンジンです(GPLライセンス)。
日本語は試した時点でひらがな・カタカナのみ対応で品質はPaPeRo iのオリジナルの発話やOpen JTALKより劣りますが、対応言語が102言語もあり、PaPeRo iが対応している日本語、英語、中国語以外の言語のために試してみました。
DebianやUbuntuであれば、
$ sudo apt install espeak-ng
でインストールできますので、品質などを確認したい場合はPaPeRo iで動かすよりも普通のLinuxでまず動かしてみるのが簡単です。なんというか「ロボ声」といった感じで、おそらく「なんとか聞き取れる」というレベルではないかと思います。
ビルド手順
今回もDebian 9上で簡単にcrossbuild-essential-armhfを利用してビルドしました。
(1) ソース入手
ソースは
$ git clone https://github.com/espeak-ng/espeak-ng.git
でダウンロードできます。較べてみたところaptでインストールできるものより対応言語が増えており、活発に開発が続けられている様です。
(2) ビルド
公式で説明されているクロスビルド方法に従ってビルドします。最初にネイティブでmakeし、その後クロスビルドします。
$ ./configure
$ make
$ ./configure --target=arm-linux-gnueabihf --host=arm-linux-gnueabihf --with-sonic=no --prefix=/Extension/local
$ make --trace -B src/espeak-ng src/espeak-ng
出来たespeak-ngはダイナミックリンクでPaPeRo iでは動作しないので、スタティックリンクにするため、最後コマンドラインででリンクし直します(configureでLDFLAGS=”-static”は効きません)。
$ /bin/bash ./libtool --silent --tag=CC --mode=link arm-linux-gnueabihf-gcc -Isrc/include -Isrc/include/compat -I src/ucd-tools/src /include -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112L -Wno-endif-labels -Wunused-parameter -Wunused -Wuninitialized -Wreturn-type -Wmissing-prototypes -Wimplicit -g -O2 -std=c99 -static -all-static -o src/espeak-ng src/espeak-ng.o src/libespeak-ng.la
Debian9には無い/Extensionをインストール用に作り、インストールします。
$ sudo mkdir /Extension
$ sudo chmod 777 /Extension
$ make install
実行バイナリと必要なデータだけをtarでまとめ、/Extensionは消しておきます。
$ cd /Extension/local
$ tar cvzf /tmp/espeak-ng-bin-share.tar.gz bin/espeak* share/espeak-ng-data/
$ rm -rf /Extension
(3) インストール
espeak-ng-bin-share.tar.gzをPaPeRo iに転送し、/Extension/localで展開します。
# cd /Extension/local
# tar xvzf /tmp/espeak-ng-bin-share.tar.gz
動作確認
例えばブラジルポルトガル語のテキストbrasiltest.txtを音声合成するには以下の様にすればよい様です。
男性の声の場合:
# espeak-ng -v pt-br -f brasiltest.txt -w /dev/stdout | aplay -
女性の声の場合:
# espeak-ng -v pt-br+f3 -f brasiltest.txt -w /dev/stdout | aplay -
他に-s 120などで発話スピードの指定などもできます。日本語の場合と異なり、実行から発話開始までのタイムラグはほとんど無く、また、/Extension/local/share以下のデータも6MB程度と少なかったです。
対応言語は
# espeak-ng --voices
で表示されます。来日外国人や在日外国人の上位の国の中では、ポルトガル語、スペイン語、韓国語、マレー語(マレーシア)、インドネシア語、ベトナム語には対応していますが、タイ語やフィリピン語には現在未対応の様でした。
ビルド済みバイナリとデータをこちらに用意しました。