AVS Device Software Development KitのWindows版サンプルアプリのビルドと実行メモ

目的

Amazon Echoのようなデバイスを買うのが勿体無いので、SDKのサンプルアプリを使って余ってるWindows PCをAlexa搭載デバイスとして動かしてみたかった。

注意:設定ファイルの作成に必要となるconfig.jsonはAmazonの開発者ポータルサイトのAlexa Voice Serviceのページの「製品」リンク→登録済みの製品名→セキュリティプロファイル→他のデバイスやプラットフォーム→ダウンロード、をクリックするとダウンロードできるが、現在は新規にAVS商品を追加できなくなっている(AVSの一般提供は終了しているらしい)。ただし、過去に登録済みのAVS商品があれば、config.jsonがダウンロード可能なので、今回はそれを使用した。

事前準備

必要な機器

  • WIndowsPC(今回はWindows11搭載PCを使用)
  • マイク、スピーカー(今回はマイク搭載のBluetoothヘッドホンを使用)

必要なソフトのインストール

  • Visual Studio 2017(「ワークロード」タブでC++によるデスクトップ開発ユニバーサルWindowsプラットフォーム開発を追加)
  • cmake v3.26(新しすぎるとcmakeの互換性でエラーになる)
  • gstreamer v1.28.4(インストールするものはデフォルトのまま)
  • vcpkg(curl、sqlite3、opensslなどをvcpkgでインストールする。静的リンク版を指定。curlはhttp2対応を含むものが必要。)
.\vcpkg.exe install "curl[http2]:x64-windows-static" --recurse
  • Python(サンプルアプリ起動時に指定する設定ファイルの生成で使用)

環境変数の設定

PKG_CONFIG_PATH

set PKG_CONFIG_PATH=C:\gstreamer\1.0\msvc_x86_64\lib\pkgconfig;%PKG_CONFIG_PATH%

PATH

  • C:\Program Files\dotnet
  • C:\Program Files\CMake\bin
  • C:\Users\tempm\myfiles\develop\vcpkg
  • C:\gstreamer\1.0\msvc_x86_64\bin
  • C:\Users\tempm\myfiles\develop\avs\portaudio\Release

ソースコードのダウンロードとビルド用ディレクトリの作成

git clone https://github.com/alexa/avs-device-sdk.git
cd avs-device-sdk
git checkout v3.0.0
cd ..
mkdir build

ソースコードの修正

  • CMakeList.txtに以下を追加
# platform.winmdの検索パスをコンパイラフラグに安全に直接追加する
add_definitions("/AI\"C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/lib/x86/store/references\"")
add_definitions("/AI\"C:/Program Files (x86)/Windows Kits/10/UnionMetadata/10.0.19041.0\"")

# includeパス
include_directories("C:/Users/tempm/myfiles/develop/vcpkg/packages/curl_x64-windows-static/include")
include_directories("C:/Users/tempm/myfiles/develop/vcpkg/installed/x64-windows-static/include")
include_directories("C:/Users/tempm/myfiles/develop/avs/portaudio/include")

# curlは静的リンク
add_definitions("-DCURL_STATICLIB")

# リンクするライブラリの指定
link_libraries("Ws2_32.lib")
link_libraries("Wldap32.lib")
link_libraries("Crypt32.lib")
link_libraries("Normaliz.lib")
link_libraries("Iphlpapi.lib")
link_libraries("Bcrypt.lib")
link_libraries("Secur32.lib")
link_libraries("C:/Program Files/gstreamer/1.0/msvc_x86_64/lib/gstreamer-1.0.lib")
link_libraries("C:/Program Files/gstreamer/1.0/msvc_x86_64/lib/gstapp-1.0.lib")
link_libraries("C:/Program Files/gstreamer/1.0/msvc_x86_64/lib/glib-2.0.lib")
link_libraries("C:/Program Files/gstreamer/1.0/msvc_x86_64/lib/gobject-2.0.lib")
link_libraries("C:/Program Files/gstreamer/1.0/msvc_x86_64/lib/gstcontroller-1.0.lib")

link_libraries("C:/Users/tempm/myfiles/develop/vcpkg/packages/zlib_x64-windows-static/lib/zs.lib")
link_libraries("C:/Users/tempm/myfiles/develop/vcpkg/installed/x64-windows-static/lib/nghttp2.lib")
  • MediaPlayer/GStreamerMediaPlayer/src/MediaPlayer.cppの1248行目を修正
