[日本語Alexa] SSMLのAudioタグで応答に効果音を挿入する
0 リプレイスについて
Alexaは、昨年(2017年)11月に日本語対応となりました。ここDevelopers.IOでは、英語でしか利用できない頃から色々Blogに書いてきたのですが、更新された情報も含めて日本語で利用するAlexaについて纏め直してみたいと思います。
この記事は、下記の記事のリプレイス版です。
[Alexa] SSMLのAudioタグで応答に効果音を挿入する
1 はじめに
Alexaの応答で、休止を入れたり、数字文字列を電話番号として発声したい場合、Speech Synthesis Markup Language SSML(音声合成マークアップ言語 以下、SSML) が利用されますが、このSSMLのタグの一つにAudioタグがあります。
参考:音声合成マークアップ言語(SSML)のリファレンス -audioタグ-
Audioタグを利用すると、応答の中にAudioファイルを挿入することが可能です。
以下は、Audioタグを利用している、簡単な例です。
<speak> こんにちは、サンプルスキルです。効果音をお楽しみ下さい。 <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 -vn -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タグを含んだ、返事を返すスキルを実行してみました。
const handlers = { 'LaunchRequest': function () { this.emit(':tell', 'おはようございます。<audio src=\"https://xxxxxxxx/ssml-audio-sample.mp3\" />'); } }
6 最後に
今回は、SSMLに挿入可能なAudioタグについて確認してみました。 MP3の要件さえ合わせれば、簡単に利用することができます。効果音などとして使ってみると面白いかもしれません。
サンプルの音源は、下記のものを利用させて頂きました。
効果音ラボ
7 参考リンク
Speech Synthesis Markup Language (SSML) Reference
[日本語Alexa] SSMLの組み立てが超便利なssml-builderについて