2019/06/15更新
最新の記事はこちらを参照してください

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

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


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

では作り方です。

【 必需品 】

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


Open JTalkのインストール

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

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

現状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

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

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

sudo chmod 755 jtalk.sh

オーディオ設定

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

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

amixer cset numid=3 1

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

alsamixer

しゃべらせてみる

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

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

先ほどの音量設定にもよりますが、結構ボリュームが小さいので注意しましょう。
このままだとおっさんの低い声なので、メイちゃんの声に変えましょう

MMDagentをダウンロード

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

wget https://sourceforge.net/projects/mmdagent/files/MMDAgent_Example/MMDAgent_Example-1.7/MMDAgent_Example-1.7.zip --no-check-certificate

解凍します

unzip MMDAgent_Example-1.7.zip

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

sudo cp -R ./MMDAgent_Example-1.7/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_angrymei_happyなどもありますので、色々試してみると面白いと思います。

その他

ちなみに、MMDAgentは2019年6月現在の最新版はver1.8ですが、どうもOpen JTalk ver1.07とは相性が良くない(語尾が切れる場合がある)ので、敢えてver1.7にしています。

他にもゆっくりボイスで有名なAquesTalkもあるので、そちらも試してみると面白いと思います
以上、「RaspberryPiを音声合成でしゃべらせよう」でした