Amazon Alexa(Amazon Echo)で使用できるSSMLタグのまとめ

SSML

SSML(Speech Synthesis Markup Language)は、人工的に人間の音声を作りだす 音声合成 のためのマークアップ言語で、XMLでテキストの読み上げ内容を詳細に定義できます。2010年にバージョン1.1がW3C勧告されています。
Amazon Alexa(Amazon Echo)やActions on Google(Google Home)でも採用されていて、端末からユーザーへのレスポンスをSSMLで定義することができます。

Alexa Skillで使用できるSSMLタグ

公式のこちらのページを要約したものです。

amazon:effect

Amazon独自の音声効果を付与するタグです。
現在はwhisperedしか効果の種類はないようですが、将来的にはもっと増えるかもしれませんね。

属性名
name ・whispered
 ささやくように発声します
  • タグ使用例
<speak>
    I want to tell you a secret. 
    <amazon:effect name="whispered">I am not a real human.</amazon:effect>.
    Can you believe it?
</speak>

audio

Alexaの発声機能で読み上げるする代わりにMP3での音声ファイルを流すためのタグです。
公式サイトでは使用イメージでは
 ・ コマーシャルソングを流す
 ・ Alexaが対応していない言語での音声を流す
などが使用イメージとして提案されています。

使用するMP3にはいくつかの条件があります。
 ・ インターネット上でホスティングされた HTTPSエンドポイントで提供されていること。
 ・ SSL証明書がオレオレ証明書ではなくAmazonの基準を満たす証明書であること。(公式サイトではAWS S3の使用を提案しています)
 ・ カスタマーの個人情報やその他デリケートな情報を含んでいないこと
 ・ 有効なMP3ファイルであること(MPEG version 2)
 ・ 90秒以内であること
 ・ ビットレートが48KB/sであること
 ・ サンプルレートが16,000Hzであること

属性名
src MP3ファイルのURLを指定します
  • タグ使用例
<speak>
    Welcome to Car-Fu. 
    <audio src="https://carfu.com/audio/carfu-welcome.mp3" />
    You can order a ride, or request a fare estimate. 
    Which will it be?
</speak> 

break

読み上げを停止する時間を設定します。strengthtimeで停止時間を設定します。

属性名
strength ・none
 停止時間を無くします。デフォルトだとピリオドのあとに停止時間があるのですが、その時間もなくします。
・x-weak
 noneと同じです
・weak
 隣接した単語をカンマで分けられた時と同じ停止時間を発生させます。
・medium(default)
 weakと同じです。
・strong
 センテンスが終わったときと同様の停止時間を発生させます。
・x-strong
 段落が終わった時と同様の停止時間を発生させます。
time 停止時間を指定します。秒(s)orミリ秒(ms)での指定が可能で、最大10秒になっています。
  • タグ使用例
<speak>
    There is a three second pause here <break time="3s"/> 
    then the speech continues.
</speak> 

emphasis

強調して読み上げるかどうかを指定できます。強調する場合はより声の音量を大きくよりゆっくり発声します。逆に強調を控える場合はより声を小さくより早く発声します。

属性名
level ・strong
 強調して読み上げます。声を大きくゆっくり発声します
・moderate
 強調して読み上げますが、strongほどではないです。
・reduced
 逆に強調せず読み上げます。声を小さくして速く読み上げます。
  • タグ使用例
<speak>
    I already told you I 
    <emphasis level="strong">really like</emphasis> 
    that person.
</speak> 

p

段落を表現するためのタグです。段落が終わったときに上述のbreakタグで

<break strength="x-strong"/>

と同じ長さの停止時間が発生します。

  • タグ使用例
<speak>                                         
    <p>This is the first paragraph. There should be a pause after this text is spoken.</p>       
    <p>This is the second paragraph.</p> 
</speak>    

prosody

読み上げの速度、音程、音量を詳細に設定できます。

属性名
rate ・x-slow, slow, medium, fast, x-fast
 速度をざっくり指定します。
・n%
 速度をパーセンテージで詳細に指定します。100%がデフォルトになっており、100を超える値だと速くなり、100を下回ると遅くなります。20%が最小値となっています。
