初期設定

Amazon Polly — SSMLタグについて

記事内に商品プロモーションを含む場合があります

音声合成ソフト Amazon Polly の SSML(Speech Synthesis Markup Language・音声合成マークアップ言語)についてまとめました。

 

頻繁に使うものを集めてみた

利用頻度の高いものを先にまとめておきます。

1. 〈prosody〉

Amazon Polly はそのままではかなり早いので、速度を80%くらいに調節する必要があります。

<speak><prosody rate="80%">She was expected to get to this hotel by five o'clock.</prosody></speak>

 

2. 〈break time〉

長い文章だと上の〈prosody〉を使っても聞きづらいので、一拍入れるために〈break time〉を使います。

<speak><prosody rate="80%">She was expected to get to this hotel <break time="1ms"/>by five o'clock.</prosody></speak>

 

3. <amazon:breath/>

上の〈break time= “1ms”〉より長い間が開きます。節と節の間に入れるのに使います。

<speak><prosody rate="80%">She was expected to get to this hotel <amazon:breath/>by five o'clock.</prosody></speak>

 

 

SSMLを学ぼう

 SSML のコードをまとめました。

以下の記事を参考にしています。

Amazon Polly を使用した日本語テキスト読み上げの最適化 柳澤佳代子
Amazon Polly はじめての SSML入門
Amazon Polly 開発者ガイド

<speak></speak>

SSMLで音声を読み上げる場合、<speak> タグで挟みます。

</speak> で閉じないとエラーが出ます。

<speak>
はじめまして、英語番長です。本日は関係代名詞を学習します。
</speak>

play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off

 

<break/>

テキストの読み上げを一時停止する場合に使うタグです。

属性(付加的な情報)を付け加えることが可能です。

 

① time属性

〈秒〉または〈ミリ秒〉単位で停止することができます。

〈秒〉は “10s“(second)で、〈ミリ秒〉は “10ms“(millisecond)で表記します。

* 最大期間は 10s / 10000ms です。

時間を設定しないと、デフォルト値 <break strength=”medium”/> になります。

<speak>
はじめまして、英語番長です。<break time="3s"/>本日は関係代名詞を学習します。
</speak>

play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off
<break time=”3s”/> の スラッシュ を書き忘れるとエラーが出ます。

 

② strength属性

strength=”none” を使用すると、2文を(ピリオドで区切ってあっても)一続きの文章のように読み上げます。

強さは、何段階かあり、

strength=”none” (= strength=”x-weak”) < strength=”weak” (= strength=”medium”) < strength=”strong” < strength=”x-strong”

の順で強くなります。

<speak>
はじめまして、英語番長です。<break strength="x-strong"/>本日は関係代名詞を学習します。
</speak>

play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off
実際には x-strong でも1秒程度しか一時停止しないので、それ以上停止させたい場合は time 属性を使うほうが良いでしょう。

 

<amazon:breath/>

呼吸音を追加する時に使うタグです。

デフォルトで使う時は属性を書かないで <amazon:breath/> の形で使います。

<speak>
He speaks so fast <amazon:breath/>that I can’t understand what he says
</speak>

play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off

<speak>
He speaks so fast <amazon:breath/>that I can’t understand <amazon:breath/>what he says
</speak>


play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off

上の例文が タグを1個入れた例、下の例文が タグを2個入れた例になります。

一つの文章に複数タグを入れることも可能です。

デフォルト <amazon:breath/> で使う場合は終了タグはいりません。

 

<amazon:breath/> タグに属性をつける

呼吸音を追加する <amazon:breath/> タグに、呼吸音の長さ(duration属性)とボリューム(volume属性)を付け加えることができます。

属性を付けた場合でも終了タグはいりません。

<speak>
He speaks so fast <amazon:breath duration="long" volume="x-loud"/>that I can’t understand what he says
</speak>

play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off


duration属性 は呼吸音の長さを制御します。

x-short < short < medium (= default) < long < x-long 

の順で強くなります。

 

また、volume属性は呼吸音の音量を制御します。

x-soft < soft < medium (= default) < loud < x-loud

の順で強くなります。

 

 

<emphasis></emphasis>

単語を強調する時に使うタグです。

強調の程度を大きくするとテキストは大きくゆっくり発音されます。

強度の度合いを調節するには level属性 を利用します。

