[Alexa] SSMLのAudioタグで応答に効果音を挿入する
この記事は、2018/02/18 日本語対応も含め、最新版にリメイクされました。是非、こちらをご参照下さい。
1 はじめに
Amazon Alexa(以下、Alexa)の応答で、休止を入れたり、数字文字列を電話番号として発声したい場合、Speech Synthesis Markup Language SSML(音声合成マークアップ言語 以下、SSML) が利用されますが、このSSMLのタグの一つにAudioタグがあります。
Audioタグを利用すると、応答の中にAudioファイルを挿入することが可能です。
以下は、Audioタグを利用している、簡単な例です。
<speak> Welcome to Sample Skill. <audio src=\"https://exsample.com/sample.mp3\" /> </speak>
2 Audioタグ
Audioタグでは、MP3ファイルのURLを指定します。
使用するMP3ファイルは、次の要件(制限)があります。
- HTTPS(有効な証明書が必要)
- 顧客固有情報や機密情報は含まない
- MPEGバージョン2
- 90秒以下
- ビットレートは、48kbps
- サンプルレートは、16000Hz
また、1つの応答には、複数のAudioタグを含める事が可能ですが、以下の制限があります。
- 指定は5つまで
- 合計時間は90秒以内
制限に従わない指定があった場合、タグ開始の所で応答がエラーとなり、結果的に、応答が途切れてしまうことになります。
3 Audioの確認
ffmpegを利用すると、MP3ファイルが要件に対応しているかどうかを確認することができます。
FFmpeg
下記のコマンドは、sample.mp3の情報を見ているようすです。
$ ffmpeg -i sample.mp3 ffmpeg version 3.3.2 Copyright (c) 2000-2017 the FFmpeg developers built with Apple LLVM version 8.1.0 (clang-802.0.42) configuration: --prefix=/usr/local/Cellar/ffmpeg/3.3.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --disable-lzma --enable-vda libavutil 55. 58.100 / 55. 58.100 libavcodec 57. 89.100 / 57. 89.100 libavformat 57. 71.100 / 57. 71.100 libavdevice 57. 6.100 / 57. 6.100 libavfilter 6. 82.100 / 6. 82.100 libavresample 3. 5. 0 / 3. 5. 0 libswscale 4. 6.100 / 4. 6.100 libswresample 2. 7.100 / 2. 7.100 libpostproc 54. 5.100 / 54. 5.100 Input #0, mp3, from 'sample.mp3': Metadata: title : BachFgbJ[^Æt[K BWV565 artist : WalchaFPXSVN^¹ album : BachFgbJ[^Æt[K BWV565 track : 1 encoder : SuperTagEditor Ver 2.00À7ü genre : íyÈi»Ì¼j date : 1947 Duration: 00:09:15.39, start: 0.025057, bitrate: 128 kb/s Stream #0:0: Audio: mp3, 44100 Hz, mono, s16p, 128 kb/s Metadata: encoder : LAME3.93
出力から、ビットレート、128 kb/s、サンプリング周波数、44100Hz そして、再生時間が、約9分15秒39であることが分かります。
4 Audio変換
ffmpegでは、Audioタグの要件に合わせてファイルを変換することが可能です。
次のコマンドは、<input-file>に指定されたAudioファイル(mp3で無くても可能です)を、変換しています。
$ ffmpeg -i <input-file> -ac 2 -codec:a libmp3lame -b:a 48k -ar 16000 <output-file.mp3>
- -b:a 48k ビットレート 48kbit/s
- -ar 16000 サンプリングレート 16000Hz
また、Audioの再生時間を切り詰めたい場合は、次のように使用します。
下記は、開始時間(0秒)から終了時間(30秒)のファイルを生成する例です。
$ ffmpeg -i <input-file> -t 30 <output-file.mp3>
なお、再生時間を調整する場合、完全に正確な長さとなならないため、制限のギリギリである90(秒)を指定すると、問題が発生する場合があります。
下記は、-t 90と指定して、90秒のファイルを作成しているつもりですが、出力されたファル(output.mp3)は、Durationが1:30.04(90秒04)となっており、結果的にAudioタグの制限に抵触して応答は失敗します。
-t 89で変換すると、問題なく再生できていました。
$ ffmpeg -i sample.mp3 -t 90 output.mp3 $ ffmpeg -i output.mp3 ・・・略・・・ Duration: 00:01:30.04, start: 0.025057, bitrate: 64 kb/s Stream #0:0: Audio: mp3, 44100 Hz, mono, s16p, 64 kb/s
5 試してみた
下記のように、Audioタグを含んだ、SSMLを返すスキルを作成してみて、Amazon開発者コンソールのTestで再生してみました。
"response": { "outputSpeech": { "type": "SSML", "ssml": "<speak> Good morning. It's time to wake up. <audio src=\"https://s3.amazonaws.com/XXXXXX/sample.mp3\" /> </speak>" },
6 最後に
今回は、SSMLに挿入可能なAudioタグについて確認してみました。 MP3の要件さえ合わせれば、簡単に利用することができます。効果音などとして使ってみると面白いかもしれません。
サンプルの音源は、下記のものを利用させて頂きました。
効果音ラボ
7 参考リンク
Speech Synthesis Markup Language (SSML) Reference
[Alexa] SSMLの組み立てが超便利なssml-builderについて