音声合成させてみる。 †基本的に普段画面は繋げていないので、何かがあった場合に知らせる手段としては、音による通知が良い手段なのかなと。 スピーカは別のところに置いて、決まった時間にその日の予定を喋らせたり、子供に学校の準備を促したりするために、bluetoothでの接続をすることにします。 というわけで、AmazonでBluetoothアダブタのBT-MICRO4と、ワイヤレスオーディオレシーバーを購入しています。 と思ったのですが、ダイソーのスピーカーは全然音が出なくて使い物になりませんでした……。 bluetoothオーディオ †まずはbluetoothの各種パッケージをインストールします。 sudo apt-get install bluetooth bluez-utils blueman bluetoothはBluetooth用ツールとデーモン、bluez-utilsはドライバアップデートみたいなもん、bluemanはGUIの管理ユーティリティという感じですかね。 リモートデスクトップでGUIにログインし、設定のところにあるBluetoothマネージャーを起動します。 一度、システムツールのタスクマネージャーから、blueman-appletを終了されてから、再度Bluetoothマネージャーを起動すると、画面が開きました。 画面が開いたら、オーディオレシーバーを電源に繋いで、検索ボタンを押すと、画面にレシーバーが現れます。 繋ごうとした時の設定は、ヘッドセットサービスじゃないと繋がらないようでした。 ペアリングは、「0000」で繋がります。 そして繋がると、インジケータが表示されるようになります。 ここで出ている16進数のアドレスは次で使うので、メモっておく等しましょう。 次に、オーディオデバイスとして使えるように設定します。 pcm.!default{
type bluetooth
device "00:1F:8E:D3:96:BE"
}
deviceに記述しているのは、先ほどのアドレスです。 次に、「/etc/bluetooth/audio.conf」に以下の記述を追加します。 [General] Enable=Source,Sink,Headset,Gateway,Control,Socket,Media AutoConnect=true 今回必要なのは、Headsetだけのような気もしますが、色々使えるようにしておきます。 RaspberryPiが起動したのを見計らって、オーディオレシーバーも電源に繋ぐと、自動的にペアリングされて、音が出せるようになりました。 「/usr/share/sounds/alsa」の中あたりに、wavファイルがあったりしますので、これで鳴らしてみます。 aplay /usr/share/sounds/alsa/Front_Left.wav 一応鳴るには鳴るんですが、先頭がちょっと途切れる感じです。 これはもう、そういうもんだと諦めて、無音をちょっと流してから本来鳴らしたいものを出力するとかするべきなのかな? OpenJTalk †このあたりは、以下のサイトを参考にさせてもらいました。
OpenJTalkを動かすのに必要な、各種パッケージをインストールします。 sudo apt-get install open-jtalk open-jtalk-mecab-naist-jdic htsengine libhtsengine-dev hts-voice-nitech-jp-atr503-m001 OpenJTalk本体と辞書データ、音声合成エンジンとライブラリ、サンプルの男声データになります。 で、さっそくちょっとスクリプト組んで喋らせてみたんですけど、前述のように先頭が途切れるので、2〜3文字分が欠けて聞こえてしまいます。 というわけで、先ほどの無音音声ファイルを「/usr/local/share/sound」に配置して、「/usr/local/bin」に「jsay」スクリプトを作成します。 #!/bin/sh
TMP=`mktemp -t`
VOICEDIR="/usr/share/hts-voice/nitech-jp-atr503-m001"
DICDIR="/var/lib/mecab/dic/open-jtalk/naist-jdic"
SILENTWAV="/usr/local/share/sound/silence.wav"
echo "$1" | open_jtalk \
-x ${DICDIR} \
-td ${VOICEDIR}/tree-dur.inf \
-tm ${VOICEDIR}/tree-mgc.inf \
-tf ${VOICEDIR}/tree-lf0.inf \
-tl ${VOICEDIR}/tree-lpf.inf \
-md ${VOICEDIR}/dur.pdf \
-mm ${VOICEDIR}/mgc.pdf \
-mf ${VOICEDIR}/lf0.pdf \
-ml ${VOICEDIR}/lpf.pdf \
-dm ${VOICEDIR}/mgc.win1 \
-dm ${VOICEDIR}/mgc.win2 \
-dm ${VOICEDIR}/mgc.win3 \
-df ${VOICEDIR}/lf0.win1 \
-df ${VOICEDIR}/lf0.win2 \
-df ${VOICEDIR}/lf0.win3 \
-dl ${VOICEDIR}/lpf.win1 \
-em ${VOICEDIR}/tree-gv-mgc.inf \
-ef ${VOICEDIR}/tree-gv-lf0.inf \
-cm ${VOICEDIR}/gv-mgc.pdf \
-cf ${VOICEDIR}/gv-lf0.pdf \
-k ${VOICEDIR}/gv-switch.inf \
-s 16000 \
-a 0.05 \
-u 0.0 \
-jm 1.0 \
-jf 1.0 \
-jl 1.0 \
-ow $TMP && \
aplay --quiet ${SILENTWAV} && \
aplay --quiet $TMP
rm -f $TMP
MMDAgent用ミク音響モデル †さて、デフォルトの声ではあんまりにも色気がないので、娘(6歳)も息子(2歳)も知っている我らが初音ミクの声に置き換えることにします。 MMDAgentは、MikuMikuDance(で作ったモデルやモーション)とOpenJTalk、音声認識エンジンのJulius等を組み合わせた、一つのシステムです。 MMDAgent & Project-NAIP wikiさんが、ミクの自作音響モデルを公開されていますので、TYPE-α、TYPE-β共にダウンロードしておきます。 あとは、前述のスクリプトのVOICEDIRの指定を、それぞれのものに置き換えればOKです。 jsay あいうえおー とかで喋ります。 |