Raspberry piでAmazon Echo(AVS)を動かしてみる未遂

# 前段
思うところあってRaspberry piを買ってみた。
![IMG_20161222_204815.jpg](https://qiita-image-store.s3.amazonaws.com/0/120983/1f50f68c-683a-7368-cd50-6d5be1553c7a.jpeg)
買って早速OSを入れて、Airplay受信したり、Radiko録音したりやっていたが、一番やってみたかったAmazonEcho(AVS)を試してみたので記録に残す。
**ただし題名にもある通り、2016.12.27現在、やりたかったことはできていない。**

そもそもAVSとはなんであろう。英語ではあるが公式ページに書かれている。
<TABLE ALIGN=CENTER><TR><TD WIDTH=400px>
 <A HREF="https://developer.amazon.com/alexa-voice-service" TARGET="_blank"><STRONG>Alexa Voice Service</STRONG></A>
 <A HREF="http://b.hatena.ne.jp/entry/https://developer.amazon.com/alexa-voice-service" TARGET="_blank">
 <IMG BORDER="0" SRC="http://b.hatena.ne.jp/entry/image/https://developer.amazon.com/alexa-voice-service" BORDER="0" ALT="" /></a>
 <BR>
 Alexa Voice Service... 
 </TD>
 <TD WIDTH=150px>
 <IMG STYLE="float:left;margin-right:.5em;" SRC="http://capture.heartrails.com/120x120/cool?https://developer.amazon.com/alexa-voice-service" ALT="" WIDTH="120" HEIGHT="120" />
 </TD></TR>
</TABLE>
そもそもはAmazonEchoという米英独で発売されている製品の中で動ているソフトウェアだ。
その、AVSをAmazonがライブラリとして他ハードでも動くように用意してくれている。
<TABLE ALIGN=CENTER><TR><TD WIDTH=400px>
 <A HREF="https://github.com/alexa/alexa-avs-sample-app" TARGET="_blank"><STRONG>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.</STRONG></A>
 <A HREF="http://b.hatena.ne.jp/entry/https://github.com/alexa/alexa-avs-sample-app" TARGET="_blank">
 <IMG BORDER="0" SRC="http://b.hatena.ne.jp/entry/image/https://github.com/alexa/alexa-avs-sample-app" BORDER="0" ALT="" /></a>
 <BR>
 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.... 
 </TD>
 <TD WIDTH=150px>
 <IMG STYLE="float:left;margin-right:.5em;" SRC="http://capture.heartrails.com/120x120/cool?https://github.com/alexa/alexa-avs-sample-app" ALT="" WIDTH="120" HEIGHT="120" />
 </TD></TR>
</TABLE>

インストール方法は英語ではあるがithubに丁寧に書かれており、Linuxを扱える人であれば問題なくインストールできると思う。
上にも書いた通り、うまくいってないのでそのあたりを中心に書き残しておく。

<TABLE ALIGN=CENTER><TR><TD WIDTH=400px>
 <A HREF="https://github.com/alexa/alexa-avs-sample-app/wiki/Raspberry-Pi" TARGET="_blank"><STRONG>Raspberry Pi · alexa/alexa-avs-sample-app Wiki</STRONG></A>
 <A HREF="http://b.hatena.ne.jp/entry/https://github.com/alexa/alexa-avs-sample-app/wiki/Raspberry-Pi" TARGET="_blank">
 <IMG BORDER="0" SRC="http://b.hatena.ne.jp/entry/image/https://github.com/alexa/alexa-avs-sample-app/wiki/Raspberry-Pi" BORDER="0" ALT="" /></a>
 <BR>
 Type ctrl-X and then Y, and then press Enter to save the changes to the file.

... 
 </TD>
 <TD WIDTH=150px>
 <IMG STYLE="float:left;margin-right:.5em;" SRC="http://capture.heartrails.com/120x120/cool?https://github.com/alexa/alexa-avs-sample-app/wiki/Raspberry-Pi" ALT="" WIDTH="120" HEIGHT="120" />
 </TD></TR>
</TABLE>

# Amazon Developer アカウントの登録
[https://developer.amazon.com/login.html](https://developer.amazon.com/login.html)

# 証明書の取得
Project, ClientID, ClientSecretの取得

# AVSをraspberry piにgit clone

```bash
$ cd ~/Desktop
$ git clone https://github.com/alexa/alexa-avs-sample-app.git
```

# インストール

```bash
$ 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サービス開始

```bash
$ cd ~/Desktop/alexa-avs-sample-app/samples
$ cd companionService && npm start
```
![1.PNG](https://qiita-image-store.s3.amazonaws.com/0/120983/6ba2b665-4a9d-7dad-ab1d-3252c1b7ec7a.png)

別のターミナルを起動して

```bash
$ cd ~/Desktop/alexa-avs-sample-app/samples
$ cd javaclient && mvn exec:exec
```
![2.PNG](https://qiita-image-store.s3.amazonaws.com/0/120983/7a0eb547-018c-a162-f041-ad34b31aad66.png)

Login Register/Autehnitication youre Device で　YESを押下するとブラウザが立ち上がるのでproceed to localhost(unsafe)を押下する。
![3.PNG](https://qiita-image-store.s3.amazonaws.com/0/120983/3952abb0-144d-abb2-4c12-b6b547826473.png)

Amazon.comサイトへリダイレクトされるのでログインして認証し、OKを押下するとAlexa Voice Serv..にTokenが自動的に入力される。
![4.PNG](https://qiita-image-store.s3.amazonaws.com/0/120983/6925c7a1-7530-f6d3-226d-3b1a50a565ab.png)

（ここからはAlexaという声で反応させたい場合）
# Alexa
別のターミナルを起動して

```bash
$ cd ~/Desktop/alexa-avs-sample-app/samples
$ cd wakeWordAgent/src && ./wakeWordAgent -e sensory
```
　
**ここで僕の環境で問題が発生！**

```bash
$ 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
```
![5.PNG](https://qiita-image-store.s3.amazonaws.com/0/120983/b4a27315-9504-03bb-449f-ed4350443c33.png)

困ったよー。
ググりまくった結果、githubのコミュニティで良い情報を得た。
<TABLE ALIGN=CENTER><TR><TD WIDTH=400px>
 <A HREF="https://github.com/alexa/alexa-avs-sample-app/issues/284" TARGET="_blank"><STRONG>Sensory Wake Word engine · Issue #284 · alexa/alexa-avs-sample-app</STRONG></A>
 <A HREF="http://b.hatena.ne.jp/entry/https://github.com/alexa/alexa-avs-sample-app/issues/284" TARGET="_blank">
 <IMG BORDER="0" SRC="http://b.hatena.ne.jp/entry/image/https://github.com/alexa/alexa-avs-sample-app/issues/284" BORDER="0" ALT="" /></a>
 <BR>
 Sensory Wake Word engine · Issue #284 · alexa/alexa-avs-sample-app... 
 </TD>
 <TD WIDTH=150px>
 <IMG STYLE="float:left;margin-right:.5em;" SRC="http://capture.heartrails.com/120x120/cool?https://github.com/alexa/alexa-avs-sample-app/issues/284" ALT="" WIDTH="120" HEIGHT="120" />
 </TD></TR>
</TABLE>

>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を見ろと言う事だ。

```bash
$ 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
      }
    }
  }
}
```

ぼくの環境をチェックしてみる。

```bash
$ 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を確認してみる。

