Top/Devel/電子工作/RaspberryPi/日本語音声出力

日本語音声出力 の変更点はてなブックマーク


[[Raspberry Pi>../]]に[[HMMテキスト音声合成システムOpen JTalk>http://open-jtalk.sp.nitech.ac.jp/]]をインストールして、任意の文を喋らせます。

OSのインストールやWiFiドングルのセットアップなどの初期設定は[[こちら>../Raspbianのインストール]]をご覧ください。

*必要なもの
#amazon(B007F4J83O)
-ヘッドフォンなどのヘッドフォン端子につなぐ音響機器 または [[USBスピーカー>http://www.amazon.co.jp/exec/obidos/ASIN/B007F4J83O/cubic9com-22]]

USBスピーカーの方がノイズが少なくてよいようです。
#clear

*USBスピーカーを使う場合
接続後にこんな感じでUSBオーディオの優先度を上げる必要があるようです。
#code(bash,nonumber){{
cat /proc/asound/modules
}}
>
#code(bash,nonumber){{
0 snd_bcm2835
1 snd_usb_audio
}}
<
#code(bash,nonumber){{
sudo nano /etc/modprobe.d/alsa-base.conf
}}
>index=-2をindex=0にします。
#code(bash,nonumber){{
options snd-usb-audio index=0
}}
<
#code(bash,nonumber){{
sudo reboot
}}
#code(bash,nonumber){{
cat /proc/asound/modules
}}
>
#code(bash,nonumber){{
0 snd_usb_audio
1 snd_bcm2835
}}
<

*手順
+Open JTalkと関係パッケージをインストールする。
#code(bash,nonumber){{
sudo aptitude install open-jtalk open-jtalk-mecab-naist-jdic htsengine libhtsengine-dev hts-voice-nitech-jp-atr503-m001
}}
+話す際に使うスクリプトを書く。(橋本商会様のスクリプトを少し改変しました)
#code(bash,nonumber){{
nano jsay.sh
}}
>
#code(bash,nonumber){{
#!/bin/sh
TMP=`mktemp`
cd /usr/share/hts-voice/nitech-jp-atr503-m001
echo "$1" | open_jtalk \
-td tree-dur.inf \
-tf tree-lf0.inf \
-tm tree-mgc.inf \
-md dur.pdf \
-mf lf0.pdf \
-mm mgc.pdf \
-dm mgc.win1 \
-dm mgc.win2 \
-dm mgc.win3 \
-df lf0.win1 \
-df lf0.win2 \
-df lf0.win3 \
-dl lpf.win1 \
-ef tree-gv-lf0.inf \
-em tree-gv-mgc.inf \
-cf gv-lf0.pdf \
-cm gv-mgc.pdf \
-k gv-switch.inf \
-s 16000 \
-a 0.05 \
-u 0.0 \
-jm 1.0 \
-jf 1.0 \
-jl 1.0 \
-x /var/lib/mecab/dic/open-jtalk/naist-jdic \
-ow $TMP && \
aplay --quiet $TMP
rm -f $TMP
}}
<
+実行権限を与える。
#code(bash,nonumber){{
chmod a+x jsay.sh
}}


次のようにすると音声が出力される。
#code(bash,nonumber){{
./jsay.sh ほげほげ
}}


*ヘッドホン端子に音響機器を接続していて音が出ない場合
HDMI側から出力されていることがあるようです。

確認してみましょう。

#code(bash,nonumber){{
amixer cget numid=3
}}
>
#code(bash,nonumber){{
numid=3,iface=MIXER,name='PCM Playback Route'
  ; type=INTEGER,access=rw------,values=1,min=0,max=2,step=0
  : values=0
}}
<

|数値|出力先|h
|0|auto|
|1|ヘッドホン端子|
|2|HDMI|

今はautoになっているようですね。

もし問題がある場合は下記のようにすると、ヘッドホン端子から出力されるようです。

#code(bash,nonumber){{
amixer cset numid=3 1
}}


*声を変えてみる
ここまでで、/usr/share/hts-voice/ 配下にはnitech-jp-atr503-m001というディレクトリができているはずです。

これは男声ですが、これをMMDAgentの付属物として配布されている女声(MEI)のボイスに差し替えてみましょう。

#code(bash,nonumber){{
unzip MMDAgent_Example-1.3.zip
sudo cp -R MMDAgent_Example-1.3/Voice/* /usr/share/hts-voice/
}}


ここまでで、/usr/share/hts-voice/ 配下には下記のディレクトリができているはずです。

|ディレクトリ|声質|h
|mei_angry|女声。怒。|
|mei_bashful|女声。不明。|
|mei_happy|女声。喜。|
|mei_normal|女声。普通。|
|mei_sad|女声。哀。|
|nitech-jp-atr503-m001|Open JTalkと一緒に配布されている男声。|

上記シェルスクリプトの上部で、当該ボイスディレクトリにcdしているので、その箇所を変えれば、声を変えられます。


*参考
-[[橋本商会 &#187; Raspberry Piに喋らせる>http://shokai.org/blog/archives/6893]]

*Amazon
#amazon(B00T356SFO,left)
#amazon(B00SXYGOQ4,left)
#amazon(B01CFHHYF4,left)
#amazon(480071172X,left)
#amazon(B007F4J83O,left)
差分 一覧