Alexa:ステートフルなサービスと聞き取りやすい音声応答
音声応答を聞き取りやすくする
実際に抽選スキルを動かしてみると、Alexaの応答のテンポが良過ぎて、イベント会場などで使うには適さないように感じるかもしれません。そこで、このスキルをより使いやすく(応答を聞き取りやすく)するために、応答文の中に待ち時間を入れてみましょう。
コード例の一部を次のように書き換えます。
const winnersString = winners.join('<break time="1s"/>,'); const winnersSpeechSingle = '当選者は、<break time="1s"/>' + winnersString + '<break time="1s"/>です。'; return winnersSpeechSingle + '<break time="1s"/>繰り返します。' + winnersS//}peechSingle; //list[list17][drawLots()関数の一部を以下のように修正]{ const speechOutput = '抽選しています。<break time="3s"/>' + '抽選が終わりました。当選者を発表します。' + winnersSpeech + repromptSpeech;
Lambda 関数を更新してもう一度実行してみます。今度は十分な間隔を空けて当選者が読み上げられるので、かなり聞き取りやすくなったことと思います。このように、応答メッセージの文字列の中に特別なタグを入れることで、メッセージの読み上げられ方を制御することができます。このタグは、音声合成マークアップ言語(Speech Synthesis Markup Language、SSML)と呼ばれる形式で記述します。SSMLで書かれた音声合成の例を示します。
<speak> 応答メッセージです。3秒待ちます<break time="3s"/> 一文字ごとに読み上げます <say-as interpret-as="spell-out">abc</say-as> </speak>
「<speak></speak>」タグに挟まれた部分が音声メッセージとなりますが、これまで使用してきたAlexa Skills Kit SDKのspeak()関数やreprompt()関数などを使う際にはこのタグが自動的に付加されますので、応答メッセージを組み立てる際にはタグ内の本文のみを記述します。
SSMLを使うと、待ち時間を入れられるだけでなく、様々な効果を応答メッセージに追加できます。先ほどのgetWinnersSpeech()関数にもうひとつ修正を加えてみましょう。
const winnersSpeechSingle = '<prosody volume="x-loud">当選者は、<break time="1s"/>' + winnersString + '<break time="1s"/>です。</prosody>';
当選者の読み上げ部分だけ、少し声を大きくすることができました。他にも、ささやき声にしたり、予め録音した音声を流すこともできます。音声合成マークアップ言語(SSML)のタグについては以下のページを参照してください。
以上、抽選スキルを使ってステートフルなサービスの実現と、音声応答の制御方法を学びました。ここまでに解説した内容だけでも様々なことをAlexaで実現できるようになります。ぜひ活用してみてください。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- 「Raspberry Pi 3 Model A+」リリース
- アールエスコンポーネンツ、「Raspberry Pi 3 Model B+」の国内販売を開始
- 「Raspberry Pi 4 Model B」リリース
- Raspberry Pi Foundation、Wi-FiとBluetoothを採用した「Raspberry Pi 3 Model B」を発表
- Raspberry Pi Zeroの下ごしらえをしよう
- Raspberry Pi Foundation、価格5ドルの超小型PC「Raspberry Pi Zero」を発表
- 「Raspberry Pi 4」が日本国内で発売開始
- 現代PCの基礎知識(2):PCのシステム全体を支えるマザーボード
- イントロダクションRaspberry Pi ―仕様説明からセットアップまで 前編
- 「Raspberry Pi Zero W」にGPIOを実装したモデル「Raspberry Pi Zero WH」リリース