```bash
$ 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
}
```

うん？なんかおかしい。おかしいぞ！と言う事で変更してみた。

```bash
$ 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"
   }
}
```

再実行

```bash
$ ./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 <===
```

キターーーーー！

別のターミナルを起動して

```bash
$ 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.
```
![6.PNG](https://qiita-image-store.s3.amazonaws.com/0/120983/5047f727-7c65-2172-15b4-90cd9197e6f6.png)


こなーいorz
一応このあたりは見てみた。
<TABLE ALIGN=CENTER><TR><TD WIDTH=400px>
 <A HREF="https://github.com/alexa/alexa-avs-sample-app/issues/277" TARGET="_blank"><STRONG>wake word engine problem · Issue #277 · alexa/alexa-avs-sample-app</STRONG></A>
 <A HREF="http://b.hatena.ne.jp/entry/https://github.com/alexa/alexa-avs-sample-app/issues/277" TARGET="_blank">
 <IMG BORDER="0" SRC="http://b.hatena.ne.jp/entry/image/https://github.com/alexa/alexa-avs-sample-app/issues/277" BORDER="0" ALT="" /></a>
 <BR>
 wake word engine problem · Issue #277 · alexa/alexa-avs-sample-app... 
 </TD>
 <TD WIDTH=150px>
 <IMG STYLE="float:left;margin-right:.5em;" SRC="http://capture.heartrails.com/120x120/cool?https://github.com/alexa/alexa-avs-sample-app/issues/277" ALT="" WIDTH="120" HEIGHT="120" />
 </TD></TR>
</TABLE>

ググっても有力な情報が得られず、途方に暮れているところでQiitaを書いてみた。。