<speak>
はじめまして、英語番長です。本日は<emphasis level="strong">関係代名詞</emphasis>を学習します。
</speak>

play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off

強さは3種類です。

level=”reduced” < level=”moderate” < level=”strong”

の順で強くなります。

デフォルトは level=”moderate” です。

“moderate” で使う場合は、属性は書かなくても(要素だけで)大丈夫です。

<speak>
はじめまして、英語番長です。本日は<emphasis>関係代名詞</emphasis>を学習します。
</speak>

play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off
実際に使ってみた感想ですが、strong は明らかに不自然でした。(まるでホラー)また、reduced はあまり変化が見られませんでした。

使うのであれば、moderate が一番良いと思います。

 

<p></p>

テキストのパラグラフ間に一時停止をする時に使うダグです。

停止時間は先ほど紹介した <break strength=”x-strong/”> と同じくらい(1秒程度)です。

<speak>
はじめまして、英語番長です。<p>本日は関係代名詞を学習します。 </p> 
</speak>

play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off

 

<w></w>

このタグを使うと、単語に境界線を入れ、発音をコントロールすることができます。

「東京都」という単語を例にとって考えてみます。

この単語は切り方によって「① とうきょうと ② ひがしきょうと」という発音が可能です。

Amazon polly では <speak>東京都</speak> と書くと、「とうきょうと」と読みます。

「ひがしきょうと」と読ませたい場合は以下のように書く必要があります

<speak>
<w>東</w><w>京都</w>
東<w>京都</w>
<w>東</w>京都
</speak>


play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off

これらはすべて「ひがしきょうと」と発音します。

複雑な読み方は、ひらがなで打ってしまえば良いでしょう。どうしても漢字で表記したい場合は <w></w> を使えば解決します。

 

品詞を指定して発音を使い分ける

この <w></w> タグには大事な役割があります。

role 属性を使って単語の品詞を指定することができます。

例えば、動詞の read は現在形では [リード] と読みますが、過去形では [レッド] と読みます。

以下のように <w role=”amazon:VB”> や <w role=”amazon:VBD”> と表記することによって時制を使い分ける事ができます。

<speak>
     The word read 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>

play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off

品詞の指定は以下のとおりです。

<w role=”amazon:VB“>動詞を 現在形として解釈します
<w role=”amazon:VBD“>動詞を 過去形 として解釈します
<w role=”amazon:NN“>動詞を 名詞 として解釈します

 

また、同音異義語の場合は <w role=”amazon:SENSE_1″> を使うことでデフォルトでない発音を使用することができます。

<speak>
  <prosody rate="40%">
    bow
   <w role="amazon:SENSE_1">bow</w>
    bow
  </prosody>
     </speak>


play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off

今回は発音があまりに早いので、 <prosody rate=”40%”> で発音の速度を落としました。

1番目と3番目の bow [ボウ] は「弓矢」の意味の発音、2番目の bow [バウ] は「おじぎする」の意味の発音です。

 

 

振り仮名で発音をコントロールする

ふりがなを振ることで発音をコントロールすることもできます。

<speak>
日本橋(にほんばし)
日本橋(にっぽんばし)
</speak>


play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off

ただし、うまく行かない場合もあります。

Amazon polly に登録されていない発音はふりがなを振っても発音しません。

<speak>
日本橋(りんご)
日本橋(みかん)
</speak>


play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off

上のように打ち込むと、「にほんばし・りんご・にほんばし・みかん」とカッコ内も続けて発音します。

繰り返しになりますが、複雑な読み方は、ひらがなで打ってしまえば良いでしょう。

 

<phoneme></phoneme>

独自の読み方をさせたい場合は <phoneme> タグを使います。

このタグを使うと任意の振り仮名(発音)を振ることができます。

phoneme type=”ruby”(ルビ)の後に ph属性 で発音を指定すればOKです。

<speak>
<phoneme type="ruby" ph="にっぽんばし">日本橋</phoneme>
</speak>

play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off

 


下記のように、関係のない〈数字〉や〈長音記号〉を phタグ に追加しても(例:ph=”にっぽんばし21“)、その〈数字〉や〈長音記号〉は発音されません。

また、その場合は ph属性 で指定した発音を無視し、デフォルトの発音で読み上げます。(「日本橋」のデフォルトの発音は「にほんばし」)

