Mana Blog Next

自宅IoT、仕事と家庭、カメラ、筋トレ生活

ラズパイZeroとOpenJTalk で京急線の案内を喋らせてみた

f:id:mana-cat:20170504232933j:plain

今回は、Speaker pHATを準備して、音声合成ファイルを再生する手順を紹介します。ラズパイZeroやラズパイ2、3 がスピーカーに繋がっている(音声が出力可能)な状態でしたら、後半「音声合成に必要なパッケージのインストール」の手順からでも楽しめるようになっていますので参考にして下さい。

Speaker pHAT を使ってみた

Speaker pHAT はGPIOピンに装着するタイプのHATです。このpHATは、I2S DAC とモノラルアンプ、小型8Ω 2Wスピーカー、LED10個を搭載しています。音声がハッキリと聞こえるので、これ1枚で外出先で音声を流したり、インターネットラジオを聴いたりと活用できると思います。また、別途USBマイクを用意して対話型の音声認識を楽しめたりもできそうなウキウキが待っています。

スイッチサイエンスで国内販売が始まりました!

スピーカー不要の場合

ちなみに、スピーカーは既に持っていて、ラズパイZeroと繋げるDACだけ欲しい人は、以前紹介した pHAT DACがおすすめです。

www.switch-science.com

Speaker pHAT のセットアップ

必要パッケージをインストールする段階では Speaker pHAT を装着しないで下さい。必要パッケージがインストールされていない状態で pHAT を装着してしまうと、OSの起動がうまくいかない場合があります。

今回、ラズパイZeroを使っていますが、ラズパイ2、3を使用する場合はI2Sをsudo raspi-config で有効化してください。

以下の手順でSpeaker pHATに必要なパッケージをインストールします。

$ sudo curl -sS https://get.pimoroni.com/speakerphat | bash
Do you wish to continue? [y/N] y
Do you wish to perform a full install? [y/N]y
Would you like to reboot now? [y/N] y

セットアップが終わったら、一度電源を切ります。

$ sudo shutdown -h now

電源を切り終えたら、microUSBを外して Speaker pHAT を装着して下さい。装着したら電源に接続しますが、このときmicroUSBからの給電は直接電源へ接続したUSBアダプターから行って下さい。Speaker pHAT単体で消費するので、安定した電力が必要です。そのため、PCからの給電は不安定になることがあるため行わないで下さい。もし、給電不足になると、出力した音声にノイズが走ったり、OS自体が正常に起動できなくなります。

スピーカー出力テスト

OSが起動できたら、スピーカ出力テストをします。speaker-test コマンドを実行して、Speaker pHATからテスト音が流れるか確認します。もし問題無くテスト音が出たらCtrl+Cでキャンセルして構いません。

$ speaker-test -t sine -f 600

音量を調整したいときは以下のコマンドで調整できます。

$ alsamixer

ちなみに楽曲を流すと、以下のようにLEDが光って1980年代風のブームボックスっぽいデザインになっています。

次は、音声合成をします。

音声合成に必要なパッケージのインストール

日本語の音声合成に必要なパッケージをインストールします。

OpenJtalkのインストール

まずは open-jtalk をインストールし、その後、提案パッケージをインストールします。確認のため 続行しますか? [Y/n] と訊かれますので y を入力します。

$ sudo apt-get install open-jtalk
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  libhtsengine1
提案パッケージ:
  open-jtalk-mecab-naist-jdic hts-voice-nitech-jp-atr503-m001
以下のパッケージが新たにインストールされます:
  libhtsengine1 open-jtalk
アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 0 個。
187 kB のアーカイブを取得する必要があります。
この操作後に追加で 542 kB のディスク容量が消費されます。
続行しますか? [Y/n] y

次に、表示された提案パッケージをインストールします。

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

音声を合成する

男性の音声エージェントを使って合成してみよう

