Raspberry Pi 3にUSBヘッドホンを接続し、日本語音声合成「OpenJTalk」を用いて、Python言語で作成したプログラムで日本語テキストを発話させます。
日本語音声合成「OpenJTalk」のインストール
日本語音声合成「OpenJTalk」は、日本語の文章を入力として、合成音を出力する完全なTTS(Text-to-Speech)エンジンで、最初にapt-getでopen-jtalk をインストールします。
$ sudo apt-get install open-jtalk open-jtalk-mecab-naist-jdic hts-voice-nitech-jp-atr503-m001
mecabの辞書は、/var/lib/mecab/dic/open-jtalk/naist-jdic/ にインストールされます。
Voiceデータを流用して、MMDAgentから音声ファイルのセットアップします。
$ wget https://sourceforge.net/projects/mmdagent/files/MMDAgent_Example/MMDAgent_Example-1.6/MMDAgent_Example-1.6.zip/download -O MMDAgent_Example-1.6.zip
つぎに.htsvoiceファイルを抽出します。
$ unzip MMDAgent_Example-1.6.zip MMDAgent_Example-1.6/Voice/*
ファイルを hts-voice-nitechと同じ場所にコピーしておきます
$ sudo cp -r MMDAgent_Example-1.6/Voice/mei/ /usr/share/hts-voice
USBヘッドホンの接続
Raspberry Pi 3にサンワサプライ USBヘッドセット/ヘッドホン ブラック MM-HSU01BKを接続します(「Raspberry Pi 3にマイクロホンの接続」を参照)。
次のコマンドで、オーディオの優先度を確認します。
$ cat /proc/asound/modules 0 snd_usb_audio 1 snd_bcm2835
「snd_usb_audio」の優先度が一番高くない場合は、「Raspberry Pi 3にUSB DACの接続」の「USB DAC の優先度設定」に従って優先度を変更します。
OpenJTalk用プログラムの作成
subprocess モジュールは新しいプロセスの開始、入力/出力/エラーパイプの接続、リターンコードの取得を可能とします。このモジュールは以下の古いモジュール「os.system」を置き換えます。os.systemメソッドによりaplayコマンドを用いて、OpenJTalkで作成したwavファイルを再生します。
#coding: utf-8 import os import subprocess from datetime import datetime def jtalk(t): open_jtalk=['open_jtalk'] mech=['-x','/var/lib/mecab/dic/open-jtalk/naist-jdic'] htsvoice=['-m','/usr/share/hts-voice/mei/mei_normal.htsvoice'] speed=['-r','1.0'] outwav=['-ow','open_jtalk.wav'] cmd=open_jtalk+mech+htsvoice+speed+outwav c = subprocess.Popen(cmd,stdin=subprocess.PIPE) c.stdin.write(t) c.stdin.close() c.wait() os.system("aplay -D plughw:0,0 'open_jtalk.wav' ") def say_datetime(): d = datetime.now() text = '%s月%s日、%s時%s分%s秒' % (d.month, d.day, d.hour, d.minute, d.second) jtalk(text) if __name__ == '__main__': say_datetime()
aplayコマンドのパラメータについて
USBヘッドフォンから音を出したい場合は、以下のコマンドを実行します。[0,0]がUSBヘッドセットのオーディオ、[1,1]がHDMIのオーディオで、plugをつけると指定のフォーマット、ビットレートになるよう自動でリサンプリング処理を行ってくれます。(「Raspberry Pi 3にマイクロホンの接続」の「マイクロホンによる音声録音」を参照してください。
$ aplay -D plughw:0,0 test.wav
OpenJTalk用プログラムの実行
次のコマンドでOpenJTalk用プログラム「test.py」を実行します。コンソールに再生中の表示があり、USBヘッドホンから日付の発話が聞こえます。
$ python test.py 再生中 WAVE 'open_jtalk.wav' : Signed 16 bit Little Endian, レート 48000 Hz, モ ノラル
※注意
作成されるwavファイルはモノラルのため、aplayコマンドに「-D」を付けないと、次の王に「aplay: set_params:1239: チャネル数が使用不可能」が表示され、再生できません。
$ python test.py aplay: set_params:1239: チャネル数が使用不可能