SSML 要素
IBM Watson® Text to Speech サービスでは、ほとんどの Speech Synthesis Markup Language (SSML) の要素と属性を使用してテキストの合成を制御できます。
サポートされている要素と属性
表 1 に、SSML 要素と属性に対するサービスのサポートの要約を示します。
- 完全 は、その要素または属性がサービスの HTTP インターフェースおよび WebSocket インターフェースで完全にサポートされていることを意味します。
- 「一部」 は、エレメントまたは属性に対するサービスのサポートが以下のいずれかの方法で制限されることを意味します。
- サービスは、要素または属性の一部の側面のみをサポートします。
- サービスは、一部の音声のみを含むエレメントまたは属性をサポートします。
- サービスは、そのインターフェースの 1 つ (HTTP または WebSocket) のみを使用してエレメントまたは属性をサポートします。
- なし は、その要素および属性がサービスでサポートされていないことを意味します。
以下のセクションでは、例、制約事項、サービスのサポートが標準 SSML と異なるかどうかなど、各要素または属性について説明します。 属性と値のサポートが SSML 仕様とわずかに異なるところです。 詳しくは W3CSpeech Synthesis Markup Language(SSML)Version1.11をご覧ください。
要素または属性 | サポート | 要素または属性 | サポート |
---|---|---|---|
<audio> エレメント |
なし | <prosody> エレメント |
部分的 |
<break> エレメント |
フル |
|
なし |
<desc> エレメント |
なし |
|
なし |
<emphasis> エレメント |
部分的 | フル | |
<express-as> エレメント |
部分的 |
|
なし |
<lexicon> エレメント |
なし | フル | |
<mark> エレメント |
部分的 |
|
なし |
<meta> エレメント |
なし | <say-as> エレメント |
部分的 |
<metadata> エレメント |
なし | 部分的 | |
<paragraph> エレメント |
フル | <sentence> エレメント |
フル |
<phoneme> エレメント |
フル | <speak> エレメント |
フル |
<sub> エレメント |
フル | ||
<voice> エレメント |
なし |
<audio>
エレメント
この<audio>
要素は、記録された要素をサービス生成音声に挿入します。 これはサポートされていません。
<break>
エレメント
<break>
エレメントは、発話されたテキストに一時停止を挿入します。 以下のオプション属性があります。
strength
。強度を示す多様な値を使用して休止の長さを指定します。none
: 処理中に生成される可能性がある中断を抑制します。x-weak
、weak
、medium
、strong
、またはx-strong
: 右に行くに従って強くなる中断を挿入します。
time
。秒またはミリ秒単位で休止の長さを指定します。 有効な値の形式は、秒の場合は{integer}s
、ミリ秒の場合は{integer}ms
です。
Break size <break strength="none"/> no pause
Break size <break strength="x-weak"/> x-weak pause
Break size <break strength="weak"/> weak pause
Break size <break strength="medium"/> medium pause
Break size <break strength="strong"/> strong pause
Break size <break strength="x-strong"/> x-strong pause
Break size <break time="1s"/> one-second pause
Break size <break time="1500ms"/> 1500-millisecond pause
<desc>
エレメント
<desc>
エレメントは、<audio>
エレメント内にのみ指定できます。 <audio>
エレメントはサポートされないため、<desc>
エレメントもサポートされません。
<emphasis>
エレメント
<emphasis>
要素は、式のニューラル音声でのみ使用できます。
式のニューラル音声では、 <emphasis>
要素を使用して、入力テキストの 1 つ以上の単語を強調したり、強調解除したりすることができます。 このエレメントは、以下のいずれかの値を受け入れるオプションの level
属性をサポートします。
none
-そうしないと強調される可能性があるテキストをサービスが強調しないようにします。moderate
-テキストに顕著な強調を提供します。level
属性を省略すると、このレベルがデフォルトになります。strong
-中程度のレベルで提供されるよりも、テキストに対してより多くの強調を提供します。reduced
-音声でテキストの重要度を下げる傾向があるため、テキストの重要度を重視しません。 このレベルは、テキストの強調の逆です。
以下の例では、 moderate
レベルをワード give
に適用します。
I am going to <emphasis level="moderate">give</emphasis> her the book.
詳しくは、 単語の強調 を参照してください。
<express-as>
エレメント
<express-as>
エレメントは、 Text to Speech サービスに固有の SSML 拡張機能です。 これは、表現型のニューラル音声でのみ使用できます。
感情表出のニューラル音声では、 <express-as>
要素を使用して発話スタイルを適用し、入力テキストのすべてまたは一部について特定の特性に対するサービスの強調を強化することができます。 このエレメントは、以下のいずれかの発話スタイルを受け入れる必須の style
属性をサポートします。
cheerful
-幸福と良いニュースを表示します。empathetic
-共感と同情を表します。neutral
-客観性と偶数性を示します。uncertain
-混乱と不確実性を解消します。
以下の例では、 cheerful
スタイルを入力テキスト全体に適用します。
<express-as style="cheerful">Oh, that's good news! I'm glad that we could help.</express-as>
詳しくは、 発話スタイルの使用 を参照してください。
<lexicon>
エレメント
この<lexicon>
エレメントは、指定された SSML 文書の発音辞書を導入します。 これはサポートされていません。
サービスのカスタマイズ・インターフェースを使用して、音声合成時に使用するカスタム項目 (単語/トランスレーションのペア) の辞書を定義できます。 詳しくは、カスタマイズの理解を参照してください。
<mark>
エレメント
<mark>
エレメントは、サービスの WebSocket インターフェースによってのみサポートされ、そのエレメントを無視する HTTP インターフェースによってはサポートされません。 詳しくは、SSML マークの指定を参照してください。
<mark>
要素は、合成されるテキスト内にマーカーを配置する空の要素です。 <mark>
要素の前にあるすべてのテキストが合成されると、クライアントに通知されます。 この要素は、マークを一意的に識別するストリングを指定する単一の name
属性を受け入れます。この名前の先頭は英数字にする必要があります。 合成音声内でマークが出現する時間とともに名前が返されます。
Hello <mark name="here"/> world.
<meta>
エレメントと<metadata>
エレメント
<meta>
エレメントと<metadata>
エレメントは、文書に関する情報を入れることができるコンテナーです。 サポートされていません。
<paragraph>
エレメントと<sentence>
エレメント
<paragraph>
(または<p>
) エレメントと<sentence>
(または<s>
) エレメントは、テキスト構造に関するヒントを提供するために使用できるオプション・エレメントです。 <paragraph>
要素または<sentence>
要素で囲まれているテキストが文の終わりの句読文字
(ピリオドなど) で終了しない場合、サービスは、合成音声に通常より長い一時停止を追加します。
どちらの要素も、有効な属性は、言語を切り替えるための xml:lang
のみです。 この属性はサポートされていません。
<paragraph>
<sentence>Text within a sentence element.</sentence>
<s>More text in another sentence.</s>
</paragraph>
<phoneme>
エレメント
<phoneme>
エレメントは、囲まれたテキストの発音を提供します。 表音つづりによって、単語の音、音を構成する音節、強勢が置かれる音節を表せます。 この要素には、以下の 2 つの属性があります。
-
alphabet
。使用する音韻体系を指定するオプション属性です。 サポートされる表音文字は以下のとおりです。- 標準の International Phonetic Alphabet (IPA):
alphabet="ipa"
. - IBM Symbolic Phonetic Representation (SPR):
alphabet="ibm"
.
表音文字を指定しなかった場合、サービスはデフォルトとして IBM の SPR を使用します。 詳しくは、 表音記号について を参照してください。
- 標準の International Phonetic Alphabet (IPA):
-
ph
。指定されている表音文字で発音を指定する必須属性です。 次の例は、tomato という単語の発音を両方の形式で表したものです。-
IPA 形式の場合
<phoneme alphabet="ipa" ph="təˈmeɪ.ɾoʊ">tomato</phoneme>
-
IPA 形式でユニコード記号を使用する場合
<phoneme alphabet="ipa" ph="təˈmeɪ.ɾoʊ">tomato</phoneme>
-
IBM SPR 形式の場合:
<phoneme alphabet="ibm" ph=".0tx.1me.0Fo">tomato</phoneme>
-
<phoneme>
エレメントで SPR および IPA 表記を使用する方法について詳しくは、表音記号についてを参照してください。
<prosody>
エレメント
<prosody>
要素は、テキストのピッチと発話速度を制御します。 すべての属性はオプションですが、エレメントで少なくとも 1 つの属性を指定しないと、エラーが発生します。
このサービスは、SSML 仕様の以下の 2 つの属性をサポートします。
SSML 仕様には、サービスがサポートしていない以下の 4 つの属性も用意されています。
contour
属性range
属性duration
属性volume
属性
サービスは、音声合成要求のすべてのテキストの速度とピッチを調整できる照会パラメーターもサポートします。 パラメーターと、 <prosody>
エレメントの pitch
属性および rate
属性との相互作用について詳しくは、以下を参照してください。
SSML バージョン 1.1 仕様との相違点
Text to Speech サービスの SSML サポートは、 W3C Speech Synthesis Markup Language(SSML)バージョン 1.1に基づいています。 ただし、SSML 仕様は、サービスが最初にリリースされてから進化しています。 ユーザーの後方互換性を維持するために、サービスは、最新の
SSML 仕様とは異なる <prosody>
要素のいくつかのフィーチャーを引き続きサポートします。
-
pitch
属性の場合、* サービスは以下の追加機能をサポートします。
- 符号付きまたは符号なしの数値によって示され、その後に
%
(パーセント記号) が続く、パーセント単位の相対的な変化。 音声のデフォルト・ピッチは、値0%
を渡すことと同等です。 - 符号付きまたは符号なしの数値によって示され、その後にストリング
st
が続く、半音の相対的な変更。
-
rate
属性の場合、* サービスは以下の追加機能をサポートします。
- 符号付きまたは符号なしの数値によって示され、その後に
%
(パーセント記号) が続く、パーセント単位の相対的な変化。 音声のデフォルトの発話速度は、値0%
を渡すことに相当します。 - 単位指定のない数値は、1 分あたりのワード数を指定します。 数値は絶対値です。1 分当たりのワード数の相対的な増加または減少を指定することはできません。
-
表現型ニューラル音声の場合、
pitch
属性とrate
属性はパーセンテージ値のみをサポートします。pitch
属性には、Hertz、半音、またはキーワードを使用しないでください。rate
属性には、毎分の単語やキーワードを使用しないでください。
SSML バージョン 1.1でサポートされる機能について詳しくは、SSML 仕様のセクション 3.2.4 prosody Element を参照してください。
pitch
属性
pitch
属性は、要素内のテキストのベースライン・ピッチ(音調)を変更します。 受け入れられる値は、以下のとおりです。
- 数値の後に
Hz
(Hertz) の指定が続きます。 ベースライン・ピッチは、指定された値に (上または下に) 入れ替えられます。 例えば、150Hz
などです。 - *パーセント単位の相対的な変化:*デフォルトのベースラインからの相対的な変化を示す数値。 数字の前に「
+
(増加)または「-
(減少)が付き、その後に「%
(パーセント記号)が付く。 符号なしの数値の後に%
が続く場合は、正の増加と解釈されます。 例えば、+10%
や10%
などです。 音声のデフォルト・ピッチは、値0%
を渡すことと同等です。 - *半音単位での相対的な変化:*デフォルトのベースラインから絶対的にシフトする数値。 数値の前に
+
(増加) または-
(減少) が付き、その後にst
(半音) が付きます。 符号なしの数値の後にst
が続く場合は、正の増加として解釈されます。 例えば、+5st
や5st
などです。 - キーワード: ピッチを対応する事前定義値に変更する、以下の 6 つのキーワードのいずれか。
default
。サービスのデフォルト・ベースライン・ピッチを使用します。x-low
。ピッチ・ベースラインを 12 半音下にシフトします。low
。ピッチ・ベースラインを 6 半音下にシフトします。medium
。default
と同じ動作が行われます。high
。ピッチ・ベースラインを 6 半音上にシフトします。x-high
。ピッチ・ベースラインを 12 半音上にシフトします。
感情表出ニューラル音声でサポートされるのは、 pitch
属性のパーセンテージ値のみです。 これらは、Hertz、半音、またはキーワードの使用をサポートしません。
アプリケーションで何が機能するかを判別する最良の方法は、パーセンテージに基づいて調整を行い、さまざまな値を試すことです。 さらに重要な変更を行う前に、5% または 10% の増分変更を試行してください。
<prosody pitch="150Hz">Transpose pitch to 150 Hz</prosody>
<prosody pitch="-20Hz">Lower pitch by 20 Hz from baseline</prosody>
<prosody pitch="+20Hz">Increase pitch by 20 Hz from baseline</prosody>
<prosody pitch="-10%">Decrease pitch by 10 percent</prosody>
<prosody pitch="+10%">Increase pitch by 10 percent</prosody>
<prosody pitch="-12st">Lower pitch by 12 semitones from baseline</prosody>
<prosody pitch="+12st">Increase pitch by 12 semitones from baseline</prosody>
<prosody pitch="x-low">Lower pitch by 12 semitones from baseline</prosody>
rate
属性
rate
属性は、要素内のテキストの発話速度の変更を指定します。 受け入れられる値は、以下のとおりです。
- 単位指定のない数値: レートは、指定されたワード数/分に変更されます。 例えば、値
50
は、1 分あたり 50 ワードの発話率を示します。 数値は絶対値です。1 分当たりのワード数の相対的な増加または減少を指定することはできません。 - *相対的な変化率:*デフォルトのスピーキングレートから相対的に変化する数値。 数字の前に「
+
(増加)または「-
(減少)が付き、その後に「%
(パーセント記号)が付く。 符号なしの数値の後に%
が続く場合は、正の増加と解釈されます。 例えば、+10%
や10%
などです。 音声のデフォルトの発話速度は、値0%
を渡すことに相当します。 - *キーワード:*以下の6つのキーワードのうちの1つで、スピーキングレートを対応する定義済みの値に変更する:
default
サービスのデフォルトのスピーキングレートを使用する。x-slow
。速度を 50% 下げます。slow
。速度を 25% 下げます。medium
。default
と同じ動作が行われます。fast
。速度を 25% 上げます。x-fast
。速度を 50% 上げます。
感情表出ニューラル音声でサポートされるのは、 rate
属性のパーセンテージ値のみです。 1 分当たりの単語やキーワードはサポートされません。
アプリケーションで何が機能するかを判別する最良の方法は、パーセンテージに基づいて調整を行い、さまざまな値を試すことです。 さらに重要な変更を行う前に、5% または 10% の増分変更を試行してください。
<prosody rate="50">Set speaking rate to 50 words per minute</prosody>
<prosody rate="-5%">Decrease speaking rate by 5 percent</prosody>
<prosody rate="+5%">Increase speaking rate by 5 percent</prosody>
<prosody rate="slow">Decrease speaking rate by 25%</prosody>
<prosody rate="fast">Increase speaking rate by 25%</prosody>
<say-as>
エレメント
<say-as>
エレメントは、エレメント内に含まれるテキストのタイプに関する情報を提供し、テキストをレンダリングするための詳細レベルを指定します。
- この要素には、1 つの必須属性
interpret-as
があります。この属性は、囲まれているテキストの解釈方法を指定します。 - このエレメントには、
format
とdetail
の 2 つのオプション属性があります。これらは、以下の例に示すように、interpret-as
属性の特定の値でのみ使用されます。
このサービスは、以下の言語で<say-as>
エレメントをサポートします。
- このサービスは、米国英語の
<say-as>
エレメントを完全にサポートします。 - その他のほとんどの言語の場合、サービスでは、要素の
digits
属性とletters
属性のみがサポートされます。 - 日本語の場合、サービスがサポートするのは
digits
属性のみです。 サービスは、数字のストリングに含まれている非数字を無視します。
サービスの英字、数字、および英数字のストリングのデフォルトの発音は、言語によって異なり、各言語には独自のルールがあります。 <say-as>
エレメントを使用すると、ストリングの発音方法を制御できます。これには、 letters
エレメントと digits
エレメントを使用してストリングを個々の文字としてスペルアウトするかどうかなどが含まれます。
ドイツ語の場合は、サービスが文字を発音するペースを制御することもできます。 詳しくは、 ストリングのスペルアウト方法の指定 を参照してください。
interpret-as
属性
interpret-as
属性の許容値と、それぞれの値の例を以下に示します。 このサービスは、interpret-as
属性の引数として以下の値をサポートします。
cardinal
date
digits
interjection
letters
number
ordinal
vxml:boolean
vxml:currency
vxml:date
vxml:time
vxml:digits
vxml:phone
cardinal
値 cardinal
を指定すると、要素内の数字が基数として発話されます。 以下の例はどちらとも、Super Bowl forty-nine と発話されます。 最初の例は冗長です。指定してもサービスのデフォルトの動作は変わりません。
Super Bowl <say-as interpret-as="cardinal">49</say-as>
Super Bowl <say-as interpret-as="cardinal">XLIX</say-as>
date
値 date
を指定すると、関連する format
属性で指定したフォーマットに従って、要素内の日付が発話されます。 format
属性は、値 date
には必須です。 format
を指定しなくても、サービスは日付を発音しようとします。 以下の例では、指定された日付を指定フォーマットで発話します (ここで、d
、m
、および
y
はそれぞれ日、月、および年を表します)。
<say-as interpret-as="date" format="mdy">12/17/2005</say-as>
<say-as interpret-as="date" format="ymd">2005/12/17</say-as>
<say-as interpret-as="date" format="dmy">17/12/2005</say-as>
<say-as interpret-as="date" format="ydm">2005/17/12</say-as>
<say-as interpret-as="date" format="my">12/2005</say-as>
<say-as interpret-as="date" format="md">12/17</say-as>
<say-as interpret-as="date" format="ym">2005/12</say-as>
digits
値 digits
を指定すると、要素内の数値に含まれている数字が発話されます。 (また、値は、囲まれたストリングに含まれるすべての英字を個別に発音します。) 以下の例では、123456 の数字が 1 つずつ発話されます。
<say-as interpret-as="digits">123456</say-as>
interjection
interjection
属性は、 Text to Speech サービスに固有の SSML 拡張機能です。 これは、表現型のニューラル音声でのみ使用できます。
表現的なニューラル音声を使用すると、 aha
、 hmm
、 huh
、 oh
、 uh
、 uh-huh
、および um
の各インタージェクションが自動的に強調されます。 interjection
値を使用して、サービスのインタージェクション aha
および oh
の強調を有効または無効にすることができます。 true
または false
の値を指定して追加の enabled
属性を組み込み、インタージェクションを有効または無効にします。
以下の例では、テキスト内の aha
と oh
の両方のインターフェースの強調を使用不可にします。
<say-as interpret-as='interjection' enabled='false'>Oh</say-as>, in addition, the <say-as interpret-as='interjection' enabled='false'>aha</say-as> wasp is endemic to Australia.
詳しくは、 インターフェースの強調 を参照してください。
letters
値 letters
を指定すると、要素内の単語に含まれている文字が読み上げられます。 (また、値は、囲まれたストリングに含まれるすべての数字を個別に発音します。) 以下の例では、単語 hello を構成する文字が 1 つずつ読み上げられます。
<say-as interpret-as="letters">Hello</say-as>
number
number
値は、cardinal
値および ordinal
値に代わるものです。 オプションの format
属性を使用して、一連の数字の解釈方法を指定できます。 最初の例は、format
属性を省略して、数字を基数値として発音しています。 2 番目の例は、数字を cardinal
値として発音するように明示的に指定しています。
3 番目の例は、数字を ordinal
値として発音するように指定しています。
<say-as interpret-as="number">123456</say-as>
<say-as interpret-as="number" format="cardinal">123456</say-as>
<say-as interpret-as="number" format="ordinal">123456</say-as>
telephone
属性に値 format
を指定することもできます。 一連の数字を電話番号として発音する 2 つの異なる方法を、以下の例で表しています。 区切り記号を含めて数字を発音するためには、オプションの punctuation
属性に値 detail
を指定します。
<say-as interpret-as="number" format="telephone">555-555-5555</say-as>
<say-as interpret-as="number" format="telephone" detail="punctuation">555-555-5555</say-as>
ordinal
値 ordinal
を指定すると、要素内の数字の序数値が発話されます。 以下の例では、second first と発話されます。
<say-as interpret-as="ordinal">2</say-as>
<say-as interpret-as="ordinal">1</say-as>
vxml:boolean
値 vxml:boolean
を指定すると、要素内の値が * か * かに応じて、yes または true
nofalse
が発話されます。
<say-as interpret-as="vxml:boolean">true</say-as>
<say-as interpret-as="vxml:boolean">false</say-as>
vxml:currency
値 vxml:currency
は、通貨値の合成を制御するために使用します。 ストリングは UUUmm.nn
のフォーマットで記述する必要があります。ここで、UUU
は、ISO 標準 4217 で規定されている 3 文字の通貨標識であり、mm.nn
は数量です。 以下の例では、forty-five dollars and thirty cents と読み上げられます。
<say-as interpret-as="vxml:currency">USD45.30</say-as>
指定した数値の小数点以下の桁数が 3 以上である場合、金額は、10 進数と、それに続く通貨標識として合成されます。 3 文字の通過標識が存在しない場合は、金額は、10 進数としてのみ合成され、通貨タイプは発音されません。 以下の例では、forty-five point three two nine US dollars と発話されます。
<say-as interpret-as="vxml:currency">USD45.329</say-as>
vxml:date
値 vxml:date
は、値 date
と同様に動作しますが、フォーマットは YYYYMMDD
として事前定義されています。 日、月、または年の値が不明な場合、またはそれらの値が発話されないようにする場合は、値を?
(疑問符) に置き換えます。 2 番目と 3 番目の例には疑問符が含まれています。
<say-as interpret-as="vxml:date">20050720</say-as>
<say-as interpret-as="vxml:date">????0720</say-as>
<say-as interpret-as="vxml:date">200507??</say-as>
vxml:time
'vxml:time'値は、関連するformat属性で与えられたフォーマットに従って、要素内の時刻を話します。 時間値にはformat属性が必要です。 形式は4桁で、接尾辞なし、"a"、"p"、"h "のいずれかでなければならない。 d、m、yは日、月、年を表す。
<say-as interpret-as="vxml:time">1230</say-as>
<say-as interpret-as="vxml:time">1230a</say-as>
<say-as interpret-as="vxml:time">1230p</say-as>
<say-as interpret-as="vxml:time">0100h</say-as>
vxml:digits
vxml:digits
値は、digits
値と同じ機能を提供します。
vxml:phone
値 vxml:phone
を指定すると、数字と区切り記号の両方を含めて電話番号が発話されます。 これは、number
値を使用して telephone
(format
属性) および punctuation
(detail
属性) を指定することと同じです。
<say-as interpret-as="vxml:phone">555-555-5555</say-as>
<speak>
エレメント
サービスは SSML フラグメント (完全な XML ヘッダーが含まれていない SSML 要素) をサポートしています。 <speak>
要素は、サービスに渡す SSML ではオプションです。
<speak>
要素は、SSML 文書のルート要素です。 有効な属性は、以下のとおりです。
version
。SSML 仕様を指定する必須属性です。 受け入れられる値は1.0
です。xml:lang
。サービスに必要ありません。 この要素を使用するときはこの属性を省略します。 この属性を使用して音声合成要求の言語を変更することはできないことに注意してください。xml:base
。効果がありません。xmlns
。サービスに必要ありません。 この要素を使用するときはこの属性を省略します。
<speak version="1.1">
The text to be spoken.
</speak>
<sub>
エレメント
<sub>
要素は、alias
属性によって指定されたテキストが、音声合成時に要素内で囲まれたテキストを置き換えることを示します。 alias
属性は、この要素の唯一の属性であり、必須です。
<sub alias="International Business Machines">IBM</sub>
<voice>
エレメント
この<voice>
エレメントは、音声の変更を要求します。 これはサポートされていません。