さて、Amazon Echoで自由にしゃべらせる方法は alexa_remote_control_plain.sh
が有名ですが、2段階認証に引っかかったり、仕様がかわったりしていて
安定して使えない状態に陥りました。
なので、Amazon側の認証を経由せずAmazon Echoをしゃべらせる方法を
探すとBluetoothスピーカーとして接続して音声ファイルを再生する方法
をとれることがわかりました。
ラズパイが家庭内にある人はこれをやりたいと思うターゲットだと思うので
これを読んでくれていると思います。(勝手に決めつけですが)
これでAmazonの仕様変更に振り回されず運用できますよ。(できてます)
ということで、以下ラズパイでの操作ですが、これをやりたい人は
すでにそれなりの知識をお持ちでしょうからポイントだけ。
具体的質問はコメント入れてください。
環境はラズパイとechoの間がbluetoothで届く範囲にあることです。
まずbluezを入れてください。
bluetoothctlを使ってEchoのBluetoothアドレスを探します。
そしたら
アドレスをXX:XX:XX:XX:XX:XXとすると、
bluetoothctl pair XX:XX:XX:XX:XX:XX
bluetoothctl trust XX:XX:XX:XX:XX:XX
bluetoothctl connect XX:XX:XX:XX:XX:XX
aplay -D bluealsa:DEV=XX:XX:XX:XX:XX:XX,PROFILE=a2dp /home/ubuntu/a.wav
でa.wavを再生できます。
a.wavは音声ファイルとします。音声合成をwavファイル化する方法は
ネット上にすぐに見つかります。
これで快適な環境ですが、1点だけ解決できない問題があり
初回の接続時にラズパイに接続しました(ここでラズパイはホスト名で
呼ばれます)とアナウンスされてしまいます。
接続間隔が短時間ですとアナウンスされませんが、一定時間通信されないと接続が切れるらしいので再接続時に希望しないアナウンスがされます。
アナウンス中に再生は切られてしまうので、尻切れ状態になります。
なので、無音再生をしてアナウンスを終えたのを見越して
希望ファイルを再生するように工夫しています。
これを防ぐには、一定間隔で無音WAVを再生して接続が切れないように
するくらいか、このアナウンスを受け入れるか(笑)です。
今は後者ですが、前者を試したいと思っています。
音声合成で希望の声にすれば、alexaの声じゃない再生となるので
こちらが好みの方もいるでしょう。
この後はテキスト->音声合成->再生のshellスクリプトにして
テキストだけで任意の再生ができるといいなともくろんでいます。
上記はすべてnoderedでコントロールしています。
皆さんnodered大好きですよね(笑)
ではでは。