PaPeRo iでeSpeak NGによる多言語音声合成を試す

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

で表示されます。来日外国人や在日外国人の上位の国の中では、ポルトガル語、スペイン語、韓国語、マレー語(マレーシア)、インドネシア語、ベトナム語には対応していますが、タイ語やフィリピン語には現在未対応の様でした。

ビルド済みバイナリとデータをこちらに用意しました。