必要なパッケージがインストールされたら、先ほどインストールした /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice を使って実際に音声データを合成します。このとき、合成元のテキストを voice.txt として用意します。これを OpenJtalk を使って日本語の音声として合成し、出力します。出力する音声は wav ファイルになります。

$ nano voice.txt
こんばんは。はじめまして、僕の名前は江戸川コナン。探偵さ。

作成した テキスト voice.txt をOpenJtalk の元データとして渡すために、次のコマンドを実行します。そして、 aplay コマンドで出力されたvoice.wav ファイルを再生します。

$ 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 voice.wav voice.txt
$ aplay voice.wav

問題無く音声が出たら成功です。

女性の音声エージェントを使って合成してみよう

次に、女性の音声エンジンを使用してみたいので、MMDAgentを利用します。MMDAgentとは、名古屋工業大学国際音声技術研究所によって作成されたオープンソースの音声インタラクションシステム構築ツールキットです。

mmdagent.jp から女性の音声データを以下の手順でダウンロードします。ダウンロードが完了したら、MMDAgent_Example-1.7.zip を展開し、meiディレクトリ配下を /usr/share/hts-voice/ にコピーします。

$ wget http://downloads.sourceforge.net/project/mmdagent/MMDAgent_Example/MMDAgent_Example-1.7/MMDAgent_Example-1.7.zip
$ unzip MMDAgent_Example-1.7.zip
$ sudo cp -R ./MMDAgent_Example-1.7/Voice/mei /usr/share/hts-voice/

女性の音声エージェントを使用して、もう一度 音声を合成します。

$ open_jtalk -m /usr/share/hts-voice/mei/mei_normal.htsvoice -x /var/lib/mecab/dic/open-jtalk/naist-jdic -ow mei-normal.wav voice.txt
$ aplay mei-normal.wav

音声が女性に変わりましたね。

MMDAgent には喜怒哀楽別に音声データが用意されている

女性の音声エージェントは感情別に何種類かあって、mei_normal.htsvoice を使用していますが、好みに応じて変更して下さい。

$ ls  /usr/share/hts-voice/mei/mei_*
/usr/share/hts-voice/mei/mei_angry.htsvoice
/usr/share/hts-voice/mei/mei_bashful.htsvoice
/usr/share/hts-voice/mei/mei_happy.htsvoice
/usr/share/hts-voice/mei/mei_normal.htsvoice
/usr/share/hts-voice/mei/mei_sad.htsvoice

読み上げ用スクリプトの作成

読み上げ用のスクリプトを作成します。今回は /usr/share/hts-voice/mei/mei_happy.htsvoice を音声エージェントとして使用しています。

$ nano speak.sh
#!/bin/sh
TMP=/tmp/voice.wav
echo "$1" | open_jtalk -m /usr/share/hts-voice/mei/mei_happy.htsvoice -x /var/lib/mecab/dic/open-jtalk/naist-jdic -ow $TMP && aplay --quiet $TMP
rm -f $TMP

作成したシェルスクリプトのパーミッションを変更します。

$ chmod 755 speak.sh

京急線のアナウンスを読み上げてもらう

スクリプトを実行します。./speak.sh の後に、読み上げて欲しいテキストを入力します。難しくない漢字もだいたい認識してくれます。Enterを押すと実行されます。

$ ./speak.sh 間もなく、一番線に、けいきゅう久里浜ゆきが、ふたつとびらで到着いたします。白線の内側まで、下がってお待ち下さい。次は、品川です。

実際の動画

※ 動画は10秒経ってから音声が始まります。

このように、比較的自然と読み上げてくれます。注意点としては、京急 だと きょうきゅう と読み上げてしまうので、ひらがなで けいきゅう にしています。

さて問題です。この駅はどこでしょうか?

おまけ。このエントリーとは関係無いけど、以前 撮影したくまモン体操(公開OK)をYouTubeにアップしていたので、こちらも見てね。


くまモン体操@湯島天神梅まつり

α7IIで動画を撮影、三脚無し、外部マイク無しでこんだけ録画できるんだからびっくり。

関連ページ