2016/5/20

RaspberryPiを音声合成でしゃべらせよう

どうも、クラゲです。
今回は音声合成を使ってラズパイに日本語をしゃべらせる方法を紹介します。
任意のテキストを即時実行して喋らせることが可能です。それでは動画で聞いてみよう。


この動画では自然に聞こえるように、言葉を選んでテキストにしています。
例えばニュースや天気などをそのまましゃべらせると、ちょっとぎこちなかったりもしますが、それも愛嬌です。

では作り方です。

【 必需品 】

【 おおまかな作業の流れ 】


Open Jtalkのインストール

音声合成のエンジン、辞書、音声データを一気にインストールします
コマンド一発でサクッとできます

sudo apt-get install open-jtalk open-jtalk-mecab-naist-jdic hts-voice-nitech-jp-atr503-m001

追加パッケージがいるか聞かれるので y で答えます
現状ver1.07が入りました。

スクリプトファイル作成

テキストエディッタnanoを使って、jtalk.shというスクリプト名にして作成します

sudo nano jtalk.sh

中身は以下の内容を書きます

#!/bin/bash 
tempfile=`tempfile`
option="-m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice \
  -x /var/lib/mecab/dic/open-jtalk/naist-jdic \
  -ow $tempfile"
 
echo "$1" | open_jtalk $option
aplay -q $tempfile
rm $tempfile

opne_jtalkコマンドで、tempfileにwavファイルを作り、alayコマンドでtempfileを再生し、最後にtempfileを削除しています
optionのmは使う音声データ、xは使う辞書、owは保存するファイル名を表しています。

スクリプトファイルができたら、実行可能になるように権限を変更します

sudo chmod 755 jtalk.sh

オーディオ設定

早速実行!といきたいところですが、先にオーディオの設定をしましょう
まず、オーディオ出力端子にスピーカーを接続してください。
スピーカーのない人はHDMIケーブルでディスプレーと繋げてください

次に、オーディオの出力先を変更します。
最後のパラメーターですが、オーディオ出力端子の人は1、HDMIの人は2にしてください。

amixer cset numid=3 1

最後の数値が1:Audio 2:HDMI

最後に音量設定です
上下キーで音量のアップダウンができます。
また、数値キーを押すと、その10倍の値に直接指定できます

alsamixer

しゃべらせてみる

以下のコマンドで簡単に喋らせることができます。
文字列をいろいろ変えてみてください。

./jtalk.sh "こんにちは。ラズベリーパイが喋っていますよ"

このままだと声の低いおっさんの声なので、メイちゃんの声に変えましょう

MMDagentをダウンロード

http://www.mmdagent.jp/
ページの一番下にSourceforgeのリンクがあり、そこかダウンロード可能ですが、ラズパイ上のコマンドを使ってダウンロードします

wget http://downloads.sourceforge.net/project/mmdagent/MMDAgent_Example/MMDAgent_Example-1.6/MMDAgent_Example-1.6.zip

解凍します

unzip MMDAgent_Example-1.6.zip

解凍してできたVoiceフォルダの中身を /usr/share/hts-voiceの下にコピーします

sudo cp -R ./MMDAgent_Example-1.6/Voice/mei /usr/share/hts-voice/

これでメイちゃんの音声データが配置されました

スクリプトファイルの編集

テキストエディッタnanoを使って、jtalk.shを編集します

sudo nano jtalk.sh

編集箇所は1箇所だけ
3行目をメイちゃんの音声データに変更しています

#!/bin/bash 
tempfile=`tempfile`
option="-m /usr/share/hts-voice/mei/mei_normal.htsvoice \
  -x /var/lib/mecab/dic/open-jtalk/naist-jdic \
  -ow $tempfile"
 
echo "$1" | open_jtalk $option
aplay -q $tempfile
rm $tempfile

メイちゃんの声でしゃべらせる

先ほどと同じです。色々文字列を変えてみよう!

./jtalk.sh "こんにちは。ラズベリーパイが喋っていますよ"

メイちゃんの音声データは、mei_normalの他にmei_angryやmei_happyなどもありますので、色々試してみると面白いと思います。

その他

スクリプト上で色々パラメーターをいじることができますが、Open JTalkの場合はいじらないでデフォルトのままが一番良いです
参考リンク http://moblog.absgexp.net/openjtalk/

以下の最新バージョンをmakeして導入してみましたが、音声合成の質にほとんど変化は聞き取れませんでした。
HTS engine APIの最新1.10、open talkの最新版 1.09、Dictionary for Open Jtalkの最新版1.09

他にもゆっくりボイスで有名なAquesTalkもあるので、そちらもやってみると面白いと思います
http://www.a-quest.com/products/aquestalkpi.html

いかがでしたでしょうか?
以上、「RaspberryPiを音声合成でしゃべらせよう」でした