音声合成ソフト 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>
<break/>
テキストの読み上げを一時停止する場合に使うタグです。
属性(付加的な情報)を付け加えることが可能です。
① time属性
〈秒〉または〈ミリ秒〉単位で停止することができます。
〈秒〉は “10s“(second)で、〈ミリ秒〉は “10ms“(millisecond)で表記します。
* 最大期間は 10s / 10000ms です。
時間を設定しないと、デフォルト値 <break strength=”medium”/> になります。
<speak>
はじめまして、英語番長です。<break time="3s"/>本日は関係代名詞を学習します。
</speak>
② strength属性
strength=”none” を使用すると、2文を(ピリオドで区切ってあっても)一続きの文章のように読み上げます。
強さは、何段階かあり、
strength=”none” (= strength=”x-weak”) < strength=”weak” (= strength=”medium”) < strength=”strong” < strength=”x-strong”
の順で強くなります。
<speak>
はじめまして、英語番長です。<break strength="x-strong"/>本日は関係代名詞を学習します。
</speak>
<amazon:breath/>
呼吸音を追加する時に使うタグです。
デフォルトで使う時は属性を書かないで <amazon:breath/> の形で使います。
<speak>
He speaks so fast <amazon:breath/>that I can’t understand what he says
</speak>
<speak>
He speaks so fast <amazon:breath/>that I can’t understand <amazon:breath/>what he says
</speak>
上の例文が タグを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>
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>
強さは3種類です。
level=”reduced” < level=”moderate” < level=”strong”
の順で強くなります。
デフォルトは level=”moderate” です。
“moderate” で使う場合は、属性は書かなくても(要素だけで)大丈夫です。
<speak>
はじめまして、英語番長です。本日は<emphasis>関係代名詞</emphasis>を学習します。
</speak>
<p></p>
テキストのパラグラフ間に一時停止をする時に使うダグです。
停止時間は先ほど紹介した <break strength=”x-strong/”> と同じくらい(1秒程度)です。
<speak>
はじめまして、英語番長です。<p>本日は関係代名詞を学習します。 </p>
</speak>
<w></w>
このタグを使うと、単語に境界線を入れ、発音をコントロールすることができます。
「東京都」という単語を例にとって考えてみます。
この単語は切り方によって「① とうきょうと ② ひがしきょうと」という発音が可能です。
Amazon polly では <speak>東京都</speak> と書くと、「とうきょうと」と読みます。
「ひがしきょうと」と読ませたい場合は以下のように書く必要があります
<speak>
<w>東</w><w>京都</w>
東<w>京都</w>
<w>東</w>京都
</speak>
これらはすべて「ひがしきょうと」と発音します。
品詞を指定して発音を使い分ける
この <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>
品詞の指定は以下のとおりです。
<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>
今回は発音があまりに早いので、 <prosody rate=”40%”> で発音の速度を落としました。
1番目と3番目の bow [ボウ] は「弓矢」の意味の発音、2番目の bow [バウ] は「おじぎする」の意味の発音です。
振り仮名で発音をコントロールする
ふりがなを振ることで発音をコントロールすることもできます。
<speak>
日本橋(にほんばし)
日本橋(にっぽんばし)
</speak>
ただし、うまく行かない場合もあります。
Amazon polly に登録されていない発音はふりがなを振っても発音しません。
<speak>
日本橋(りんご)
日本橋(みかん)
</speak>
上のように打ち込むと、「にほんばし・りんご・にほんばし・みかん」とカッコ内も続けて発音します。
<phoneme></phoneme>
独自の読み方をさせたい場合は <phoneme> タグを使います。
このタグを使うと任意の振り仮名(発音)を振ることができます。
phoneme type=”ruby”(ルビ)の後に ph属性 で発音を指定すればOKです。
<speak>
<phoneme type="ruby" ph="にっぽんばし">日本橋</phoneme>
</speak>
下記のように、関係のない〈数字〉や〈長音記号〉を phタグ に追加しても(例:ph=”にっぽんばし21“)、その〈数字〉や〈長音記号〉は発音されません。
また、その場合は ph属性 で指定した発音を無視し、デフォルトの発音で読み上げます。(「日本橋」のデフォルトの発音は「にほんばし」)
<speak>
<phoneme type="ruby" ph="にっぽんばし21">日本橋</phoneme>
</speak>
また、以下のように任意の文字の発音を変えることもできます。
<speak>
<phoneme type="ruby" ph="い">行</phoneme>った
</speak>
<speak>
<phoneme type="ruby" ph="おこな">行</phoneme>った
</speak>
alphabet 属性(日本語の場合)
非常に便利な属性です。
この属性(alphabet=”x-amazon-pron-kana”)を使うことでアクセントをコントロールできます。
* アポストロフィはピッチが下がるアクセント拍を示します。
<speak>
<phoneme alphabet="x-amazon-pron-kana" ph="マイニチシ'ンブン">毎日新聞</phoneme>を読む
</speak>
アクセント記号をつけると、「毎日新聞(という新聞)をよむ」という読み方になります。
アクセント記号を付けないと「毎日、新聞を読む」という平坦な発音になります。
* 読み方はカタカナで書きます。
また、以下のような使い分けもできます。
<speak>
<phoneme alphabet="x-amazon-pron-kana" ph="カ'レシ">彼氏</phoneme>
</speak>
アクセント記号をつけると「カ↗レシ」と「カ」にアクセントが付いた読み方になります。
一方で、
<speak>
<phoneme alphabet="x-amazon-pron-kana" ph="カレシ">彼氏</phoneme>
</speak>
とアクセントを付けないと「カ→レシ」という平坦な読み方になります。
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>
最初の単語は、pecan をローマ字読みするので、「ペカン」と読みます。
2つ目、3つ目は発音記号通りに「ピキャン」「ピカーン」と読みます。
alphabet 属性の注意点
この属性(alphabet=”x-amazon-pron-kana”)を使うことでアクセントをコントロールできるのですが、注意点があります。
この属性を使って単語に振ることができるアクセントは最大1個です。
つまり、各単語に最大1個ピッチが下がる場所を指定できます。
例をあげます。
下のように、一箇所にだけアクセントを振ると機械音丸出しの平坦な読み方になります(アクセントをとっても発音はほぼ同じです)
これだとアクセントを付けている意味はあまりありません。
<speak>
<phoneme alphabet="x-amazon-pron-kana" ph="バスガスバ'クハツ">バスガス爆発</phoneme>
</speak>
アクセントを複数付ける場合は、スペースを空けてそれぞれにアクセント記号をつけます。
<speak>
<phoneme alphabet="x-amazon-pron-kana" ph="バ'ス ガスバ'クハツ">バスガス爆発</phoneme>
</speak>
<speak>
<phoneme alphabet="x-amazon-pron-kana" ph="バ'ス ガ'ス バクハツ">バスガス爆発</phoneme>
</speak>
実は alphabet属性 にはもう一つ注意点があります。
発音カナの記述方法です。
間違った記述 | 正しい記述 | |
助詞「は」 | 「ハ」 | 「ワ」 |
助詞「へ」 | 「ヘ」 | 「エ」 |
助詞「を」 | 「ヲ」 | 「オ」 |
場合によっては「ー」(長音記号)も使う必要があります。
例:格子 → 「コーシ」・「子牛」→「コウシ」
「彼は北欧神話に登場する神を紹介した」という文章を Amazon polly に読み上げさせると以下のようになります。
<speak>
<phoneme alphabet="x-amazon-pron-kana" ph="カ'レワ ホクオーシ'ンワニ トージョースル カ'ミオ ショーカイシタ">彼は北欧神話に登場する神を紹介した。</phoneme>
</speak>
う〜む。練習が必要ですね。
<say-as></say-as>
特定の〈文字〉〈単語〉〈数字〉を発音させるためのタグです。
数字を読み上げる場合
以下のように書くと、英語なら「twelve thousand three hundred forty five」と発音します。日本語の場合は「一万二千三百四十五」と読みます。
<speak>
12345
</speak>
数字をそのまま読ませたい場合は以下のように書いてください。
英語なら「one・two・three・four・five」と発音します。日本語の場合は「いち・に・さん・よん・ご」と発音します。
<speak>
<say-as interpret-as="digits">12345</say-as>
</speak>
英語を読み上げる場合
英語を読み上げる場合は以下のように書いてください。
<speak>
<say-as interpret-as="spell-out">abcde</say-as>
</speak>
このように書くと「エー・ビー・スィー・ディー・イー」と一文字ずつ読み上げてくれます。
<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>
また、相対的なボリュームの変更もできます。
+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>
② 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>
ボリュームの時と同様に、数字で調節することもできます。
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>
こわいこわい!なんかこわい!(笑)
上の例文は 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>
ボリュームの時と同様に、数字で調節することもできます。
+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>
これらのタグは複数用いることができます。
<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>