Raspberry Pi Zeroで音声合成にチャレンジしてみよう

AWS運用自動化サービス「Cloud Automator」
この記事は1年以上前に書かれたものです。
内容が古い可能性がありますのでご注意ください。

MSP課の平(@mana_cat )です。夏休み企画第二弾のエントリーになります。
今回は、Speaker pHATを準備して、音声合成ファイルを再生する手順を紹介します。
もちろん、Speaker pHATを所有されていなくてもRaspberry Pi Zeroや2、3 がお手持ちのスピーカーに繋がっている(音声が出力可能)な状態でしたら、本エントリーの後半「音声合成に必要なパッケージのインストール」の手順からでも楽しめるようになっていますので、ぜひ参考にしてください。

Speaker pHAT とは

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

国内ではスイッチサイエンスで販売されています。

Speaker pHAT のセットアップ

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

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

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

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

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

スピーカー出力テスト

Speaker pHATをRaspberry Pi に装着後、OSが起動できたら、スピーカ出力テストをします。speaker-test コマンドを実行して、Speaker pHATからテスト音が正常に再生されるか確認します。

問題無くテスト音が再生できたらCtrl+Cでキャンセルします。

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

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

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

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

OpenJtalkのインストール

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

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

音声を合成する

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

実際の動画

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

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

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

まとめ

いかがでしたでしょうか。
音声合成はさまざまな分野に応用できる技術なので、ぜひこの夏休みにチャレンジしてみましょう。

AWS運用自動化サービス「Cloud Automator」