-    return make_unique<const VectorOfTags>(vectorOfTags);
+    return std::make_unique<const VectorOfTags>(vectorOfTags);

ビルド手順

  1. DLL
cd build
Remove-Item -Recurse -Force *

cmake ..\avs-device-sdk\ -G "Visual Studio 15 2017" -DGSTREAMER_MEDIA_PLAYER="ON" -DACSDK_BUILD_TESTS="OFF" -DCMAKE_SYSTEM_VERSION="10.0.19041.0" -DCMAKE_VS_WINRT_BY_DEFAULT="OFF" -DPKG_CONFIG_EXECUTABLE="C:\Users\tempm\myfiles\develop\vcpkg\installed\x64-windows\tools\pkgconf\pkgconf.exe" -DCURL_INCLUDE_DIR="C:\Users\tempm\myfiles\develop\vcpkg\packages\curl_x64-windows-static\include" -DCURL_LIBRARY="C:\Users\tempm\myfiles\develop\vcpkg\packages\curl_x64-windows-static\lib\libcurl.lib" -DPORTAUDIO="ON" -DPORTAUDIO_INCLUDE_DIR="C:\Users\tempm\myfiles\develop¥avs\portaudio\include" -DPORTAUDIO_LIB_PATH="C:\Users\tempm\myfiles\develop\avs\portaudio\Release\portaudio.lib" -DSQLITE_LIBRARY="C:\Users\tempm\myfiles\develop\vcpkg\installed\x64-windows-static\lib\sqlite3.lib" -DSQLITE_INCLUDE_DIR="C:\Users\tempm\myfiles\develop\vcpkg\installed\x64-windows-static\include" -DCRYPTO_LIBRARY="C:\Users\tempm\myfiles\develop\vcpkg\installed\x64-windows-static\lib\libcrypto.lib" -DCRYPTO_INCLUDE_DIR="C:\Users\tempm\myfiles\develop\vcpkg\installed\x64-windows-static\include\openssl" -A x64

cmake --build . --config Release 
  1. サンプルアプリ
    SampleAppの中のslnをVisual Studioで開いてビルドする

実行方法

設定ファイルの作成

  1. スクリプトで雛形作成(要Python。スクリプト実行はMSYS2上で実行)
    ./genConfig.sh ‘C:/Users/tempm/myfiles/develop/avs/config.json’ 12345 ‘C:/Users/tempm/myfiles/develop/avs/db’ ‘C:/Users/tempm/myfiles/develop/avs/avs-device-sdk’ ‘C:/Users/tempm/myfiles/develop/avs/out.json’ -DSDK_CONFIG_MANUFACTURER_NAME=”MYCOMPANY” -DSDK_CONFIG_DEVICE_DESCRIPTION=”MYDEVICE”
  2. 一部修正する
  • デフォルトロケールとタイムゾーンの変更
37c42
<         "defaultLocale":"ja-JP",
---
>         "defaultLocale":"en-US",
68c81
<         "defaultTimezone":"Asia/Tokyo"
---
>         "defaultTimezone":"America/Vancouver"
  • gstreamerの設定追加
84,94d96
<     },
<     "gstreamerMediaPlayer": {
<         "audioSink": "directsoundsink"
<     },
<     "equalizer": {
<         "databaseFilePath": "C:/Users/tempm/myfiles/develop/avs/db/equalizer.db"
<     },

  • curlの設定追加(cacert.pemはここからダウンロード)
<
<     "libcurlUtils": {
<         "http2Allowed": true,
<         "caFile": "C:/Users/tempm/myfiles/develop/avs/cacert.pem"

実行


SampleApp.exe ..\..\..\out.json INFO
  • 第二引数はログレベル
  • zコマンドで初期化、tコマンドで音声入力開始、qで終了
  • ワンタイムパスワードによる認証に用いるアカウントはAlexaアプリから登録済みのものを指定

問題点

  • SampleApp.exeで認証後、停止し、再度起動しなおすと自動的に認証されるが、通信エラーになる。初期化して再認証すれば使えるようになる。
Copied title and URL