Alexaを搭載したEcho Dotなどのスマートスピーカーは、基本的に人間から話しかけることで喋り返してくれます。
しかしPCやRaspberry Piなど外部のデバイスを利用すれば、話しかける以外の動作をトリガーにして任意のフレーズをAlexaに喋らせるといったことも可能です。
Alexaを自由に喋らせる方法はいくつかありますが、今回はコマンドラインから操作可能なalexa-remote-controlを利用する方法について簡単にまとめておきます。
alexa-remote-controlの使い方
今回はGUIが不要で、コマンドラインでAlexaの操作を可能にするalexa-remote-controlを利用させていただきました。詳しくはGitHubを参照してください。
alexa-remote-control.shをダウンロードする
$ wget https://raw.githubusercontent.com/thorsten-gehrig/alexa-remote-control/master/alexa_remote_control.sh
上記のコマンドを叩いてラズパイにalexa-remote-control.shをダウンロード、保存します。
もし後述するようにSystemdで自動起動させるつもりならoptディレクトリに移動させましょう。
alexa-remote-control.shを設定する
$ sudo nano alexa-remote-control.sh
nanoなどのエディタを使用して、ダウンロードしたスクリプトファイルの94~152行目あたりを編集します。
設定項目はいろいろありますが、最低限以下の7項目を確認しておけば大丈夫です。
- SET_EMAIL=’Amazonアカウントのメールアドレス’
- SET_PASSWORD=’Amazonアカウントのパスワード’
- SET_MFA_SECRET=”
- SET_LANGUAGE=’ja-JP’
- SET_TTS_LOCALE=’ja-JP’
- SET_AMAZON=’amazon.co.jp’
- SET_ALEXA=’alexa.amazon.co.jp’
MFA_SECRETについては、2段階認証を設定していないのであれば空欄でOKです。
2段階認証を設定している場合は、設定画面で「新しい認証アプリを追加」から「バーコードをスキャンできませんか?」をクリックして表示される52文字のキーを入力します。
あとはこのキーとAmazonアカウントからワンタイムパスワードを生成するためのツール、oathtoolをラズパイにインストールすれば完了です。
$ sudo apt install oathtool
使用可能なAmazonデバイスを確認する
$ ./alexa_remote_control.sh -a
正しく設定できていれば、上記のコマンドで使用可能なAmazonデバイスの一覧が表示されます。
複数のAmazonデバイスを所有していて特定のデバイスのみに喋らせたい場合は、ここで表示される名称を用いて指定することが可能です。
デバイスの名称は日本語でも問題ありませんが、音量のコントロールをしたいならAlexaアプリなどからスペースを含まない文字列に変更しておきましょう。
コマンドラインでAlexaを自由に喋らせる
$ ./alexa_remote_control.sh -d "ALL" -e "speak:テスト"
基本的な使い方はこんな感じ。これで指定したデバイスがspeak:以降に記述した文章を読み上げてくれます。
他にもいろいろなオプションが用意されていますが、喋らせるだけなら特に必要はないでしょう。気になる方はGitHubを以下略。
なお音量レベルを変更するオプション-e “vol:”も用意されていますが、どうやらvolとspeakは併用できないようです。また一時的に音量レベルが変更されるのではなく、デバイスの音量設定自体が変更されてしまいます。
音量レベルを変更する場合、専用の環境変数が用意されているのでこちらを利用したほうが細かい設定が可能です。
デバイス毎に音量レベルをコントロールする
alexa-remote-control.shにある以下の3つの環境変数を設定することで、デバイス毎に音量レベルを設定することが可能になっています。以下は一例です。
- SET_DEVICEVOLNAME=”Alexa1 Alexa2″
- SET_DEVICEVOLSPEAK=”50 30″
- SET_DEVICEVOLNORMAL=”40 20″
DEVICEVOLNAMEは設定したいデバイスの名称を入力します。複数設定したい場合はスペースで区切り、設定したいデバイスだけ入力すればOKです。
DEVICEVOLSPEAKはAlexaが喋る時の音量レベル、DEVICEVOLNORMALはその他の音量レベルで、同じようにスペースで区切って入力します。
これだけだと音量レベルは固定されてしまいますが、ラッパースクリプトを実行して環境変数を書き換えれば、音量レベルも自在にコントロールすることが可能です。
音量レベルを変更するラッパースクリプトを作成する
$ sudo nano /opt/alexa-volume.sh
#!/bin/sh export DEVICEVOLNAME="Alexa1" #Alexa1の音量レベルを設定 H=$(date +%H) if [ $H -ge 22 -o $H -le 7 ] ; then #夜間の場合 export DEVICEVOLSPEAK="10" export DEVICEVOLNORMAL="20" else #日中の場合 export DEVICEVOLSPEAK="50" export DEVICEVOLNORMAL="40" fi sh /opt/alexa_remote_control.sh "$@" -d "ALL" -e "speak: "
上記のようにラッパースクリプトでexportコマンドを使用して3つの環境変数を出力してやれば、alexa_remote_control.shのそれぞれ対応する環境変数を上書きして実行することが可能です。
特に時間帯によって音量レベルを変更したいというニーズはわりとあると思うので、その場合は上記のようなラッパースクリプトを作成してif文によって条件分岐させれば、日中は大きく、夜間は静かに喋ってくれますよ。
ちなみに、何かしら指示を与えないと環境変数を書き換えるだけでは音量レベルの変更を実施してくれません。何も喋らせたくなければspeakを空欄にして実行すればOKです。
ただその都度音量レベルを変更する処理を入れるのも無駄が多い気がするので、時間帯によって変更したいのであれば独立したスクリプトを作成してSystemdのTimerと組み合わせるのが良い気がします。
Systemdで音量レベルをコントロールする
$ sudo nano /etc/systemd/system/alexa-volume.service
[Unit] Description = Alexa Volume Control [Service] ExecStart = /opt/alexa-volume.sh Type = oneshot [Install] WantedBy = multi-user.target
サービスユニットファイルはType = oneshotとするくらいで、後は定型文通りに作成すれば良いでしょう。
$ sudo nano /etc/systemd/system/alexa-volume.timer
[Unit] Description = Alexa Volume Control Timer [Timer] OnCalendar = *-*-* 7,22:00 Persistent = true Unit = alexa-volume.service [Install] WantedBy = multi-user.target
Timerはこんな感じ。筆者の場合は毎日7時と22時に実行するように設定してみました。またPersistent = trueとしておくことで、その時間にラズパイが起動していなかった場合には起動後すぐに実行されます。
あとはスクリプトファイルに実行権限を与え、各ユニットファイルを有効化すれば完成です。
$ sudo chmod 0755 /opt/alexa_remote_control.sh $ sudo chmod 0755 /opt/alexa-volume.sh $ sudo systemctl enable alexa-volume.service $ sudo systemctl start alexa-volume.service $ sudo systemctl enable alexa-volume.timer
まとめ
今回はラズパイにalexa-remote-controlを導入して、Alexaをコマンドラインで操作して自由に喋らせる方法について紹介しました。
GUIではないのでとっつきにくいと感じる方もいるかもしれませんが、むしろ簡単に導入できて応用もしやすいのでおすすめです。
これを応用して何を作ったのかはまた後日、別の記事にて…。。
コメント
こんにちは。アレクサを喋らせたいと思い参考にさせていただきました。記事のとおりに実行してみましたが、どうしてもエラー(認証してもらえない?)になってしまいます。2段階認証、ラズパイ、Ubuntu、違うアカウントなどいろいろ試しましたが駄目でした。
ツールでワンタイムパスワードの認証でアプリの登録まではできますが、./alexa_remote_control.sh -a でエラーになります。
今はもうこちらの方法は使えなくなってしまったのでしょうか?