avs-device-sdk のバージョンアップでハマる
- カテゴリ: Raspberry pi
- 投稿日時: 2019/07/28(日) 22:36:56
Raspberry pi にインストールした Alexa のバージョンアップでハマったので記録しておきます。バージョンアップしたら startsample.sh が起動できなくなってすったもんだした話です。
経緯とかどーでもいいからすぐ解決方法が知りたいって方はこちらからお読みください。
バージョンアップ
バージョンアップの方法は公式に書いてあります。
早い話が config.json を書き戻すだけで認証は引き継がれるから、config.json をバックアップしてクイックスタートガイドのとおり最初からやり直せということのようです。
スクリプト3種をダウンロードし、snowboy に対応すべく前のとおりに改変して実行すればいいはず。なんだ簡単じゃんと軽い気持ちで始めたのが運の尽きでした。
ちなみにもともとつくったときの avs-device-sdk のバージョンは 1.12.1、7月22日 現在のバージョンは 1.14.0 です。何が変わったのかは調べませんでした。
前の手順通り、sudo apt update からはじめて順調に進めます。
ビルドも完了、startsample.sh が自動生成されました。でも実行してみるとエラー発生。
エラーメッセージ
エラーメッセージはこんな感じ。
pi@raspberrypi:~/sdk-folder $ sudo bash startsample.sh
2019-07-27 16:16:22.512 [ 1] I sdkVersion: 1.14.0
configFile /home/pi/sdk-folder/build/Integration/AlexaClientSDKConfig.json
#################################################
# NOTIFICATION INDICATOR STATE: OFF #
#################################################
Expression 'alsa_snd_pcm_hw_params_set_period_size_near( pcm, hwParams, &alsaPeriodFrames, &dir )' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 923
Expression 'alsa_snd_pcm_hw_params_set_period_size_near( pcm, hwParams, &alsaPeriodFrames, &dir )' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 923
Expression 'alsa_snd_pcm_hw_params_set_period_size_near( pcm, hwParams, &alsaPeriodFrames, &dir )' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 923
Expression 'paInvalidSampleRate' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 2043
Expression 'PaAlsaStreamComponent_InitialConfigure( &self->capture, inParams, self->primeBuffers, hwParamsCapture, &realSr )' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 2714
Expression 'PaAlsaStream_Configure( stream, inputParameters, outputParameters, sampleRate, framesPerBuffer, &inputLatency, &outputLatency, &hostBufferSizeMode )' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 2838
2019-07-27 16:16:30.620 [ 1] C PortAudioMicrophoneWrapper:Failed to open PortAudio default stream:errorCode=-9997
2019-07-27 16:16:30.621 [ 1] C PortAudioMicrophoneWrapper:Failed to initialize PortAudioMicrophoneWrapper
2019-07-27 16:16:30.623 [ 1] C SampleApplication:Failed to create PortAudioMicrophoneWrapper!
2019-07-27 16:16:30.791 [ 1] C SampleApplication:Failed to initialize SampleApplication
Failed to create to SampleApplication!
(後日再検証した時のものなのでタイムスタンプがアレです)
さて弱った。
Alsa とか PortAudio とか表示されてますね。それら関係で落ちてるっぽいのでひたすら検索です。
そもそも PortAudio ってなんだ? そこからなんです。
PortAudioはオーディオの再生と録音のためのオープンソースのコンピュータライブラリです。これはクロスプラットフォームのライブラリであるため、それを使用するプログラムは、Windows、Mac OS X、Linuxなど、さまざまなコンピュータオペレーティングシステムで実行できます。 [ 引用元 Wikipedia ]
なお ALSA は Advanced Linux Sound Architecture (ALSA) - Linuxカーネルコンポーネントのことだそうです。
.asoundrc
Github の Issue で PortAudio の設定がよろしくないのではというような回答を発見。 ~/.asoundrc を確認しろというのがありました。
スクリプトを使用せずにすべて自力で avs-sdk をインストールする方法が書かれたドキュメントにも同様のことが書かれています。
Raspberry Pi Quick Start Guide
~/.asoundrc を確認するとファイルそのものがありません。コレに違いない。新規作成して内容を以下の通りとしました。
sudo nano ~/.asoundrc
pcm.!default {
type asym
playback.pcm {
type plug
slave.pcm "hw:0,0"
}
capture.pcm {
type plug
slave.pcm "hw:1,0"
}
}
期待とは裏腹にエラーは変わらず。ここじゃないみたいです。
Failed to open PortAudio default stream:errorCode=-9997
別のフォルダを作成して必要なスクリプトをコピー、ここから serupスクリプトを走らせる。もろもろ修正してもう一度実行。
セットアップは完走するものの startsample.sh を実行するとやっぱりエラー。お手上げです。
で、ログに書いてあった「errorCode=-9997」で調べました。Github の issue を片っ端からよみました。そしてやっと見つけました。
Failed to create SampleApplication! #1413
Raspbian Stretch の最新版で、PortAudio に関係する環境変数の値が一部変更になったんだそうです。それが原因で startsample.sh は動かないんだとか。いやー、そんなのわかるはずないじゃないですか。
なんの気無しに sudo apt update やりました。そのおかげで Raspbian は最新版にアップデートされました。そゆことです。
対策
startsample.sh を書き換えます。
sudo nano ./startsample.sh
cd "/home/pi/sdk-folder/build/SampleApp/src"
env PA_ALSA_PLUGHW=1 ./SampleApp "/home/pi/sdk-folder/build/Integration/AlexaClientSDKConfig.json" "/home/pi/sdk-folder/third-party/snowboy/resources"
2行目の頭に赤字の部分を付け加えます。これだけ。
これで無事起動できるようになります。
startsample.sh は pi.sh で自動生成されてますので、pi.sh の該当部分を修正しておけば、ビルドをやり直すたびに startsample.sh を修正するなんていうアホくさい事態から逃れられます。修正箇所は前のエントリを見てください。
余談
実は本筋とは関係ないところでハマりどころがたくさんありました。
1) Win32DiskImager でバックアップからリストアしようとしたらイメージの書き込みに失敗。原因は最近インストールした Daemon tool だった模様。
2) Raspbian Stretch の再インストールからやり直そうとしたら、現在正式版として公開されているのは Raspbian Buster だった。avs-sdk はまだ Raspbian Buster に正式対応していない。
3) 旧版の Raspbian はすべて Image ファイルとして公開されていた。だーかーらー、イメージの書き込みができなかったんだって。
なんにしてもくたびれましたわ。やっぱり Linux って面倒です。
Tweet
コメント
この記事へのコメントはありません