前段
思うところあってRaspberry piを買ってみた。
買って早速OSを入れて、Airplay受信したり、Radiko録音したりやっていたが、一番やってみたかったAmazonEcho(AVS)を試してみたので記録に残す。
ただし題名にもある通り、2016.12.27現在、やりたかったことはできていない。
そもそもAVSとはなんであろう。英語ではあるが公式ページに書かれている。
Alexa Voice Service
Alexa Voice Service... |
alexa/alexa-avs-sample-app: This project demonstrates how to access and test the Alexa Voice Service using a Java client (running on a Raspberry Pi), and a Node.js server.
alexa/alexa-avs-sample-app: This project demonstrates how to access and test the Alexa Voice Service using a Java client (running on a Raspberry Pi), and a Node.js server.... |
インストール方法は英語ではあるがithubに丁寧に書かれており、Linuxを扱える人であれば問題なくインストールできると思う。
上にも書いた通り、うまくいってないのでそのあたりを中心に書き残しておく。
Raspberry Pi · alexa/alexa-avs-sample-app Wiki
Type ctrl-X and then Y, and then press Enter to save the changes to the file. ... |
Amazon Developer アカウントの登録
https://developer.amazon.com/login.html
証明書の取得
Project, ClientID, ClientSecretの取得
AVSをraspberry piにgit clone
$ cd ~/Desktop
$ git clone https://github.com/alexa/alexa-avs-sample-app.git
インストール
$ cd ~/Desktop/alexa-avs-sample-app
$ vim automated_install.sh
304 #--------------------------------------------------------------------------------------------
305 # Checking if script has been updated by the user with ProductID, ClientID, and ClientSecret
306 #--------------------------------------------------------------------------------------------
307
308 if [ "$ ProductID" = "YOUR_PRODUCT_ID_HERE" ]; then
309 ProductID="mypialexa"
310 fi
311 if [ "$ ClientID" = "YOUR_CLIENT_ID_HERE" ]; then
312 ClientID="amzn1.application-xxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
313 fi
314 if [ "$ ClientSecret" = "YOUR_CLIENT_SECRET_HERE" ]; then
315 ClientSecret="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 316 fi
$ ./automated_install.sh
※基本的にはプロンプトに対しては「y」で良い。
(VNCのインストール)
GUIが必要なため、モニタをRaspberry pi に接続していない場合はVNCをインストールしておく。
(ここからGUI)
Webサービス開始
$ cd ~/Desktop/alexa-avs-sample-app/samples
$ cd companionService && npm start
別のターミナルを起動して
$ cd ~/Desktop/alexa-avs-sample-app/samples
$ cd javaclient && mvn exec:exec
Login Register/Autehnitication youre Device で YESを押下するとブラウザが立ち上がるのでproceed to localhost(unsafe)を押下する。
Amazon.comサイトへリダイレクトされるのでログインして認証し、OKを押下するとAlexa Voice Serv..にTokenが自動的に入力される。
(ここからはAlexaという声で反応させたい場合)
Alexa
別のターミナルを起動して
$ cd ~/Desktop/alexa-avs-sample-app/samples
$ cd wakeWordAgent/src && ./wakeWordAgent -e sensory
ここで僕の環境で問題が発生!
$ cd wakeWordAgent/src && ./wakeWordAgent -e sensory
INFO:main: Starting Wake Word Agent
INFO:WakeWordAgent: State set to IDLE(2)
INFO:Initializing Sensory library | library name: TrulyHandsfree | library version: 5.0.0-avs.1 | model file: ../ext/resources/spot-alexa-rpi.snsr
WARNING:Library expires on: License expires on 27 Mar 2017 00:00:00 GMT
wakeWordAgent: pcm.c:694: snd_pcm_close: Assertion `pcm' failed.
Aborted
困ったよー。
ググりまくった結果、githubのコミュニティで良い情報を得た。
Sensory Wake Word engine · Issue #284 · alexa/alexa-avs-sample-app
Sensory Wake Word engine · Issue #284 · alexa/alexa-avs-sample-app... |
ndphu commented on 12 Oct
I got the same problem.
There is a file under wakeWordAgent/sensory/alexa-rpi/config called asound.conf.
I replaced my ~/.asoundrc by this file and it can fix the problem. (make sure you have >a backup for your current ~/.asoundrc)
どうやらwakeWordAgent/sensory/alexa-rpi/configを見ろと言う事だ。
$ cat asound.conf
pcm.!default
{
type asym
playback.pcm {
type hw
card 1
device 0
}
capture.pcm {
type plug
slave {
pcm {
type hw
card 0
device 0
}
}
}
}
ぼくの環境をチェックしてみる。
$ cat /proc/asound/modules
0 snd_usb_audio
1 snd_bcm2835
$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: Device [USB PnP Audio Device], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 1: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
Subdevices: 8/8
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
Subdevice #2: subdevice #2
Subdevice #3: subdevice #3
Subdevice #4: subdevice #4
Subdevice #5: subdevice #5
Subdevice #6: subdevice #6
Subdevice #7: subdevice #7
card 1: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
Subdevices: 1/1
Subdevice #0: subdevice #0
どうやら問題なさそうだ。
今度は~配下の .asoundrcを確認してみる。
$ cat .asoundrc
pcm.!default {
type asym
playback.pcm {
type plug
slave.pcm "hw:0,0"
}
capture.pcm {
type plug
slave.pcm "hw:1,0"
}
}
pcm.!default {
type hw
card 1
}
ctl.!default {
type hw
card 1
}
うん?なんかおかしい。おかしいぞ!と言う事で変更してみた。
$ vi .asoundrc
$ cat .asoundrc
pcm.!default {
type asym
playback.pcm {
type plug
slave.pcm "hw:1,0"
}
capture.pcm {
type plug
slave.pcm "hw:0,0"
}
}
再実行
$ ./wakeWordAgent -e sensory
INFO:main: Starting Wake Word Agent
INFO:WakeWordAgent: State set to IDLE(2)
INFO:Initializing Sensory library | library name: TrulyHandsfree | library version: 5.0.0-avs.1 | model file: ../ext/resources/spot-alexa-rpi.snsr
WARNING:Library expires on: License expires on 27 Mar 2017 00:00:00 GMT
INFO:SensoryWakeWordEngine: mainLoop thread started
INFO:WakeWordIPCSocket::mainLoop thread started
INFO:WakeWordIPCSocket: init socket on port:5123
INFO:WakeWordAgent: thread started
INFO:===> Connected to AVS client <===
キターーーーー!
別のターミナルを起動して
$ cd ~/Desktop/alexa-avs-sample-app/samples
$ cd wakeWordAgent/src && ./wakeWordAgent -e kitt_ai
INFO:main: Starting Wake Word Agent
INFO:WakeWordAgent: State set to IDLE(2)
ERROR:Failed to open PortAudio stream.Device unavailable
ERROR:KittAiSnowboyWakeWordEngine: Initialization error:Failed to open PortAudio stream.
ERROR:WakeWordAgent: exception in constructor: Failed to open PortAudio stream.
ERROR:main: Exception happened: Failed to open PortAudio stream.
こなーいorz
一応このあたりは見てみた。
wake word engine problem · Issue #277 · alexa/alexa-avs-sample-app
wake word engine problem · Issue #277 · alexa/alexa-avs-sample-app... |
ググっても有力な情報が得られず、途方に暮れているところでQiitaを書いてみた。。