以下の情報は2020/5/12時点のものです。
AVS SDK をためそうとRaspberry Pi 4B/Raspbean buster lite上でSDKを使ったプロトタイプを実行するチュートリアルの
Authenticate your device
https://developer.amazon.com/ja-JP/docs/alexa/alexa-voice-service/get-a-refresh-token.html
のなかで
sudo bash startsample.sh を動かそうとしたら
(env) pi@heavensdoor:~/projects/avs $ sudo bash startsample.sh
2020-05-12 02:30:16.675 [ 1] I sdkVersion: 1.19.1
configFile /home/pi/projects/avs/build/Integration/AlexaClientSDKConfig.json
Running app with log level: DEBUG9
2020-05-12 02:30:16.921 [ 1] 0 ConfigurationNode:initializeSuccess
2020-05-12 02:30:16.933 [ 1] 1 InMemoryEqualizerConfiguration:validateConfiguration::Validating Equalizer configuration
2020-05-12 02:30:16.933 [ 1] 1 InMemoryEqualizerConfiguration:validateConfiguration::Validating default Equalizer state
2020-05-12 02:30:16.934 [ 1] 1 InMemoryEqualizerConfiguration:validateConfiguration::Validating Equalizer configuration
2020-05-12 02:30:16.934 [ 1] 1 InMemoryEqualizerConfiguration:validateConfiguration::Validating default Equalizer state
2020-05-12 02:30:16.964 [ 1] 9 MediaPlayer:createCalled:name=SpeakMediaPlayer
2020-05-12 02:30:17.437 [ 1] E MediaPlayer:setupPipelineFailed:name=SpeakMediaPlayer,reason=createAudioSinkElementFailed,audioSinkElement=alsasink
2020-05-12 02:30:17.437 [ 1] E MediaPlayer:initPlayerFailed:name=SpeakMediaPlayer,reason=setupPipelineFailed
2020-05-12 02:30:17.437 [ 1] 9 MediaPlayer:~MediaPlayer:name=SpeakMediaPlayer
:
(略)
:
(SampleApp:630): GStreamer-CRITICAL **: 03:30:17.437: gst_object_unref: assertion 'object != NULL' failed
2020-05-12 02:30:17.437 [ 1] 9 MediaPlayer:resetPipeline:name=SpeakMediaPlayer
2020-05-12 02:30:17.437 [ 1] E RequiresShutdown:~RequiresShutdownFailed:reason=notShutdown,name=SpeakMediaPlayer
2020-05-12 02:30:17.438 [ 1] C SampleApplication:Failed to create media player for speech!
2020-05-12 02:30:17.438 [ 1] C SampleApplication:Failed to initialize SampleApplication
Failed to create SampleApplication!
というエラーメッセージが出て止まってしまった。
調べてみると
GStreamerプラグインが足りていないということで、以下のコマンドを実行して関連パッケージをインストールしてから sudo bash startsample.sh を動かしたら..うまくいった。
sudo apt install -y libgstreamer1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-pulseaudio
ちなみに使ったマイク・スピーカは SENNHEISER USB ヘッドセット PC 8 。
マイクのミュートボタンをOFFにしてから
startsample.sh を実行すると、コンソール上に以下のようなメッセージがでてくるので
:
2020-05-12 04:18:38.481 [ 2] 5 CBLAuthDelegate:setAuthError:authError=SUCCESS
2020-05-12 04:18:38.481 [ 2] 5 CBLAuthDelegate:handleRequestingToken
2020-05-12 04:18:38.481 [ 2] 5 CBLAuthDelegate:requestToken
##################################
# NOT YET AUTHORIZED #
##################################
################################################################################################
# To authorize, browse to: 'https://amazon.com/us/code' and enter the code: XXXX9Z #
################################################################################################
#################################################
# Checking for authorization (1)... #
#################################################
2020-05-12 04:18:38.555 [ 1] 9 ThreadPool:obtainWorker:created=15,obtained=15,releasedToPool=0,releasedFromPool=0,outstanding=15
:
PC などからブラウザで
https://amazon.com/us/code へアクセスし developer.amazon.com にログインしたときと同じアカウントでログインした後認証コード(上記メッセージ例だと
XXXX9Z )をサイトに入力すると、発話待機状態になるので、ヘッドセットマイクから「Alexa, what time is it?」と
英語で発話すると、ヘッドセットスピーカに時刻が音声で(もちろん英語で)かえってくる。
なおコマンドライン上の操作は以下の通り。終了する場合は
「q」を入力してEnterキーを押せば良い。
Wake word:
"alexa"と発話し、クエリを開始する
Tap to talk:
「t」を押してEnterを押してからクエリを実行します( "alexa"は必要ありません)。
Hold to talk:
「h」を押してからEnterキーを押すと、ボタンの押しをシミュレートします。
次に、クエリを言います("alexa"は必要ありません)。
「h」を押してからEnterキーを押すと、ボタンの解放をシミュレートできます。
Stop an interaction:
「s」とEnterキーを押して、進行中の対話を停止します。
Privacy mode (microphone off):
マイクのオンとオフを切り替えるには、「m」とEnterキーを押します。
Firmware Version:
「f」キーを押してからEnterキーを押すと、いつでも別のファームウェアバージョンを報告できます。
Info:
「i」を押してからEnterキーを押すと、いつでもヘルプ画面が表示されます。
Reset device:
デバイスをリセットするには、「k」キーを押してからEnterキーを押します。 これにより、デバイスに保存されているデータがすべて消去され、デバイスを再登録する必要があります。
このオプションは、アプリケーションも終了します。
Reauthorize device:
「z」キーを押してからEnterキーを押すと、いつでもデバイスを再認証できます。 これにより、デバイスに保存されているデータがすべて消去され、再認証が開始されます。
Quit:
「q」を押してからEnterキーを押すと、いつでもアプリケーションを終了できます。
デバイス開発とあるからもっとロボティクス的な低レベルのAlexaフレームワーク開発ができるのかと期待していたが..Alexaの認証系を独自にできるとかしかバリエーションがなさそうだ..もっとSDKのコードをハックすればもっとふかいところまでできるかもしれないけど..たとえばDonkeycarにマイクとスピーカをつけてコントローラ不要にするとか..
..先は長そうだ...
p.s.
AVS プロトタイプを使う場合はマイクとスピーカをRaspberry Piに接続する必要がある。しかしRaspbery Piでオーディオ出力を使用する場合は注意が必要だ。
Raspberry Piの音声出力の選択肢としてはイヤホンジャック、HDMI出力の音声、USBデバイスがある。
イヤホンジャックやHDMI音声を使う場合sudo raspi-configでの有効化設定が必要だ。
さらにRaspberry Pi本体のイヤホンジャックは音声だけでなくマイク入力にもなっているので、有効化したら音声入出力はすべてこのジャック1本でまかわなくてなならない。スピーカだけイヤホンジャック、マイクをUSBデバイスで行いたい場合の対応方法は自分は未だ見つけられれいない。
USBデバイスを使う場合、自分はマイクとスピーカで2個のUSBコネクタを消費したくないので、結局テレワーク用に購入したUSB接続するヘッドセットをつないで使用した。テストレベルではこれでよいが、独立したスマートスピーカとして成立させる場合はヘッドセットではだめになる。USBコネクタを消費せずマイク・スピーカピンジャック化するデバイスを使えばよいのだけど、Amazonで売られているこの手のデバイスはジャック自体が箱状態になっているものが多く、消費コネクタは1つでも干渉して下や横のコネクタが使えなくなってしまう。
なので、プロトタイプであろうと、物理的なデバイス選択をしっかりシミュレートしておかないと、買っては失敗し、を繰り返すことになる。
..私のように...