Alexa:ステートフルなサービスと聞き取りやすい音声応答

2018年9月20日(木)
畠中 幸司(はたなか・こうじ)
連載6回目は、ステートフルなサービスの構築と、Alexaの音声応答を聞き取りやすくする手法を紹介します。

音声応答を聞き取りやすくする

実際に抽選スキルを動かしてみると、Alexaの応答のテンポが良過ぎて、イベント会場などで使うには適さないように感じるかもしれません。そこで、このスキルをより使いやすく(応答を聞き取りやすく)するために、応答文の中に待ち時間を入れてみましょう。

コード例の一部を次のように書き換えます。

リスト16:getWinnersSpeech() 関数の一部を以下のように修正

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で書かれた音声合成の例を示します。

リスト18: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()関数にもうひとつ修正を加えてみましょう。

リスト19:SSMLの使用例

const winnersSpeechSingle = '<prosody volume="x-loud">当選者は、<break time="1s"/>' + winnersString + '<break time="1s"/>です。</prosody>';

当選者の読み上げ部分だけ、少し声を大きくすることができました。他にも、ささやき声にしたり、予め録音した音声を流すこともできます。音声合成マークアップ言語(SSML)のタグについては以下のページを参照してください。

音声合成マークアップ言語(SSML)のリファレンス

以上、抽選スキルを使ってステートフルなサービスの実現と、音声応答の制御方法を学びました。ここまでに解説した内容だけでも様々なことをAlexaで実現できるようになります。ぜひ活用してみてください。

著者
畠中 幸司(はたなか・こうじ)

音楽と自然と猫を愛するソフトウェア&インフラエンジニア。日本ヒューレット・パッカード株式会社でクラウドネイティブなアプリケーションのためのインフラ提案、および構築業務に従事。2000年にウェブスタートアップでエンジニアとしてのキャリアをスタートして以来、メガソフト株式会社の3Dマイホームデザイナーシリーズの開発や、マイクロソフト日本法人にて Windows Phone、Microsoft Officeシリーズの開発など、数多くの国内およびグローバルな開発プロジェクトに携わる。建設業向けモバイルアプリSTUCCO(スタッコ)のスタートアップ起業経験、500 KOBE Pre-Acceleratorへの参加等を経て2017年より現職。

連載バックナンバー

開発ツール技術解説
第6回

Alexa:ステートフルなサービスと聞き取りやすい音声応答

2018/9/20
連載6回目は、ステートフルなサービスの構築と、Alexaの音声応答を聞き取りやすくする手法を紹介します。
開発ツール技術解説
第5回

Alexaのためのローカル開発環境を整備する

2018/9/4
連載5回目は、より高度なプログラム作成に先駆けて、Alexaのためのローカル開発環境を整備していきます
開発ツール技術解説
第4回

Alexa Skills Kit SDK for Node.jsについて知る

2018/8/21
連載4回目は、スキル・サービス側のコードに着目して、フレームワークの理解を深めていきます。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています