2016年8月5日金曜日

Raspberry Pi 2+Raspbianをお話できるようにしました

Raspberry Piの処理結果を得る方法は色々考えられます。
その中から今回は音声合成を使った音の出力をしたいと思います。
準備
今回はRaspberry Pi 2を使います。
Raspberry Pi 2は、音声出力の方法としてHDMIとステレオミニジャックの2種類あります。
スピーカー内蔵モニタならHDMIを、音声のみならステレオミニジャックにスピーカーを接続すると良いでしょう。

ステレオミニジャックを使う場合、出力レベル(音量)がとても低く、イヤホンを使ってやっと聞ける程度です。
大きい音を出したい場合は、相応のスピーカーとアンプが別途必要になります。
接続したのは、100円ショップで購入したモノラルスピーカーx2台でステレオ化したモノとヘッドホンアンプ FiiO E5です。
家にあったものを流用しただけなので、新たに購入されるならアンプ内蔵のモノが安く売られてるのでそちらのほうが良いでしょう。
音声合成ソフト Open JTalk Ver.1.07をインストール
OSは標準的なRaspbianを使っています。
Open JTalkは、入力された文字を元に音声ファイル(wavファイル)を作る音声合成ソフトです。
インストールするパッケージ3つ
  • open-jtalk(Open JTalk本体)
  • open-jtalk-mecab-naist-jdic(辞書)
  • hts-voice-nitech-jp-atr503-m001(音声データ)
コマンドラインから下記をコピペしてインストールします。
$ sudo apt-get install open-jtalk open-jtalk-mecab-naist-jdic hts-voice-nitech-jp-atr503-m001
試しに実行
コマンドラインから下記をコピペして実行します。
$ echo "本日は晴天なり" | open_jtalk -m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice -x /var/lib/mecab/dic/open-jtalk/naist-jdic -ow test.wav
すると、実行した直下にtest.wavというファイルが出来ているはずです。
出来たファイルをパソコンで再生しても良いですし、Raspberry Piで再生する場合は下記のようにすると再生できます。
$ aplay test.wav
もし、再生した音量が小さい場合は調整してみてください。
$ amixer cset numid=1 100%
100%の部分を減らすと音量が下がり、増やすと音量が上がります。
視覚的に調整したい場合は下記コマンドでも出来ます
$ alsamixer
音声合成ファイル作成と再生をするシェルスクリプトを作る
コマンドラインで任意のテキストをお話させるシェルスクリプトを作ります。
スクリプト名はなんでも良いのですが、便宜上jsayとします。 エディタを起動します。
$ nano jsay
起動できたら下記のコードをコピペします。
#!/bin/bash
tempfile=`tempfile`
echo "$1" | open_jtalk -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
aplay -q $tempfile
rm $tempfile
コピペできたら、CTRL+X→Yで保存終了。
出来たシェルスクリプトに実行パーミッションを付加します。
$ chmod +x jsay
できたら試しに実行してみます。
$ jsay 本日は晴天なり
もし、お話させる文字列にスペースが入っていたりする場合はダブルコーテーション(")で括ってあげれば渡す事が出来ます。
女性の声に変えてみる
今度は女性の声で喋らせてみたいと思います。
MMDAgentのmeiという ボイスデータを使わせていただきます

まず、MMDAgentのサイトからSourceForge上に掲載されてるzipファイルをダウンロードします。
$ wget http://tenet.dl.sourceforge.net/project/mmdagent/MMDAgent_Example/MMDAgent_Example-1.6/MMDAgent_Example-1.6.zip
ダウンロードが完了したら 解凍します。
$ unzip MMDAgent_Example-1.6.zip
解凍したディレクトリMMDAgent_Example-1.6直下にある/Voice/meiディレクトリをまるごとrootオーナー/usr/share/hts-voiceにコピーします。
$ sudo cp -r ./MMDAgent_Example-1.6/Voice/mei /usr/share/hts-voice
jsayシェルスクリプトの-mオプションを変更します。
$ nano jsay
修正箇所は下記の赤字の箇所の部分
#!/bin/bash
tempfile=`tempfile`
echo "$1" | open_jtalk -m /usr/share/hts-voice/mei/mei_normal.htsvoice -x /var/lib/mecab/dic/open-jtalk/naist-jdic -ow $tempfile
aplay -q $tempfile
rm $tempfile
CTRL+X→Yで保存終了。
なお、実行パーミッションは変わらないのでそのままで大丈夫です。
できたら再び 試してみます。
$ jsay 本日は晴天なり
女性の声に変わりましたか?
meiの音声ファイルは今回変更したmei_normal.htsvoiceの他に、mei_angry.htsvoicemei_bashful.htsvoicemei_happy.htsvoicemei_sad.htsvoice などが あります。
-mの箇所を適宜変更して 聴き比べてみると良いでしょう。
気圧温度湿度センサー BME280の取得情報を 報告 させてみる
以前このブログで紹介した気圧温度湿度センサー BOSCH BME280で記録している情報をOpen JTalkで報告させてみました。



やり方は、センサーから読み取った 数字を喋らせたい定型文に埋め込み、それをjsayを使って喋らせています。
この要領で色々な活用方法が出来るでしょう。
音声合成ソフト Open JTalk Ver.1.07の 音量調整の難点
今回インストールしたOpen JTalk Ver.1.07 は古いバージョンで、最新はVer.1.09です。
単に喋らせるならば Ver.1.07でも問題なく使用できます。
それに対し、最新版のVer1.09には音量が調整できる-gオプションが追加になっています。
このオプションがあると他のアプリとの音量バランスの調整が可能になるため、 例えばBGM を再生中に強調した発声をさせてお知らせするような事が可能になります。
ただ、Ver.1.09は今回の インストールで使ったaptにはパッケージ登録されていないため 、自前で必要なファイルを用意してコンパイルしインストールする必要があります。

次回は、この手順について 書きたいと思います。