SSML audioタグを使うと、開発者は、MP3ファイルのURLをコードに追加するだけで、楽曲、サウンドエフェクト、音声といった録音済みのオーディオをAlexaスキルに含めることができます。
最新の情報については音声合成マークアップ言語(SSML)のリファレンスを参照してください。
要件と制限事項
MP3ファイルは、以下の要件と制限事項を満たす必要があります。
- MP3は、インターネットからアクセス可能なHTTPSエンドポイントでホストされる必要があります。HTTPSであることが必須です。また、MP3ファイルをホストするドメインは、有効で、信頼できるSSL証明書を提示する必要があります。自己署名証明書は使用できません。
- MP3には、ユーザーに固有な情報や、その他の機密情報が含まれていてはなりません。
- MP3は、有効なMP3ファイル(MPEGバージョン2)である必要があります。
- 音声ファイルは240秒以内でなければなりません。
- ビットレートは48 kbpsでなければなりません。このビットレートは、話される内容と組み合わせて使用すると良好な結果が得られますが、音楽を再生するには一般に品質がやや不十分です。
- サンプリングレートは22050Hz、24000Hz、16000Hzのいずれかです。
オーディオファイルの形式
MP3ファイルの形式は非常に重要です。Alexaは正しい形式でないオーディオファイルを認識できないため、オーディオは再生されません。ソフトウェアを使用してMP3ファイルを必要なコーデックバージョン(MPEGバージョン2)とビットレート(48 kbps)に変換する必要があります。以下の2つのツールをお勧めします。
FFmpeg
FFmpegは、オーディオファイル形式の変換に使用できるコマンドラインツールです。以下のコマンドを使用すると、指定された<input-file>がAlexaと互換性のあるMP3ファイルに変換されます。
ffmpeg -i <input-file> -ac 2 -codec:a libmp3lame -b:a 48k -ar 16000 <output-file.mp3>
Audacity
Audacityは、オーディオファイルを編集できるGUIツールです。既存のファイルをAlexa互換のファイルに変換する手順は以下のとおりです。
- 変換するファイルを開きます。
- 左下隅の「Project Rate(プロジェクトレート)」を16000に設定します。
- 「File」 > 「Export Audio」(「ファイル」 > 「オーディオのエクスポート」)をクリックし、「Save as type(保存形式)」をMP3ファイルに変更します。
- 「Options(オプション)」をクリックし、「Quality(品質)」を48 kbps、「Bit Rate Mode(ビットレートモード)」をConstantに設定します。
これには、Lameライブラリが必要です。次のサイトにあります: http://lame.buanzo.org/#lamewindl.
オーディオファイルのホスティング
オーディオを提供するために使用するMP3ファイルは、HTTPSを使用するエンドポイント上でホストされている必要があります。このエンドポイントでは、Amazon認定の認証局が署名したSSL証明書を提供する必要があります。これは、多くのコンテンツホスティングサービスで提供されています。たとえば、Amazon Simple Storage Service(Amazon S3)(Amazon Web Servicesのサービスの1つ)などのサービスでファイルをホストできます。
オーディオファイルのリクエストには認証は必要ありません。このため、音声ファイルにはユーザーに固有の情報や機密情報を含めてはなりません。たとえば、ユーザーのリクエストに応答してカスタムMP3ファイルを作成し、その音声の中に機密情報を組み込む、ということは許可されていません。
オーディオファルの再生
audioタグは読み上げテキストの応答のspeakタグ内に含まれる必要があります。Alexaは、音声応答で指定されたポイントでオーディオを再生します。
1.<speak>
2.Music Samplerへようこそ。
3.<audiosrc=“https://somedomain.com/music.mp3”/>
4.楽曲はお気に召しましたか?
5.</speak>
上記のコードでは、Alexaが「Music Samplerへようこそ」と言ったあと、intro_music.mp3の再生と同時に「楽曲はお気に召しましたか?」と言って応答が終わります。
最大5つのaudioタグ(合計240秒)を1つの応答に含めることができます。
SSMLタグを受け入れるには、以下を含めることでbuildSpeechletResponse関数を設定する必要もあります。
1.outputSpeech:{
2.type:"SSML",
3.ssml: speechOutput
4.}