はじめに
先日、自作したAlexa Skillが公開されました。
日本郵便番号
このスキルを作ったときにこんな発話がありました。
岡山県岡山市南区の郵便番号は709-1234です。他の郵便番号を調べますか?
AlexaのSSMLを使った発話 その1 https://t.co/L4bRr9Dh3K @YouTubeさんから
— tochi (@aguuu) 2018年1月14日
ここでは住所と郵便番号を発話していますが、郵便番号の前に一息いれて郵便番号が聞き取りやすくしたいと思います。
句読点や疑問符で良い感じに発話してくれる
実はAlexaでは句読点を入れると一息いれてくれます。
つまり、先程の発話は下記のように、郵便番号の前に読点を使えば一息入れてくれます。
岡山県岡山市南区の郵便番号は、709-1234です。他の郵便番号を調べますか?
AlexaのSSMLを使った発話 その2 https://t.co/aQpFloqVnV @YouTubeさんから
— tochi (@aguuu) 2018年1月14日
SSML(Speech Synthesis Markup Language)を使った自然な発話
では、次の場合の発話ではどうでしょう?
正解は、1番です!
AlexaのSSMLを使った発話 その3 https://t.co/llxjDONliD @YouTubeさんから
— tochi (@aguuu) 2018年1月14日
これでも大きな問題はありませんが、できるなら「1番です!」の前にもっと「タメ」が欲しいですよね。そんな時に使えるのがSSML(Speech Synthesis Markup Language)です。
音声合成マークアップ言語(SSML)のリファレンス | Custom Skills
SSMLとは簡単に言うと発話するテキストに強弱や読み方などを支持するためのマークアップです。百聞は一見にしかず。(でも発話の場合には「百見は一聞にしかず」か?)
<speak>
正解は<break time="3s"/>1番です!
</speak>
AlexaのSSMLを使った発話 その4 https://t.co/IdEX53wPkv @YouTubeさんから
— tochi (@aguuu) 2018年1月14日
どうですか?すごく「タメ」が入っていい感じですね。これがSSMLです。
SSMLは<speak>
タグで囲みます。ちなみにAlexaのボイスシュミレーターでは<speak>
タグは省略します。
<speak>
の中に<break time="3s"/>
というタグがありますが、これは3秒間待ってから次の発話を行うという意味です。
SSMLにはこの他にも幾つかの種類があります。他のタグも試してみましょう。
音声合成マークアップ言語(SSML)のリファレンス | break
音量、高さ、速さを調整するprosodyタグ
次に先程の発話に更に感情を付けてみましょう。prosody
タグを使うと音量、トーン、速さを指定することができます。
音量はvolume
、速さはrate
、トーンはpitch
の属性をそれぞれ設定することでコントロールすることができます。
音声合成マークアップ言語(SSML)のリファレンス | prosody
<speak>
<prosody rate="x-slow" pitch="x-low">正解は</prosody>
<break time="3s"/>
<prosody rate="x-fast" pitch="x-high" volume="x-loud">1番</prosody>
です!
</speak>
AlexaのSSMLを使った発話 その5 https://t.co/kAhTXiFHLf @YouTubeさんから
— tochi (@aguuu) 2018年1月14日
どうですか?分かり易くすために強弱を強めにかけているので、自然?!とは言い難いですが、変化しているのがわかると思います。
このようにSSMLを使うと濃淡の少ない発話にいろいろな表現を追加することが可能です。
audioタグで発話の途中に音を差し込む
更に先程の発話に雰囲気を追加したいと思います。
break
タグでタメを入れましたが、あの場所にドラムロールを追加したいですね。
「正解は(ドロドロドロドロ、ダーン)1番です!」みたいな感じです。
実はSSMLにはaudio
タグがあり、発話の途中に指定のMP3を流すことが可能です。
音声合成マークアップ言語(SSML)のリファレンス | audio
audioタグは90秒以内であることや幾つかの制限があります。後はインターネット上から再生可能な場所にMP3を配置します。
今回はS3にファイルを配置しました。
ドラムロールの音源は魔王魂の物をお借りましました。
<speak>
<prosody rate="x-slow" pitch="x-low">正解は</prosody>
<audio src="https://s3-ap-northeast-1.amazonaws.com/xxx/output.mp3"/>
<prosody rate="x-fast" pitch="x-high" volume="x-loud">1番</prosody>
です!
</speak>
AlexaのSSMLを使った発話 その6 https://t.co/hIFCZKAqEz @YouTubeさんから
— tochi (@aguuu) 2018年1月14日
かなり雰囲気が付きました。90秒まで指定可能なので発話に間にジングルを追加してラジオ風にすることもできそうですね。
say-asタグで読み方を指定する
次は数字を発話してみます。
番号は1234です。
AlexaのSSMLを使った発話 その7 https://t.co/s5SAGJvt18 @YouTubeさんから
— tochi (@aguuu) 2018年1月14日
このように発話させると数字のところは「せんにひゃくさんじゅうよん」と発話されます。
例えば暗証番号として数字を扱う場合には「いちにいさんよん」と発話させたいですよね。
そんな時に使うのがsay-as
タグです。interpret-as
属性にdigits
を指定すると数字ごとに別々の発話をしてくれます。
音声合成マークアップ言語(SSML)のリファレンス | say-as
<speak>
番号は<say-as interpret-as="digits">1234</say-as>です。
</speak>
AlexaのSSMLを使った発話 その8 https://t.co/YJOUhYSPi8 @YouTubeさんから
— tochi (@aguuu) 2018年1月14日
他にもsay-as
タグには日付の読み方を指定するものもあります。
<speak>
今日は<say-as interpret-as="date" format="md">01/17</say-as>です。
</speak>
AlexaのSSMLを使った発話 その9 https://t.co/5rUwecj4wV @YouTubeさんから
— tochi (@aguuu) 2018年1月14日
まとめ
SSMLはAmazonが拡張したエフェクトなどもあり、今後も追加されそうです。
例えば、「怒る」「笑う」「悲しむ」など、感情を表すタグが追加されれば、より自然で豊かな発話ができそうです。
Alexaでは発話にMP3などの音声ファイルを直接使うことも可能です。しかし、パターンが多いと音声ファイルを準備するのも大変です。
SSMLが発展してより多くの表現ができるようになればそういった手間も軽減できそうです。