<speak>
<phoneme type="ruby" ph="にっぽんばし21">日本橋</phoneme>
</speak>

play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off


また、以下のように任意の文字の発音を変えることもできます。

<speak>
<phoneme type="ruby" ph="い">行</phoneme>った
</speak>

play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off

<speak>
<phoneme type="ruby" ph="おこな">行</phoneme>った  
</speak>

play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off
繰り返しになりますが、この程度の変更なら、ひらがなで打ってしまえば良いでしょう。

実は <phoneme> タグには非常に便利な使い方があります。 alphabet 属性を用いて、アクセントをコントロールできます(下記説明参照のこと)

 

alphabet 属性(日本語の場合)

非常に便利な属性です。

この属性(alphabet=”x-amazon-pron-kana”)を使うことでアクセントをコントロールできます。

* アポストロフィはピッチが下がるアクセント拍を示します。

<speak>
<phoneme alphabet="x-amazon-pron-kana" ph="マイニチシ'ンブン">毎日新聞</phoneme>を読む
</speak>


play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off

アクセント記号をつけると、「毎日新聞(という新聞)をよむ」という読み方になります。

アクセント記号を付けないと「毎日、新聞を読む」という平坦な発音になります。

* 読み方はカタカナで書きます。

 

 

また、以下のような使い分けもできます。

<speak>
<phoneme alphabet="x-amazon-pron-kana" ph="カ'レシ">彼氏</phoneme>
</speak>


play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off

アクセント記号をつけると「カ↗レシ」と「カ」にアクセントが付いた読み方になります。

 

一方で、

<speak>
<phoneme alphabet="x-amazon-pron-kana" ph="カレシ">彼氏</phoneme>
</speak>


play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off

とアクセントを付けないと「カ→レシ」という平坦な読み方になります。

 

alphabet 属性(英語の場合)

特定の単語に特殊な読み方をさせたい場合に使います。

属性が2つ必要です。

① alphabet=”ipa” → 国際音声記号(IPA)が使用されることを表します。

② ph → 発音記号を書きます

<speak>
     You say pecan. 
     I say, <phoneme alphabet="ipa" ph="ˈpi.kæn">pecan</phoneme>.
     He says, <phoneme alphabet="ipa" ph="pɪˈkɑːn">pecan</phoneme>. 
</speak>


play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off

最初の単語は、pecan をローマ字読みするので、「ペカン」と読みます。

2つ目、3つ目は発音記号通りに「ピキャン」「ピカーン」と読みます。

 

 

alphabet 属性の注意点

この属性(alphabet=”x-amazon-pron-kana”)を使うことでアクセントをコントロールできるのですが、注意点があります。

この属性を使って単語に振ることができるアクセントは最大1個です。

つまり、各単語に最大1個ピッチが下がる場所を指定できます。

 

例をあげます。

下のように、一箇所にだけアクセントを振ると機械音丸出しの平坦な読み方になります(アクセントをとっても発音はほぼ同じです)

これだとアクセントを付けている意味はあまりありません。

<speak>
<phoneme alphabet="x-amazon-pron-kana" ph="バスガスバ'クハツ">バスガス爆発</phoneme>
</speak>

play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off

 

アクセントを複数付ける場合は、スペースを空けてそれぞれにアクセント記号をつけます。

<speak>
<phoneme alphabet="x-amazon-pron-kana" ph="バ'ス ガスバ'クハツ">バスガス爆発</phoneme>
</speak>

play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off

<speak>
<phoneme alphabet="x-amazon-pron-kana" ph="バ'ス ガ'ス バクハツ">バスガス爆発</phoneme>
</speak>

play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off

 

実は alphabet属性 にはもう一つ注意点があります。

発音カナの記述方法です。

間違った記述正しい記述
助詞「は」「ハ」「ワ」
助詞「へ」「ヘ」「エ」
助詞「を」「ヲ」「オ」


場合によっては「ー」(長音記号)も使う必要があります。

例:格子 → 「コーシ」・「子牛」→「コウシ」

 

 

彼は北欧神話に登場する神を紹介した」という文章を Amazon polly に読み上げさせると以下のようになります。

