1: 2018-05-06 (日) 04:58:51 yuji ソース 現: 2020-12-26 (土) 15:07:50 yuji ソース
  at 2018-05-11 (金) 23:45:41
Line 1: Line 1:
* AVS Device SDKを動かしてみる [#he5cb35e] * AVS Device SDKを動かしてみる [#he5cb35e]
-AVS Device SDKをRaspberry Piにインストールする手順は, +Amazon Alexaを動かすにはいくつかのやり方があるようだ。 
-https://github.com/alexa/avs-device-sdk/wiki/Raspberry-Pi-Quick-Start-Guide +- [[alexa-avs-sample-app>https://github.com/alexa/alexa-avs-sample-app]]~ 
-に書かれている。+Javaで作成されているフロントエンドアプリ。GUI環境が必要。~ 
 +(いつの間にか,公開されなくなってしまった。) 
 +- [[avs-device-sdk>https://github.com/alexa/avs-device-sdk]]~ 
 +C++で作成されているアプリ。製品なんかに組み込む用途向けらしい。CUI環境のみで動作する。~ 
 +(月1回のペースで更新されているようだ。) 
 + 
 +このページでは, [[AVS Device SDK>https://developer.amazon.com/ja/alexa-voice-service/sdk]] を手持ちのAIY Voice Kitを載せているRaspberry Pi 3Bで,試してみることにした。 
 + 
 +AVS Device SDKをRaspberry Piにインストールする手順は,https://github.com/alexa/avs-device-sdk/wiki/Raspberry-Pi-Quick-Start-Guide に書かれている。 
 + 
 +AVSは,Alexa Voice Serviceのこと。
** 準備 [#s31f3360] ** 準備 [#s31f3360]
-ホームにsdk-folderを作成して,作業をするようにした。+ホームにsdk-folderを作成する。
 $ cd /home/yuji/  $ cd /home/yuji/
 $ mkdir sdk-folder  $ mkdir sdk-folder
Line 13: Line 23:
 $ cd application-necessities  $ cd application-necessities
 $ mkdir sound-files  $ mkdir sound-files
 +
 +** サウンドdriverとalsa,pulseaudioの設定 [#na7cfacd]
 +[[AIY Voice Kit(V1になった古いやつ)>/PC/RaspberryPi/スマートスピーカー/AIY Voice KIT]] をRaspberry Pi 3Bに乗っけた物があるので,それにAVSを動かすようにしてみた。
 +
 +''/boot/config.txt''でのサウンドdriverをロードする部分を,''AIY Voice Kitのみ''使うようにしてみる。~
 + # Enable audio (loads snd_bcm2835)
 + #dtparam=audio=on
 + #dtoverlay=i2s-mmap
 + dtoverlay=googlevoicehat-soundcard
 +このように修正して,Raspberry Piのオンボードのサウンド機能をoffにして,AIY Voice KitのVoice HATのみを使えるようにする。
 +
 +alsaの設定ファイルを,AIY Voice Kitのマイクとスピーカーを使用するようにする。~
 +[[/etc/asound.conf>http://www.alsa-project.org/main/index.php/Asoundrc]]を以下の内容にする。~
 + options snd_rpi_googlemihat_soundcard index=0
 + 
 + pcm.softvol {
 +     type softvol
 +     slave.pcm dmix
 +     control {
 +         name Master card 0
 +     }
 + }
 + 
 + pcm.micboost {
 +     type route
 +     slave.pcm dsnoop
 +     ttable {
 +         0.0 30.0
 +         1.1 30.0
 +     }
 + }
 + 
 + pcm.!default {
 +     type asym
 +     playback.pcm "plug:softvol"
 +     capture.pcm "plug:micboost"
 + }
 + 
 + ctl.!default {
 +     type hw
 +     card 0
 + }
 +
 +そして,''~/.asoundrc''にコピーしておく。
 + $ cp /etc/asound.conf ~/.asoundrc
 +
 +AVS Device SDKは,PulseAudioを使用してはいないようだ。また,Raspbianを更新したらPulseAudioが起動しなくなっていた。
 +
 +しかし,AVSを動かす時に音関連はPulseAudio経由で行うことにする。~
 +なので,PulseAudioの設定ファイル''/etc/pulse/default.pa''を設定しておく。
 + load-module module-alsa-sink device=dmix
 + load-module module-alsa-source device=dsnoop
 + #load-module module-alsa-source device=hw:0,0
 +  :
 +  :
 + # comment out by Yuji Ueno
 + ### Automatically load driver modules depending on the hardware available
 + #.ifexists module-udev-detect.so
 + #load-module module-udev-detect
 + #.else
 + # Use the static hardware detection module (for systems that lack udev support)
 + # comment out by Yuji Ueno
 + #load-module module-detect
 + #.endif
 +このようにして,PulseAudioからALSAライブラリ(dmix/dsnoopプラグイン使用)経由でサウンドを使用するようにする。~
 +また,udevによる自動でサウンドドライバーをロードしないようにしておく。(起動時にロードするので)
 +
 +Raspberry Piをリブート後,pacmdを使って,音量とマイク入力レベルの調整をしておく。pacmdを使うのは,amixerだとマイク入力を100%以上に設定できないため。
 +// $ amixer sset Master 50%
 +// $ amixer sset Capture 100%
 + $ pacmd set-sink-volume alsa_output.dmix 0x6667
 + $ pacmd set-source-volume alsa_input.dsnoop 0x15000
 +
 +マイク入力レベルを上げるのは,最近のStretchだとなぜかマイク感度が凄く低くなってしまったため。(おそらく,AIY Voice KitのVoice HATのドライバーの設定だとは思うが,対応方法がわからなかった。)
** 依存関連をインストール [#i18b0f40] ** 依存関連をインストール [#i18b0f40]
-AVS Device SDKは,いくつかのライブラリを必要とするので,それをインストールする。+AVS Device SDKは,いくつかのライブラリやツールを必要とするので,それをインストールする。
 $ sudo apt-get install git gcc cmake build-essential libsqlite3-dev libcurl4-openssl-dev libfaad-dev libsoup2.4-dev libgcrypt20-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-good libasound2-dev doxygen  $ sudo apt-get install git gcc cmake build-essential libsqlite3-dev libcurl4-openssl-dev libfaad-dev libsoup2.4-dev libgcrypt20-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-good libasound2-dev doxygen
- +  
-PortAudioが,マイクを使用するのに必要なのでビルドしておく。 +マイクを使用するのに[[PortAudio>http://portaudio.com/]]を使用するので,ダウンロードしてビルドしておく。 
- $ cd /home/yuji/sdk-folder/third-party+ $ cd ~/sdk-folder/third-party
 $ wget -c http://www.portaudio.com/archives/pa_stable_v190600_20161030.tgz  $ wget -c http://www.portaudio.com/archives/pa_stable_v190600_20161030.tgz
 $ tar zxf pa_stable_v190600_20161030.tgz  $ tar zxf pa_stable_v190600_20161030.tgz
 $ cd portaudio  $ cd portaudio
- $ /configure --without-jack+ $ ./configure --without-jack
 $ make  $ make
-commentjsonは,AlexaClientSDKConfig.jsonをパースするのに必要。+[[commentjson>https://github.com/vaidik/commentjson]]は,AlexaClientSDKConfig.jsonをパースするのに必要。
commentjsonを以下のようにしてインストールする。 commentjsonを以下のようにしてインストールする。
 $ pip install commentjson  $ pip install commentjson
-** AVS Device SDKとSensory wake word engineを取得する [#c877f7ca] +** AVS Device SDKとWakeWordエンジン(音声トリガー)をダウンロードする [#c877f7ca] 
-サイトには,以下のようにしろと書いてある。+Alexaは,話しかけた言葉に反応するようなシステム。その話しかけた言葉を認識するシステムがWakeWordエンジンって言うみたい。~ 
 +上記のサイトには,以下のようにAVS Device SDKとWakeWordエンジンには''Sensory''をインストールしろと書いてある。
+ AVS Device SDKをsdk-sourceにクローンする~ + AVS Device SDKをsdk-sourceにクローンする~
- $ cd /home/yuji/sdk-folder/sdk-source+ $ cd ~/sdk-folder/sdk-source
 $ git clone git://github.com/alexa/avs-device-sdk.git  $ git clone git://github.com/alexa/avs-device-sdk.git
-+ Sensory wake word engineをthird-partyにクローンする~ ++ Sensory's WakeWord Engineをthird-partyにクローンする~ 
- $ cd /home/yuji/sdk-folder/third-party+ $ cd ~/sdk-folder/third-party
 $ git clone git://github.com/Sensory/alexa-rpi.git  $ git clone git://github.com/Sensory/alexa-rpi.git
-+ Sensory's wake word engineを動かすためのライセンスを取得する++ Sensory's WakeWord Engineを動かすためのライセンスを取得する
- $ cd /home/yuji/sdk-folder/third-party/alexa-rpi/bin/+ $ cd ~/sdk-folder/third-party/alexa-rpi/bin/
 $ ./license.sh  $ ./license.sh
-上のWake wordを認識するプログラムをSensoryの代わりにSnowboyにするため,Snowboyをダウンロードし依存パッケージを追加。 +しかし今回は,WakeWordを認識するプログラムをSensoryではなく [[Snowboy>https://snowboy.kitt.ai/]] を利用する。~ 
-- Snowboyを取得する。+変える理由は,デフォルトのSensoryだと,WakeWord認識時のマイク感度を調整出来ないのと,使用できるライセンスが時限(3ヶ月)があるため。また,Snowboyだと,「アレクサ」って呼びかける言葉も''任意の言葉に変えられる''みたい。 
- $ cd /home/yuji/sdk-folder/third-party+ 
 +AVS Device SDKとSnowboyをダウンロードし,その依存パッケージを追加する。 
 ++ AVS Device SDKをsdk-sourceにクローンする
 + $ cd ~/sdk-folder/sdk-source 
 + $ git clone git://github.com/alexa/avs-device-sdk.git 
 +上と同じ~ 
 ++ Snowboyを取得する。~ 
 + $ cd ~/sdk-folder/third-party
 $ git clone https://github.com/Kitt-AI/snowboy.git  $ git clone https://github.com/Kitt-AI/snowboy.git
-- Snowboyが必要とするライブラリをインストールする。+Snowboyはコンパイル済みのバイナリ供給のようだ。 
 ++ Snowboyが必要とするライブラリをインストールする。
 $ sudo apt-get install libatlas-base-dev  $ sudo apt-get install libatlas-base-dev
-** Snowboyのビルドエラー対策を行う [#e1c23a19] +Snowboyのリソースファイル(「アレクサ」に反応する)をセットしておく。 
-Snowboy向けcmakeを実行してSampleアプリをビルドしようとすると,ビルドエラーが発生してしまう。ビルドエラーは2個あった。+ $ cd ~/sdk-folder/third-party/snowboy/resources 
 + $ cp alexa/alexa-avs-sample-app/alexa.umdl . 
 + 
 +** AVS Device SDKのビルド [#a5c40dd0] 
 + 
 +*** Makefileを作成 [#re188a80] 
 +ビルドするには,まずcmakeでMakefileを作成しろと書いてある。 
 + $ cd ~/sdk-folder/sdk-build 
 + $ cmake ~/sdk-folder/sdk-source/avs-device-sdk -DSENSORY_KEY_WORD_DETECTOR=ON -DSENSORY_KEY_WORD_DETECTOR_LIB_PATH=~/sdk-folder/third-party/alexa-rpi/lib/libsnsr.a -DSENSORY_KEY_WORD_DETECTOR_INCLUDE_DIR=~/sdk-folder/third-party/alexa-rpi/include -DGSTREAMER_MEDIA_PLAYER=ON -DPORTAUDIO=ON -DPORTAUDIO_LIB_PATH=~/sdk-folder/third-party/portaudio/lib/.libs/libportaudio.a -DPORTAUDIO_INCLUDE_DIR=~/sdk-folder/third-party/portaudio/include 
 + 
 +Snowboyにするため,以下のように変更してcmakeでMakefileを作成した。 
 + $ cd ~/sdk-folder/sdk-build 
 + $ cmake ~/sdk-folder/sdk-source/avs-device-sdk -DKITTAI_KEY_WORD_DETECTOR=ON -DKITTAI_KEY_WORD_DETECTOR_LIB_PATH=~/sdk-folder/third-party/snowboy/lib/rpi/libsnowboy-detect.a -DKITTAI_KEY_WORD_DETECTOR_INCLUDE_DIR=~/sdk-folder/third-party/snowboy/include -DGSTREAMER_MEDIA_PLAYER=ON -DPORTAUDIO=ON -DPORTAUDIO_LIB_PATH=~/sdk-folder/third-party/portaudio/lib/.libs/libportaudio.a -DPORTAUDIO_INCLUDE_DIR=~/sdk-folder/third-party/portaudio/include 
 + 
 +*** AVS Device SDKをビルド [#d94583f0] 
 +後は,SDK Sampleアプリをビルドする。 
 + $ cd ~/sdk-folder/sdk-build 
 + $ make 
 + 
 +*** Snowboy関連でビルドエラー [#e1c23a19] 
 +SDK Sampleアプリをビルドしようとすると,%%Snowboy関連でビルドエラーになった。%%~ 
 +最近更新されているソース(v1.11.0)だと,どのバージョンからかわからないけど修正されていたので,以下は必要なくなった。
以下のように修正した。 以下のように修正した。
-''/home/yuji/sdk-folder/sdk-source/avs-device-sdk/KWD/KittAi/src/KittAiKeyWordDetector.cpp''+''~/sdk-folder/sdk-source/avs-device-sdk/KWD/KittAi/src/KittAiKeyWordDetector.cpp''
 std::chrono::milliseconds msToPushPerIteration) :  std::chrono::milliseconds msToPushPerIteration) :
         AbstractKeywordDetector(keyWordObservers, keyWordDetectorStateObservers),          AbstractKeywordDetector(keyWordObservers, keyWordDetectorStateObservers),
         m_stream{stream},          m_stream{stream},
             m_maxSamplesPerPush{(audioFormat.sampleRateHz / HERTZ_PER_KILOHERTZ) * static_cast<unsigned int>(msToPushPerIteration.count())}{              m_maxSamplesPerPush{(audioFormat.sampleRateHz / HERTZ_PER_KILOHERTZ) * static_cast<unsigned int>(msToPushPerIteration.count())}{
-に,キャスト''static_cast''を追加。+と,''static_cast''を追加。
-''/home/yuji/sdk-folder/sdk-source/avs-device-sdk/build/cmake/BuildOptions.cmake''+それと,''~/sdk-folder/sdk-source/avs-device-sdk/build/cmake/BuildOptions.cmake''
 add_definitions (-D_GLIBCXX_USE_CXX11_ABI=0)  add_definitions (-D_GLIBCXX_USE_CXX11_ABI=0)
を, を,
Line 67: Line 181:
の下あたりに追加。 の下あたりに追加。
-** AVS Device SDKのビルド [#a5c40dd0]+再度,makeでビルドする。
-*** Makefileを作成 [#re188a80+** 設定ファイルを編集 [#k0733acf
-ビルドするには, +[[Amazon開発者コンソール(USAのAmazon)&gt;https://developer.amazon.com/ja/]]でAVS Device SDK用にデバイス登録(製品登録)する。
-&nbsp;$ cd /home/yuji/sdk-folder/sdk-build +
- $ cmake /home/yuji/sdk-folder/sdk-source/avs-device-sdk -DSENSORY_KEY_WORD_DETECTOR=ON -DSENSORY_KEY_WORD_DETECTOR_LIB_PATH=/home/yuji/sdk-folder/third-party/alexa-rpi/lib/libsnsr.a -DSENSORY_KEY_WORD_DETECTOR_INCLUDE_DIR=/home/yuji/sdk-folder/third-party/alexa-rpi/include -DGSTREAMER_MEDIA_PLAYER=ON -DPORTAUDIO=ON -DPORTAUDIO_LIB_PATH=/home/yuji/sdk-folder/third-party/portaudio/lib/.libs/libportaudio.a -DPORTAUDIO_INCLUDE_DIR=/home/yuji/sdk-folder/third-party/portaudio/include +
-とある。+
-Snowboyにするため,以下のように変更してcmakeでMakefileを作成する。 +情報の登録:~ 
- $ cd /home/yuji/sdk-folder/sdk-build +- 製品名~ 
- $ cmake /home/yuji/sdk-folder/sdk-source/avs-device-sdk -DKITTAI_KEY_WORD_DETECTOR=ON -DKITTAI_KEY_WORD_DETECTOR_LIB_PATH=/home/yuji/sdk-folder/third-party/snowboy/lib/rpi/libsnowboy-detect.a -DKITTAI_KEY_WORD_DETECTOR_INCLUDE_DIR=/home/yuji/sdk-folder/third-party/snowboy/include -DGSTREAMER_MEDIA_PLAYER=ON -DPORTAUDIO=ON -DPORTAUDIO_LIB_PATH=/home/yuji/sdk-folder/third-party/portaudio/lib/.libs/libportaudio.a -DPORTAUDIO_INCLUDE_DIR=/home/yuji/sdk-folder/third-party/portaudio/include+好きな名前で良い。AIYVoiceKit 
 +- 製品ID~ 
 +好きなIDで良い。AIYVoiceKit 
 +- 製品タイプ~ 
 +Alexa内臓の端末。 
 +- ご使用の端末は、コンパニオンアプリを使用しますか~ 
 +はい 
 +- 商品カテゴリ~ 
 +ワイヤレススピーカー 
 +- 製品概要~ 
 +なんでもよい。Raspberry Pi Sample Project 
 +- 画像をアップロード~ 
 +未登録。 
 +- エンドユーザーは、商品とどのようにやり取りするのでしょうか ~ 
 +ハンズフリーなのかも。ファーフィールドにしてみた。 
 +- この製品を商品として配信する予定ですか ?~ 
 +いいえ。 
 +- お客様の端末は以下のために使用されますか Alexa for Business?~ 
 +いいえ。 
 +- お客様の端末は以下のために使用されますか: Alexaモバイルアクセサリー プロトコルですか?~ 
 +いいえ。
-*** AVS Device SDKをビルド [#d94583f0+セキュリティプロファイル:~ 
-後は,SDKのサンプルアプリをビルドする。 +情報と同じに登録した。~ 
- $ make+ウェブのところのクライアントIDをメモしておく。 
 + 
 +こんなように登録してみた。 
 + 
 +登録した情報を,''~/sdk-folder/sdk-build/Integration/AlexaClientSDKConfig.json''ファイルにをセットする。~ 
 + { 
 +     "deviceInfo":{ 
 +         "clientId":"amzn1.application-oa2-client.xxxxxxxxxxxxxxxxxxxxxxxxxxx", 
 +         "deviceSerialNumber":"yyyyyy", 
 +         "productId":"AIYVoiceKit" 
 +     }, 
 +     "alertsCapabilityAgent":{ 
 +         "databaseFilePath":"/home/yuji/sdk-folder/application-necessities/alerts.db" 
 +     }, 
 +     "certifiedSender":{ 
 +         "databaseFilePath":"/home/yuji/sdk-folder/application-necessities/certifiedSender.db" 
 +     }, 
 +     "settings":{ 
 +         "databaseFilePath":"/home/yuji/sdk-folder/application-necessities/settings.db", 
 +         "defaultAVSClientSettings":{ 
 +             "locale":"ja-JP" 
 +         } 
 +     }, 
 +     "notifications":{ 
 +         "databaseFilePath":"/home/yuji/sdk-folder/application-necessities/notifications.db" 
 +     }, 
 +     "cblAuthDelegate":{ 
 +         "databaseFilePath":"/home/yuji/sdk-folder/application-necessities/cblAuthDelegate.db" 
 +     }, 
 +     "dcfDelegate":{ 
 +     }, 
 +     "miscDatabase":{ 
 +         "databaseFilePath":"/home/yuji/sdk-folder/application-necessities/miscDatabase.db" 
 +     }, 
 +     "sampleApp":{ 
 +         "endpoint": "https://avs-alexa-fe.amazon.com", 
 +         "displayCardsSupported":true 
 +     }, 
 +     "gstreamerMediaPlayer":{ 
 +         "audioSink":"alsasink" 
 +     } 
 + } 
 +deviceInfoのclientId,deviceSerialNumber,productIdを設定する。~ 
 +それぞれ,[[Amazon開発者コンソール>https://developer.amazon.com/ja/]]で作成したデバイスの内容を設定するんだけど,deviceSerialNumberは,なんでも良いみたいなんで,123456789にした。 
 + 
 +Locale設定を,''ja-JP''にしておく。 
 + 
 +[[エンドポイント>https://developer.amazon.com/ja/docs/alexa-voice-service/api-overview.html#endpoints]]  を,日本の https://avs-alexa-fe.amazon.com にする。 
 + 
 +それと,dbファイル名を任意の場所に指定する。 
 + 
 +バージョンが更新されて,以下のエントリが必要になった。 
 +     "deviceSettings":{ 
 +         "databaseFilePath":"/home/yuji/sdk-folder/application-necessities/deviceSettings.db" 
 +    },
** SDKの起動とオプション [#ua75d18f] ** SDKの起動とオプション [#ua75d18f]
-公式手順では起動時オプションがこう書いてある。 +公式手順では,起動時コマンドとして,以下のように書いてある。 
- $ cd /home/yuji/sdk-folder/sdk-build/SampleApp/src && TZ=UTC ./SampleApp /home/yuji/sdk-folder/sdk-build/Integration/AlexaClientSDKConfig.json /home/yuji/sdk-folder/third-party/alexa-rpi/models+ $ cd ~/sdk-folder/sdk-build/SampleApp/src && TZ=UTC ./SampleApp ~/sdk-folder/sdk-build/Integration/AlexaClientSDKConfig.json ~/sdk-folder/third-party/alexa-rpi/models
-最後の引数がどうもWake word認識プログラム用らしく,これをSensoryからSnowboyに変更する。~+最後の引数が,WakeWord認識プログラム用みたいなんで,これをSensoryからSnowboyに変更する。~
そのため,以下のように変更して実行する。 そのため,以下のように変更して実行する。
- $ cd /home/yuji/sdk-folder/sdk-build/SampleApp/src && TZ=UTC ./SampleApp /home/yuji/sdk-folder/sdk-build/Integration/AlexaClientSDKConfig.json /home/yuji/sdk-folder/third-party/snowboy/resources/ + $ cd ~/sdk-folder/sdk-build/SampleApp/src && TZ=UTC ./SampleApp ~/sdk-folder/sdk-build/Integration/AlexaClientSDKConfig.json ~/sdk-folder/third-party/snowboy/resources/ 
-snowboyのresouucesというフォルダを参照する形にすればいいようだ。+snowboyのresouucesというフォルダを参照するようにすればいいようだ。 
 + 
 +*** アプリの認証 [#ze317ec1] 
 +起動すると, 
 + ################################## 
 + #      NOT YET AUTHORIZED      # 
 + ################################## 
 +  ###################################################################################### 
 + #      To authorize, browse to: 'https://amazon.com/us/code' and enter the code: {XXXX}        ###################################################################################### 
 +こんなメッセージが出るので,WEBブラウザで https://amazon.com/us/code にアクセスして自分のアカウントでログインした後,SDK SampleAppを実行した時に表示される認証コードを入力する。~ 
 + 
 +承認されれば,SampleAppがauthorizedになって,少し経つとidle状態になる。 
 + ######################################## 
 + #      Alexa is currently idle!      # 
 + ######################################## 
 + 
 +これで,「アレクサ」って言ったら,応答してくれたら成功なんだけど・・・ 
 + 
 +** 音声がスピーカーから出力されない [#v21f6090] 
 +しかし,「アレクサ」っていうと反応はしているようだが,音がなぜか出ない。
-これで起動して,「アレクサ」って言ったら,応答してくれたら成功。~ +''~/sdk-folder/sdk-source/avs-device-sdk/MediaPlayer/src/MediaPlayer.cpp''の以下の行が,(新しいバージョンだと,''~/sdk-folder/sdk-source/avs-device-sdk/MediaPlayer/GStreamerMediaPlayer/src/MediaPlayer.cpp''にソースファイルが変更されている)
-しかし,「アレクサ」っていうと反応はしているようだが,音が出ない。~ +
-MediaPlayer/src/MediaPlayer.cppの588行目を,+
         MEDIAPLAYER_AUDIO_SINK_KEY, &audioSinkElement, "autoaudiosink");          MEDIAPLAYER_AUDIO_SINK_KEY, &audioSinkElement, "autoaudiosink");
のようになっているのを, のようになっているのを,
         MEDIAPLAYER_AUDIO_SINK_KEY, &audioSinkElement, "alsasink");          MEDIAPLAYER_AUDIO_SINK_KEY, &audioSinkElement, "alsasink");
-に変更した。+に変更して再ビルドしたら,音が出た。 
 + 
 +Locale設定を日本語にしているんで大丈夫と思うが,もし英語で応答してきた場合は,c<ret>,1<ret>,6<ret>として,Localeをja_JPの日本語に設定できる。以後は日本語で応答してくれる。 
 + 
 +** マイク感度と音声ボリュームの変更 [#h336c7c9] 
 +デフォルト状態だとマイク感度が低すぎて,「アレクサ」になかなか反応しない。それに対して,しゃべる音声がめちゃくちゃ大きい。~
-** 感度とボリュームの変更 [#h336c7c9] 
-デフォルト状態だとマイクの感度が低すぎてなかなか反応しない。~ 
マイク感度と音声のボリュームは,ソースに値が決め打ちされている。~ マイク感度と音声のボリュームは,ソースに値が決め打ちされている。~
-''/home/yuji/sdk-folder/sdk-source/avs-device-sdk/KWD/KWDProvider/src/KeywordDetectorProvider.cpp''の26行目に,+''~/sdk-folder/sdk-source/avs-device-sdk/KWD/KWDProvider/src/KeywordDetectorProvider.cpp''を,
 /// The sensitivity of the Kitt.ai engine.  /// The sensitivity of the Kitt.ai engine.
- static const double KITT_AI_SENSITIVITY = 0.60+ static const double KITT_AI_SENSITIVITY = 0.6
 + 
 /// The audio amplifier level of the Kitt.ai engine.  /// The audio amplifier level of the Kitt.ai engine.
 static const float KITT_AI_AUDIO_GAIN = 2.0;  static const float KITT_AI_AUDIO_GAIN = 2.0;
と,ハードコーティングされている。~ と,ハードコーティングされている。~
-KITT_AI_SENSITIVITYでWake upでのマイク感度,KITT_AI_AUDIO_GAINで音声の大きさを設定できるみたい。+KITT_AI_SENSITIVITYでWakeWord検知でのマイク感度,KITT_AI_AUDIO_GAINで音声の大きさを設定できるみたい。
- KITT_AI_SENSITIVITY = 0.7 + /// The sensitivity of the Kitt.ai engine. 
- KITT_AI_AUDIO_GAIN = 0.5 + static const double KITT_AI_SENSITIVITY = 0.70; 
-にした。+  
 + /// The audio amplifier level of the Kitt.ai engine. 
 + static const float KITT_AI_AUDIO_GAIN = 0.5
 +にして,再ビルド。Snowboyの開発者のページには,0から1の間の値を使えと書いてある。 
 + 
 +マイク感度を上げすぎると,スピーカーでの音声出力を拾ったり周りの音に反応したりする。Speaking状態の時はマイクはオフじゃないのかな・・・~ 
 + 
 +残念ながら,AVS Device Kitに含まれるWakeWordエンジンのSensoryやSnowboyには,スピーカーからの音声をマイクで拾った音からキャンセルする仕組み(アコースティックエコーキャンセレーション AEC)や,ビームフォーミングって呼ばれている,ある方向からのユーザー音声を拡大しつつ,他の方向からの干渉を抑える信号処理技術なんかが,入っていないようだ。 
 + 
 +Amazonで販売されているAVS Development Kitや製品のAmazon Echoなんかは,これらの機能が入っているんで問題ないんだろうな。 
 + 
 +もう少し何とかならないかな?
** ちょっと追加 [#taa71456] ** ちょっと追加 [#taa71456]
-現状だと,AlexaがVoice Wakeupされているかどうかを画面以外からはわからない。+現状だと,「アレクサ」って言ったときに,Listeningモードになったかどうかが画面以外からはわからない。これは,Raspberry PiにAIY Voice Kitなんでダンボール箱だけで,画面なんかが無いから。
-そこで,Wake upしたら音で反応するようにしてみた。+そこで,Listeningモードになったら,ポーンというような音で知らせるようにしてみた。さらに,ボタンのランプも点灯させたみた。
-''/home/yuji/sdk-folder/sdk-source/avs-device-sk/SampleApp/src/UIManager.cpp''の372行目あたりに,+''~/sdk-folder/sdk-source/avs-device-sdk/SampleApp/src/UIManager.cpp''に,
         switch (m_dialogState) {          switch (m_dialogState) {
             case DialogUXState::IDLE:              case DialogUXState::IDLE:
 +                 system("gpio -g mode 25 out");
 +                 system("gpio -g write 25 0");
                 ConsolePrinter::prettyPrint("Alexa is currently idle!");                  ConsolePrinter::prettyPrint("Alexa is currently idle!");
                 return;                  return;
             case DialogUXState::LISTENING:              case DialogUXState::LISTENING:
 +                 system("gpio -g mode 25 out");
 +                 system("gpio -g write 25 1");
                 system("aplay /home/yuji/sdk-folder/third-party/snowboy/resources/dong.wav 1>/dev/null 2>/dev/null ");                  system("aplay /home/yuji/sdk-folder/third-party/snowboy/resources/dong.wav 1>/dev/null 2>/dev/null ");
                 ConsolePrinter::prettyPrint("Listening...");                  ConsolePrinter::prettyPrint("Listening...");
-と追加した。system関数でaplayで音を出力しているだけ。 +と追加した。wavファイルは,Snowboyのresourceフォルダにあったファイルにしている。 
-wavファイルは,Snowboyのresourceフォルダにあったファイルにしている。+ 
 +** Amazon Alexaの設定 [#a4f942f3] 
 +WEBブラウザで [[https://alexa.amazon.co.jp/]] にアクセスしてAlexaの設定を行う。(もしくはAndroid端末のAlexaアプリで) 
 + 
 +- デバイスの所在地 
 +- デバイスのタイムゾーン 
 +- 温度の単位 
 +- 距離の単位 
 + 
 +なんかを設定しておく。天気とか尋ねると,設定した場所について教えてくれるようになる。 
 + 
 +** 起動時に自動実行する [#hfb2f6e7] 
 +起動スクリプトを作成する。~ 
 +''~/startavs.sh'' 
 + #!/bin/bash 
 +  
 + pulseaudio -k 
 + pulseaudio -D 
 + pacmd set-sink-volume alsa_output.dmix 0x6667 
 + pacmd set-source-volume alsa_input.dsnoop 0x15000 
 + cd ~/sdk-folder/sdk-build/SampleApp/src && TZ=UTC ./SampleApp ~/sdk-folder/sdk-build/Integration/AlexaClientSDKConfig.json ~/sdk-folder/third-party/snowboy/resources/ 
 +PulseAudioがRaspbianを更新したら起動しなくなったんで,起動するようにして,マイク感度を,pacmdで上げている。 
 + 
 +実行パーミッションを立てる。 
 + $ chmod 755 startavs.sh 
 + 
 +cronを使って,Raspberry Piが起動時にAVS Device SDKのSampleAppを動かすようにする。 
 + $ crontab -e 
 + @reboot          /home/yuji/startavs.sh 
 + 
 +これで,Raspberry Piを再起動したら自動的にSampleAppが動くはずなんだけど,なんとRaspberry Piがしばらく反応しなくなってしまい(1分程度),その後,勝手にシステム(OOM killer)に殺されてしまっていた &worried; 結果,SampleAppは動作しない状態に・・・ 
 + 
 +あまり上手い方法ではないけど以下のように,''~/sdk-folder/sdk-source/avs-device-sdk/SampleApp/src/UserInputManager.cpp''を修正してみた。~ 
 +     while (true) { 
 +  
 +       // add by Yuji Ueno 
 +       std::this_thread::sleep_for(std::chrono::hours(1)); 
 +       continue; 
 +       // 
 +  
 +       char x; 
 +入力をスキップするコードを追加した。 
 + 
 +SampleAppは起動するとユーザーからの入力をstdinから行うようになっているがデーモンのようにバックグラウンドでstdin無しで動かすと入力に失敗して,これが原因でメモリーを食いつぶしてしまっているようだ。 
 + 
 +しょうがないんだが,ユーザー入力を受け付けないように変更した。まあインターラクティブに操作することはしないからこれでいいかな。(これを行う前に日本語ja_JPに設定しておくのを忘れないようにする。)~ 
 + 
 +再度ビルドしたら,無事cronで起動時に自動的に実行できるようになった。 
 + 
 +* Amazon Musicが使えない [#m8fb7e50] 
 +AVS Device SDKのSampleAppだと,なんとAmazon Musicを聞くことは出来ない。あくまでサンプルとしての提供とのこと。それにしても,これは辛いなぁ ;( 
 + 
 +Fire TV Stickともつながらないし・・・ 
 + 
 +って,以前はつながらなかったんだけど,Fire TV Stick(使っているのはリモコンに音声検索できない古いタイプ)がいつの間にかAlexaが使用できるようになっていたんで,ひょっとしたらと思いAVS Device SDKを更新したら,Fire TV Stickが反応した ;) 
 + 
 +あとは,Amazon Musicが使えればなぁ・・・


トップ   差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 1911, today: 1, yesterday: 0