修司(293)18この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。AudioPlayerでハローワールドでは、AudioPlayerを利用するスキルの基本を解説しました。AudioPlayerスキルのセッションとイベントでは、AudioPlayerスキルでハンドリングしなければならないイベントと、実装時の注意事項を解説しました。簡単な音楽再生スキルは充分に作成できると思います。今回はAudioPlayerスキルの仕上げとして、複数の音楽ファイルを再生するスキルを作成してみました。再生キューとストリーミングAudioPlayerを有効にしたスキルを起動した場合、クライアント(Echo端末など)は再生キューを持ちます。スキルからPlayディレクティブを送信すると、ストリーミング再生がはじまります。次の曲を続けて再生したい場合、再生が終了する前に、次のオーディオを追加できます。この時、オーディオはクライアントの再生キューにキューイングされます。クライアントでは再生中のオーディオの再生が終わり次第、キューイングされたオーディオを順番に再生します。キューイングされることにより、曲と曲の間のタイムラグを最小にできます。再生キューは、PlayディレクティブやClearQueueディレクティブで制御できます。PlayディレクティブPlayディレクティブでは、playBehaviorパラメーターで、どのようにオーディオを再生するか指定します。playBehaviorパラメーターに設定できる値は以下の3種類です。REPLACE_ALLENQUEUEREPLACE_ENQUEUEDREPLACE_ALLを指定した場合、そのオーディオを即時に再生します。キューイングされたオーディオが再生されていても上書き(REPLACE)するので、単一のオーディオを再生する場合は、REPLACE_ALLが適します。ENQUEUEを指定した場合、キューの最後にオーディオを追加します。再生中のオーディオに影響を与えないため、次の曲を指定するようなケースで有効です。クライアントでは、現在の曲が終わり次第、連続的に再生されます。連続して曲を再生するスキルでは、PlaybackNearlyFinishedイベントの処理で、ENQUEUEを指定して次の曲をクライアントに指定すると良いでしょう。REPLACE_ENQUEUEDを指定した場合、キューをクリアした上で、次の曲としてオーディオを追加します。再生中のオーディオには影響ありません。ClearQueueディレクティブキューのクリアだけを行いたい場合、ClearQueueディレクティブを使用します。Playディレクティブと同様に、clearBehaviorをヒントとして与えます。CLEAR_ENQUEUEDCLEAR_ALLCLEAR_ENQUEUEDは、キューイングされたオーディオをクリアしますが、再生中のオーディオの再生は継続します。CLEAR_ALLでは、キューイングされたオーディオをクリアし、再生中のオーディオも停止します。ジュークボックス系スキルを作ってみるスキルで再生リストを管理し、各イベントをハンドリングすることで、ジュークボックス系スキルが作れます。この時、キューイングを上手く活用し、クライアントから曲がスムーズに流れるようにすると良いでしょう。再生リストの利用と再生開始はじめに初期化処理を行います。オーディオリスト(audioList)は、タイトルと曲のURLで構成されます。今回はLambdaにハードコーディングしましたが、ここはDyanamoDBなどから取得しても良いでしょう。playList関数は、曲のインデックスを配列で返します。ランダム再生に対応するため、シャッフルオプションを用意しておきました。},PlaybackStartedイベントの処理クライアントで曲が再生されるとPlaybackStartedイベントが発生します。この時、再生された曲の情報をセッション(DyanmoDB)に保存しておきましょう。},イベントのrequest.tokenから再生した曲のTokenが取れるため、そこから曲を逆引きしています。PlaybackStartedイベントは、停止後の再生などでも発生するので注意してください。PlaybackNearlyFinishedイベントの処理PlaybackNearlyFinishedは、曲の再生が終わる前に呼ばれるイベントです。ここで、次の曲をキューに追加し、クライアントでスムーズな再生をさせるとよいでしょう。この時、セッションから再生中の曲のインデックスを取り、インクリメントすることで次曲を装填しています。キューに追加する場合は、前曲のTokenをexpectedPreviousTokenに指定しなければなりません。次の曲」などAudioPlayerの標準機能を実装します。曲を指定する流れは変わりませんが、即時に再生をはじめるためREPLACE_ALLを設定します。},ShuffleOnIntent/ShuffleOffIntentの処理シャッフル再生も対応しましょう。シャッフルが有効になった場合の処理と無効になった場合の処理を実装します。今回は、シャッフルしても現在の曲は流れたままという仕様にしました。},LoopOffIntent/LoopOnIntentの処理ループ再生機能のオン/オフを処理します。ループ再生は再生リスト全体をループするかどうかという仕様にしました。ループ再生がオフの場合、PlaybackNearlyFinishedイベントで最後の曲の場合、キューに曲を追加しません。},1曲のみのループ再生は別のインテントで実装可能です。1回」といった発話に対応します。ここでは曲を最初から再生しなおす実装としました。},まとめこんな感じに実装すれば、ジュークボックス系スキルが実装できます。キューを活用してクライアントに曲を先行で送ることがポイントでしょう。デフォルトで実装すべきインテントが多くあります。どんな発話に対応してインテントが起動するかに注意してください。意図した発話でない場合、期待しない挙動をとってしまいます。必要に応じてカスタムインテントを追加しましょう。2,932,667札幌の猫大好きエンジニア。著書に「JUnit実践入門」。趣味はロードバイクやスノーボードなど。Developers.IOでは、ユニットテスト・AWS・Ansibleの話題などを書いています。〜ITエンジニアのお仕事とホンネ〜2月19日に新卒向けの会社説明会〜ITエンジニアのお仕事とホンネ〜を開催します。リモート】クラスメソッドの会社説明会を開催しますクラスメソッドでは、AWS・AI・ビッグデータ・モバイルなどの技術職や営業のメンバーとして一緒にお仕事をする仲間を大募集しています。#cmdevio新型コロナウイルスの感染拡大を受け、本イベントを延期させていただくことになりました(開催時期未定)。お申し込みいただいた皆様には大変申し訳ございませんが、何卒ご理解いただけますようよろしくお願いいたします。AWSについてライトに色んな情報交換をしましょう。カフェ店長のオカノです。使いたいときの注意点を書きました。EC2)環境において、不要な踏み台サーバをなくすことができる便利なアップデートです。環境をDockerで構築してみました。臼田佳祐295ワークフロー自動化OSSのn8nをAWS環境で建てて検証してみました。非常に期待できるサービスです。Fargateの勉強をしています。使ってみたい方は参考にしてください。洋介252SnowflakeがAWSの東京リージョン上で稼働するようになりました。データを日本に置けます。芳賀健231こんにちは!猫様の忠実なるしもべ、芳賀健です。Tokyoで開催されました。クラスメソッド株式会社が運営するAWS・iOS・HTML5に関する技術情報サイトです。