Raspberry Pi スマートホーム化計画 記事一覧
記事の内容を試す場合は自己責任でお願いいたします。
構成図
今回の作業の大まかな構成図です。
Raspberry Pi zeroとAmazon echo flexをBlootoothで接続して、音を再生します。
Bluetoothの準備
Raspberry Pi Zero WHでBluetoothスピーカーを接続する準備を行います。
Amazon Echoをペアリングモードにします。
スマホやWEBのAlexaアプリか、声で「ペアリングして」といえばいいです。
コマンド
$ sudo bluetoothctl
[bluetooth]# scan on
[NEW] Device xx:xx:xx:xx:xx:xx Echo Flex-xxx
[bluetooth]# trust xx:xx:xx:xx:xx:xx
[bluetooth]# pair xx:xx:xx:xx:xx:xx
xx:xx:xx:xx:xx:xxの部分は適宜読み替えてください。
これでペアリングが完了しました。
次に、音をBluetooth経由で出力できるように設定します。
コマンド
$ sudo vim /etc/asound.conf
/etc/asound.conf
defaults.bluealsa.interface "hci0"
defaults.bluealsa.device "xx:xx:xx:xx:xx:xx"
defaults.bluealsa.profile "a2dp"
defaults.bluealsa.delay 10000
pcm.btreceiver {
type plug
slave.pcm {
type bluealsa
device "xx:xx:xx:xx:xx:xx"
profile "a2dp"
}
hint {
show on
description "Bluetooth Receiver"
}
}
pcm.!default {
type plug
slave.pcm "btreceiver"
}
2箇所のxx:xx:xx:xx:xx:xxはalexaのMACアドレス
これで以下のコマンドを実行して音が出れば完了です。
コマンド
$ aplay -D bluealsa /usr/share/sounds/alsa/Front_Center.wav
Open JtalkでRaspberry Piを喋らせる
Raspberry Pi(ラズパイ)を音声合成で日本語をしゃべらせてみた!(OpenJTalk) | りけろぐ
「ラズパイを音声合成でしゃべらせてみたい!」 ラズパイは最近IoTデバイスとして注目されています。 ラズパイはいわば小さいパソコンで、色々なことが出来ます。 前回、そんなラズパイをセットアップしてみました。 Google AIY Voice
Open JTalkのインストール
$ sudo apt-get install -y open-jtalk open-jtalk-mecab-naist-jdic hts-voice-nitech-jp-atr503-m001
女性の声の追加
$ cd /opt
$ mkdir openjtalk
$ sudo chown pi openjtalk
$ cd /opt/openjtalk
$ wget https://sourceforge.net/projects/mmdagent/files/MMDAgent_Example/MMDAgent_Example-1.7/MMDAgent_Example-1.7.zip --no-check-certificate
$ unzip MMDAgent_Example-1.7.zip
$ rm MMDAgent_Example-1.7.zip
openjtalk.sh
#!/bin/bash
tempfile=`tempfile`
if [ $# -ne 1 ]; then
if [ $2 = "mei" ]; then
option="-m /opt/openjtalk/MMDAgent_Example-1.7/Voice/mei/mei_normal.htsvoice \
-x /var/lib/mecab/dic/open-jtalk/naist-jdic \
-ow $tempfile"
elif [ $2 = "mei_angry" ]; then
option="-m /opt/openjtalk/MMDAgent_Example-1.7/Voice/mei/mei_angry.htsvoice \
-x /var/lib/mecab/dic/open-jtalk/naist-jdic \
-ow $tempfile"
elif [ $2 = "man" ]; then
option="-m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice \
-x /var/lib/mecab/dic/open-jtalk/naist-jdic \
-ow $tempfile"
else
option="-m /opt/openjtalk/MMDAgent_Example-1.7/Voice/mei/mei_normal.htsvoice \
-x /var/lib/mecab/dic/open-jtalk/naist-jdic \
-ow $tempfile"
fi
else
option="-m /opt/openjtalk/MMDAgent_Example-1.7/Voice/mei/mei_normal.htsvoice \
-x /var/lib/mecab/dic/open-jtalk/naist-jdic \
-ow $tempfile"
fi
echo "$1" | open_jtalk $option
aplay -q $tempfile
rm $tempfile
MMDAgent_Example-1.7のパスの部分は適宜読み替えてください。
引数にmei_angryなどといれるとその声で再生されます。
何も入れないい場合はmeiで再生されます。
喋らせる
$ chmod +x openjtalk.sh
$ ./openjtalk.sh "おはよう" mei
このタイミングでecho flexから音が出なくなりました。
アップデートやrebootなどいろいろ試したのですが、原因はつかめず。
Amazon Echo Flexの電源を抜いて入れ直したらしゃべるようになりました。
あとはこのシェルスクリプトに喋らせたい言葉を突っ込めば好きに喋らせることができます。
iPhoneのオートメーション機能を使えばiPhoneから喋らせることも可能です。
キープアライブする
Amazon Echoから音が出力できるようになりましたが、時間をおくと接続が切れて、このとき再生すると
「〇〇に接続します」
と再生中の音にかぶせてAlexaが喋ります。
そこで、無音wavファイルを定期的に再生して接続を切れないようします。
参考サイト:
Amazon EchoをRaspberry PiのBluetoothスピーカーとして利用する | work.log
再生するシェルスクリプトを作成します。
alexa_keepalive.sh
#!/bin/bash
cd `dirname $0`
aplay -D bluealsa muon_01sec.wav
無音のwavファイルを適当に拾ってきます。
今回は参考サイトのリンク先にあったものを利用しました。
これを定期実行するためにcronに登録します。
5分毎に実行されます。
crontab -e
$ crontab -e
以下を追加
(ディレクトリは適宜読み替えてください)
*/5 * * * * /opt/scripts/alexa_keepalive.sh >/dev/null 2>&1
これで定期的に無音のファイルをAlexaから再生することで接続が切れないようになります。
iPhoneから喋らせる
ショートカットアプリを使えば簡単にsshができます。
※ openjtalk.shのパスやファイル名が異なっているので適宜読み替えてください
適当にこのように作ってボタンを押して喋らせたい言葉を入力すれば、おしゃべりマシーンの完成です。
コメント