<speak>
<phoneme alphabet="x-amazon-pron-kana" ph="カ'レワ ホクオーシ'ンワニ トージョースル カ'ミオ ショーカイシタ">彼は北欧神話に登場する神を紹介した。</phoneme>
</speak>


play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off

う〜む。練習が必要ですね。

 

<say-as></say-as>

特定の〈文字〉〈単語〉〈数字〉を発音させるためのタグです。

 

数字を読み上げる場合

以下のように書くと、英語なら「twelve thousand three hundred forty five」と発音します。日本語の場合は「一万二千三百四十五」と読みます。

<speak> 
12345
</speak>

play_circle_filled
pause_circle_filled
文の読み上げ(日本語)
volume_down
volume_up
volume_off
play_circle_filled
pause_circle_filled
文の読み上げ(英語)
volume_down
volume_up
volume_off

数字をそのまま読ませたい場合は以下のように書いてください。

英語なら「one・two・three・four・five」と発音します。日本語の場合は「いち・に・さん・よん・ご」と発音します。

<speak> 
<say-as interpret-as="digits">12345</say-as>
</speak>

play_circle_filled
pause_circle_filled
文の読み上げ(日本語)
volume_down
volume_up
volume_off
play_circle_filled
pause_circle_filled
文の読み上げ(英語)
volume_down
volume_up
volume_off

 

英語を読み上げる場合

英語を読み上げる場合は以下のように書いてください。

<speak> 
<say-as interpret-as="spell-out">abcde</say-as>
</speak>

play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off


このように書くと「エー・ビー・スィー・ディー・イー」と一文字ずつ読み上げてくれます。

これ以外の「特殊なタイプの単語の発生方法を制御する」場合は、公式HP「サポートされているSSMLタグ ーー<say-as>」を参照のこと

 

<prosody></prosody>

この属性を使うことで〈音量〉〈速度〉〈ピッチ〉をコントロールできます。

 

① volume(音量)

default → デフォルトの音量に戻します。

音は以下の順に強くなります。

silent < x-soft < soft < medium < loud < x-loud

silent にするとボリュームがゼロになります。

<speak>
     When I was a child, my father used to tell me not to worry too much about <prosody volume="loud">what other people said. </prosody>                     
</speak>

play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off


また、相対的なボリュームの変更もできます。

+0dB はボリュームを変更しない、+6dB は現在のボリュームの約2倍、-6dB は現在のボリュームの約半分であることを表します。

<speak>
     When I was a child, my father used to tell me not to worry too much about <prosody volume="+6dB">what other people said. </prosody>                     
</speak>

play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off

 

② rate(速度)

速度は以下の順に強くなります。

x-slow < slow < medium < fast < x-fast

<speak>
     When I was a child, my father used to tell me not to worry too much about <prosody rate="x-slow">what other people said. </prosody>                     
</speak>

play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off

ボリュームの時と同様に、数字で調節することもできます。

100% は現状維持、200%はデフォルトの2倍の速度、50%はデフォルトの半分の速度を表します。

この値の範囲は 20%~200% です。

<speak>
     When I was a child, my father used to tell me not to worry too much about <prosody rate="20%">what other people said. </prosody>                     
</speak>


play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off

こわいこわい!なんかこわい!(笑)

上の例文は 20%に設定しました。ここまで遅いと実用性はありません(笑)

 

③ pitch(高さ)

default → デフォルトの高さに戻します。

音は以下の順に高くなります。

x-low < low < medium < high < x-high

<speak>
     When I was a child, my father used to tell me not to worry too much about <prosody pitch="high">what other people said. </prosody>                     
</speak>


play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off

ボリュームの時と同様に、数字で調節することもできます。

+0% は現状維持、+5%はベースラインピッチを少し上げる、-5%はベースラインピッチを少し下げることを表します。

<speak>
     When I was a child, my father used to tell me not to worry too much about <prosody pitch="+50%">what other people said. </prosody>                     
</speak>


play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off

これらのタグは複数用いることができます。

<speak>
     When I was a child, my father used to tell me not to worry too much about <prosody volume="loud" rate="x-slow" pitch="+50%">what other people said. </prosody>                     
</speak>

play_circle_filled
pause_circle_filled
文の読み上げ
volume_down
volume_up
volume_off

 

俺
バリバリ音声を入れていくぞ!

マツ2歳
マツ2歳
ニャ〜