pitch ・x-low, low, medium, high, x-high
 音程をざっくり指定します。
・+n%
 音程の上昇量をパーセンテージで詳細に指定します。+0%だとデフォルトと同じになります。最大値は+50%です。
・-n%
 音程の低下量をパーセンテージで詳細に指定します。-0%だとデフォルトと同じになります。最小値は-33%です。
volume ・silent, x-soft, soft, medium, loud, x-loud:
 声の大きさをざっくり指定します。
・+ndB
音量の増加量をデシベルで詳細に指定します。+0dBだとデフォルトと同じになります。最大値は+4.08dBです。
・-ndB
音量の減少量をデシベルで詳細に指定します。-0dBだとデフォルトと同じになります。最小値は-6dBです。
  • タグ使用例
<speak>
    Normal volume for the first sentence.
    <prosody volume="x-loud">Louder volume for the second sentence</prosody>.
    When I wake up, <prosody rate="x-slow">I speak quite slowly</prosody>.
    I can speak with my normal pitch, 
    <prosody pitch="x-high"> but also with a much higher pitch </prosody>, 
    and also <prosody pitch="low">with a lower pitch</prosody>.
</speak>

s

センテンスを表現するためのタグです。センテンスが終わったときに上述のbreakタグで

<break strength="strong"/>

と同じ長さの停止時間が発生します。

  • タグ使用例
<speak>
    <s>This is a sentence</s>
    <s>There should be a short pause before this second sentence</s> 
    This sentence ends with a period and should have the same pause.
</speak>

say-as

タグで囲まれた文字がAlexaにどう解釈してほしいかを伝えるためのタグです。例えば「20170707」という文字を

<say-as interpret-as="date">20170707</say-as>

というようにsay-asタグでこれは日付ですよとAlexaに伝えることで、Alexaは日付に適した発声を行ってくれます。
say-asで囲まなくてもAlexaがある程度は自動で認識を行いますが、明示的に指定することでより最適化された発声を行うようになります。

属性名
interpret-as ・characters, spell-out
 それぞれの文字をそのまま読みあげるための指定です。
・cardinal, number
 基数表記(one, two, threeなど)であることを伝えます。
・ordinal
 序数表記(first, second, thirdなど)であることを伝えます。
・digit
 数字をそれぞれの文字ごとに読み上げるための指定です。
・fraction
 分数表記(3/20や1+1/2など)であることを伝えます。
・unit
 数値+単位 or 単位のみの表記であることを伝えます。
・date
 日付表記であることを伝えます。フォーマットはformat属性で指定します。
・time
 時刻表記(1’21″のような分と秒のみ)であることを伝えます。
・telephone
 電話番号表記であることを伝えます。
・address
 住所表記であることを伝えます。
・interjection
 間投詞であることを伝えます。これを指定するとより感情を込めて発声します。
・expletive
 これを指定された文章を読み上げる際はピー音になります。
format interpret-asでdateが指定された場合に、日付フォーマットを指定します。

speak

SSMLのルートタグです。すべてのSSMLはこのタグで囲まれます。

sub

このタグで囲まれた単語や文章は alias属性で指定された内容に置き換えられて発声されます。

属性名
alias タグで囲まれた内容を置き換える単語・文章です。
  • タグ使用例
<speak>
    My favorite chemical element is <sub alias="aluminum">Al</sub>,
    but Al prefers <sub alias="magnesium">Mg</sub>. 
</speak> 

w

say-asと同様にAlexaにどう解釈してほしいかを伝えるためのタグで、品詞(動詞や名詞、過去分詞)を指定できます。

属性名
role ・amazon:VB
 動詞(verb)であることを伝えます。
・amazon:VBD
 過去分詞(past participle)であることを伝えます。
・amazon:NN
 名刺(noun)であることを伝えます。
・amazon:SENSE_1
 同じつづりで発音が違う単語の場合に、デフォルトではない発音を指定する場合に使用します。
  • タグ使用例
<speak>
    The word <say-as interpret-as="characters">read</say-as> may be interpreted 
    as either the present simple form <w role="amazon:VB">read</w>, 
    or the past participle form <w role="amazon:VBD">read</w>.
</speak>