完成品
Alexaちゃんに「Alexa, カイジやって」とか「Alexa, ざわざわして」とかお願いすると、こんな感じにざわざわしてくれます。
例えば仕事中にヤバいトラブルが発生して焦っているときとか、嫁に浮気を追及されてバレそうな場面とかで、すかさずざわざわさせると、ただでさえ焦っているのに、さらにその場を焦燥感あふれる舞台にしてくれます。これは大変重宝するスキルですね!
まだ実物が入手できないのでシミュレーターでしか再生できないのがアレですが、Alexaちゃん待ち遠しいですね。
前回の記事
【Amazon Echo入門#3】Lambdaの環境変数を使って、ゴミ出しの曜日を変数にする
音声の準備
Alexaではテキストを読み上げたり、音声ファイルを再生したりする際は、SSMLというマークアップ言語を使用します。スキル発動のレスポンスに、SSMLを渡せばその通り動いてくれます。
まず音声はYoutubeからmp3ファイルでダウンロードして変換をかけます。元動画。
ダウンロードするやりかたはWEBで調べればすぐ分かるので割愛。
ダウンロードしたmp3ファイルをEchoで再生出来る形に変換します。MPEGのバージョンとかビットレートとか細かく指定されていて、ちゃんと守らないとテスト再生時に Error: Please make sure that "Alexa Skills Kit" is selected for the event source type of arn:aws:lambda:ap-northeast-1:000000000:function:Kaiji
みたいになってしまうのでちゃんと間違いなく変換しましょう。
再生できる形式はこちらのエントリを参考。
使用するMP3にはいくつかの条件があります。 ・ インターネット上でホスティングされた HTTPSエンドポイントで提供されていること。 ・ SSL証明書がオレオレ証明書ではなくAmazonの基準を満たす証明書であること。(公式サイトではAWS S3の使用を提案しています) ・ カスタマーの個人情報やその他デリケートな情報を含んでいないこと ・ 有効なMP3ファイルであること(MPEG version 2) ・ 90秒以内であること ・ ビットレートが48KB/sであること ・ サンプルレートが16,000Hzであること
ffmpegをインストールします。
$ brew install ffmpeg
コマンドラインで音声ファイルを変換。変換のコマンドは以下エントリを参考にした。
https://dev.classmethod.jp/cloud/alexa-ssml-audio/
$ ffmpeg -i zawazawa.mp3 -ac 2 -codec:a libmp3lame -b:a 48k -ar 16000 zawazawa_conv.mp3
変換が成功したらitunesからビットレートとかが確認できます。
音声ファイルをS3にアップする
Alexaちゃんが読み込める場所に音声ファイルを置く必要があるので、手軽にアップできるAWS S3に置くことにします。
- Bucket name: for-alexa
- Region: Asia Pacific(Tokyo)
- その他は全てデフォルトで
さきほど変換した音声ファイルをアップロード。設定値は全てデフォルトでOK。
アップロードが完了したら、publicアクセスを許可する。
Overviewに表示されているURLを開いてざわざわが再生されることを確認できたら準備OK.
Lambda側
いつものようにAWS Lambdaのダッシュボード画面を開き、Create functionする。Blueprintsは使わずにAuthor from scratch。
- Name: kaiji
- Role: Choose an existing role
- Existing role: lambda_basic_execution
lambda_functin.py
にSSMLを返す関数を定義する。Testを実行してみて、問題なく実行できることを確認しておく。
lambda_functin.py
def lambda_handler(event, context): response = { 'version': '1.0', 'response': { "outputSpeech": { "type": "SSML", "ssml": "<speak> <audio src=\"https://s3-ap-northeast-1.amazonaws.com/for-alexa/zawazawa_conv.mp3\" /> </speak>" }, } } return response
TriggersにAlexa Skills Kitを設定する(これいつも忘れる)。
Alexa側
いつも通りスキルの設定をしていきます。
- スキルの種類: Custom
- 言語: Japanese
- スキル名: Kaiji
- 呼び出し名: カイジ
{ "intents": [ { "intent": "GetNewFactIntent" } ] }
サンプル発話。
GetNewFactIntent カイジやって GetNewFactIntent ざわざわして GetNewFactIntent ざわざわやって GetNewFactIntent カイジ
設定でエンドポイトにLambdaのARN IDを設定。
テスト実行すると、レスポンスにSSMLが返ってきてることが確認出来ます。
聴くを押してみたらざわざわがはじまることを確認。 できたああああああああ!!