SSML

2019年7月21日

はじめに

音声合成マークアップ言語 SSML (Speech Synthesis Markup Language) で Alexa の発話を制御する方法について。

SSML

基本

SSML は <speak> と </speak> の間に書く。

<speak>...</speak>

Alexa で SSML を使う場合は基本的に必要なさそう。

強調

<emphasis level="strong">...</emphasis>
  • level: strong, moderate, reduced

休止

<break time="1s"/>

溜めを作りたいときに。

音律

<prosody rate="slow" pitch="low" volume="soft">...</prosody>
  • rate: x-slow, slow, medium, fast, x-fast
  • pitch: x-low, low, medium, high, x-high
  • volume: slient, x-soft, medium, loud, x-loud

置換

<sub alias="にゃんこ">猫</sub>

ルビみたいなもの。

Speechcon

<say-as interpret-as="interjection">こんにちは</say-as>

ある規定のものは自然な話し方になる。

参考: Speechconリファレンス

たとえば、以下のようなものがある。

  • こんにちは
  • どういたしまして
  • いつでもどうぞ
  • お仕事がんばってくださいね
  • お疲れ様です
  • お役に立ててうれしいです
  • がんばってくださいね
  • さあて
  • すみません
  • そうですね
  • それじゃあ
  • それでは
  • たくさん話しかけてくださいね
  • なんちゃって
  • はい
  • またいつでも聞いてください
  • またいつでもどうぞ

確かに自然な話し方になるのだが、普通に発話させた中にこれを混ぜると違和感しかない。Speechcon を使うなら、ほぼ Speechcon だけで発話させないとダメそう。

Amazon Polly の音声

<voice name="Mizuki">こんにちは</voice>。
<voice name="Takumi">こんにちは</voice>。

サウンドライブラリ

参考: Alexa Skills Kitサウンドライブラリ

これはアレクサの通常音声です。音響効果「クマのうなり声(1)」を再生します。
<audio src='soundbank://soundlibrary/animals/amzn_sfx_bear_groan_roar_01'/>

Node.js での SSML の削除

発話させる文字列から表示用の文字列を作るために、SSML タグを取り除くには次のようにする。

showText = s.replace(/<("[^"]*"|'[^']*'|[^'">])*>/g, "");