前回の Raspberry Pi 編に続いて、Mac 編です。Echo が手に入らなくても、「あれくさー!」と話しかけられる Alexa Voice Serivce を Mac にインストールしてみました。
事前準備
Amazon開発者ポータルのアカウント
Amazon開発者ポータル でアカウントが必要です。AmazonアプリストアにAndroid向けアプリを公開している場合など、すでにアカウント開設済みの場合は、既存のものが使えます。無償で開設できますので、持ってない場合は、サインアップしておきます。
MacBook はラズパイと違ってマイクもスピーカーも付いてますから、本体以外には用意しなくていいのが楽です。
Alexa Voice Service への登録
Amazon開発者ポータルに入って、Alexa Voice Service へ行き、今回インストールする Mac を予め登録しておきます。

右上 “Register Product” から “Device” をクリック

Device Type Info セクションで、Device Type ID、Display Name を入力。Device Type ID は半角英数とエンダースコアのみ使えます。

Next をクリックし、Security Profile セクションへ。セレクトボックスから”Create a new profile” を選択し、Security Profile Name と Security Profile Description を入力。

Next をクリックすると Client ID、Client Secret が生成されるのでこれをコピペしておきます。
“Web Settings” タブをクリックし、
Allowed Origin, Allowed Return URLs へそれぞれ、
https://localhost:3000
https://localhost:3000/authresponse
を指定します。

Device Type ID、Client ID、Client Secretをテキストファイルなどにコピペしておきます。
VLCのインストール
VLC Media Player をまずはインストール。
.bashrc や .zshrc へ👇2つの環境変数の追加
# Environment variables for Alexa Voice Service
export VLC_PATH=/Applications/VLC.app/Contents/MacOS/lib
export VLC_PLUGIN_PATH=/Applications/VLC.app/Contents/MacOS/plugins
source .zshrc
もしくはターミナルの再起動で新しい環境変数を読み込みます。
Node.jsのインストール
MacPortsやHomeBrewでインストールするのが楽ちん
JDKのインストール
JDKはバージョン8以上が必要。インストールされてない場合はOracleのサイト、JDKのページからダウンロードしてインストールしましょう。
ターミナルから
java -version
でインストールされているJDKのバージョン確認できます。
Mavenのインストール
MacPortsやHomeBrewでインストールするのが楽ちんですが、マニュアルで入れたい場合はこちら。
リポジトリのクローン
cd
git clone https://github.com/alexa/alexa-avs-sample-app.git
自己署名証明書(Self-Signed Certificate)を作る
homebrew, MacPorts などで OpenSSLをインストール
alexa-avs-sample-app/samples/javaclient/ssl.cnf ファイルを開き、
countryName, stateOrProvinceName, localityName, organizationName, OrganizationalUnitName
の値を適宜更新します。countryNameは2文字のISO国名コードを指定。日本ならJP。それ以外の値は適当に。

generate.sh ファイルを実行して自己署名付き証明書を生成します。
chmod x generate.sh
./generate.sh
generate.sh を実行中に入力を求められます。
productID は Device Type ID
Serial number はなんでもいいのですが、後ほど必要になるので、覚えやすいもの。123456 とか。
Passphrase は忘れないように。無指定(ブランク)も可能です。
generate.shが無事終了すると自己署名証明書が生成されます。
alexa-avs-sample-app/samples/companionService/config.js を開き、
clientId Amazon開発者ポータルのAlexa Voice Serviceで登録したClient ID
clientSecret Amazon開発者ポータルのAlexa Voice Serviceで登録したClient Secret
sslKey samples/javaclient/certs/server/node.key
sslCert samples/javaclient/certs/server/node.crt
sslCaCert samples/javaclient/certs/ca/ca.crt
products
👆で登録したDevice Type ID: シリアルナンバー
を指定します。

alexa-avs-sample-app/Samples/javaclient/config.json を開き、
productId 👆で登録したDevice Type ID
dsn シリアルナンバー
provisioningMethod companionService
companionApp
sslKeyStore alexa-avs-sample-app/samples/javaclient/certs/server/jetty.pkcs12
sslKeyStorePassphrase generate.shで入力したパスフレーズ
companionService
sslClientyKeyStore alexa-avs-sample-app/samples/javaclient/certs/client/client.pkcs12
sslClientKeyStorePassphrase generate.shで入力したパスフレーズ
sslCaCert alexa-avs-sample-app/samples/javaclient/certs/ca/ca.crt

ファイルの指定はフルパスです。
テキストフィアルをゴニョゴニョと面倒ですが、設定はココで終わり。あとは起動するだけです。
Alexa Voice Service の起動
ターミナルウィンドウを開いて
cd ./alexa-avs-sample-app/samples/companionService
npm install #最初の一度だけ
npm start
新しいターミナルを開き、
cd ./alexa-avs-sample-app/samples/javaclient
mvn validate #一度だけ
mvn install #これも一度だけ
mvn exec:exec

すべたがうまくいくと、ポップアップウィンドウが開き、ブラウザ経由で認証するよう求められ、Amazon開発者ポータルのユーザ名とパスワードで認証が完了すると、”device tokens ready” と表示され、

Javaのアプリケーションが開き、めでたくAlexa Voice Serviceの起動が完了です。マイクのアイコンを押すと音声認識が始まります。
