SSML ドキュメントの構造とイベント
音声合成マークアップ言語 (SSML) と入力テキストにより、テキスト読み上げ出力の構造、コンテンツ、その他の特性が決定されます。 たとえば、SSML を使用して、段落、文、中断または一時停止、あるいは無音を定義できます。 後でアプリケーションで処理できるブックマークや口形素などのイベント タグを使用して、テキストを折り返すことができます。
SSML ドキュメント内の要素を構造化する方法の詳細については、以下のセクションを参照してください。
Note
Azure AI 音声のニューラル (非 HD) 音声に加えて、Azure AI 音声の高精細 (HD) 音声と Azure OpenAI のニューラル (HD と非 HD) 音声も使用できます。 HD 音声のほうが、より幅広いシナリオで高い品質を実現できます。
音声によっては、音声合成マークアップ言語 (SSML) タグが一部しかサポートされていないことがあります。 これに含まれるものとしては、ニューラル テキスト読み上げ HD 音声、パーソナル音声、埋め込み音声があります。
- Azure AI 音声の高精細 (HD) 音声での SSML サポートについては、こちらを参照してください。
- パーソナル音声での SSML サポートについては、こちらを参照してください。
- 埋め込み音声での SSML サポートについては、こちらを参照してください。
ドキュメントの構造
SSML の 音声サービスの実装は、World Wide Web コンソーシアムの音声合成マークアップ言語バージョン 1.0 に基づいています。 Speech でサポートされる要素は、W3C 標準とは異なる場合があります。
各 SSML ドキュメントは、SSML 要素またはタグを使用して作成されます。 これらの要素は、音声、スタイル、ピッチ、韻律、音量などの調整に使用されます。
SSML ドキュメントの基本的な構造と構文の一部を次に示します。
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="string">
<mstts:backgroundaudio src="string" volume="string" fadein="string" fadeout="string"/>
<voice name="string" effect="string">
<audio src="string"></audio>
<bookmark mark="string"/>
<break strength="string" time="string" />
<emphasis level="value"></emphasis>
<lang xml:lang="string"></lang>
<lexicon uri="string"/>
<math xmlns="http://www.w3.org/1998/Math/MathML"></math>
<mstts:audioduration value="string"/>
<mstts:ttsembedding speakerProfileId="string"></mstts:ttsembedding>
<mstts:express-as style="string" styledegree="value" role="string"></mstts:express-as>
<mstts:silence type="string" value="string"/>
<mstts:viseme type="string"/>
<p></p>
<phoneme alphabet="string" ph="string"></phoneme>
<prosody pitch="value" contour="value" range="value" rate="value" volume="value"></prosody>
<s></s>
<say-as interpret-as="string" format="string" detail="string"></say-as>
<sub alias="string"></sub>
</voice>
</speak>
各要素で使用できるコンテンツのいくつかの例を次の一覧に示します。
audio
:audio
要素の本文には、オーディオ ファイルが使用不可の場合や再生できない場合に読み上げられるプレーン テキストや SSML マークアップを含めることができます。 また、audio
要素には、テキストと、要素audio
、break
、p
、s
、phoneme
、prosody
、say-as
、およびsub
を含めることもできます。bookmark
: この要素には、テキストやその他の要素を含めることはできません。break
: この要素には、テキストやその他の要素を含めることはできません。emphasis
: この要素には、テキストと、要素audio
、break
、emphasis
、lang
、phoneme
、prosody
、say-as
、およびsub
を含めることができます。lang
: この要素には、mstts:backgroundaudio
、voice
、speak
以外のすべての要素を含めることができます。lexicon
: この要素には、テキストやその他の要素を含めることはできません。math
: この要素に含めることができるのはテキスト要素と MathML 要素のみです。mstts:audioduration
: この要素には、テキストやその他の要素を含めることはできません。mstts:backgroundaudio
: この要素には、テキストやその他の要素を含めることはできません。mstts:embedding
: この要素には、テキストと、要素audio
、break
、emphasis
、lang
、phoneme
、prosody
、say-as
、およびsub
を含めることができます。mstts:express-as
: この要素には、テキストと、要素audio
、break
、emphasis
、lang
、phoneme
、prosody
、say-as
、およびsub
を含めることができます。mstts:silence
: この要素には、テキストやその他の要素を含めることはできません。mstts:viseme
: この要素には、テキストやその他の要素を含めることはできません。p
: この要素には、テキストと、要素audio
、break
、phoneme
、prosody
、say-as
、sub
、mstts:express-as
、およびs
を含めることができます。phoneme
: この要素に含めることができるのはテキストのみで、その他の要素を含めることはできません。prosody
: この要素には、テキストと、要素audio
、break
、p
、phoneme
、prosody
、say-as
、sub
、およびs
を含めることができます。s
: この要素には、テキストと、要素audio
、break
、phoneme
、prosody
、say-as
、mstts:express-as
、およびsub
を含めることができます。say-as
: この要素に含めることができるのはテキストのみで、その他の要素を含めることはできません。sub
: この要素に含めることができるのはテキストのみで、その他の要素を含めることはできません。speak
: SSML ドキュメントのルート要素。 この要素には、要素mstts:backgroundaudio
とvoice
を含めることができます。voice
: この要素には、mstts:backgroundaudio
とspeak
以外のすべての要素を含めることができます。
音声サービスは、ピリオドの後の一時停止、または文が疑問符で終わるときの正しいイントネーションの使用など、句読点を自動的に適切に処理します。
特殊文字
SSML 要素の値またはテキスト内で文字 &
、<
、>
を使用するには、エンティティ形式を使用する必要があります。 具体的には、&
の代わりに &
を使用し、<
の代わりに <
、>
の代わりに >
を使用する必要があります。 それ以外の場合、SSML は正しく解析されません。
たとえば、green & yellow
ではなく、green & yellow
を指定します。 次の SSML は想定どおりに解析されます。
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
My favorite colors are green & yellow.
</voice>
</speak>
引用符、アポストロフィ、角かっこなどの特殊文字はエスケープする必要があります。 詳細については、「Extensible Markup Language (XML) 1.0: Appendix D」 (拡張マークアップ言語 (XML) 1.0: 付録 D) を参照してください。
属性値は、二重引用符または単一引用符で囲む必要があります。 たとえば、<prosody volume="90">
と <prosody volume='90'>
は適切な形式で有効な要素ですが、<prosody volume=90>
は認識されません。
Speak ルート要素
speak
要素には、バージョン、言語、およびマークアップのボキャブラリ定義などの情報が含まれています。 speak
要素はルート要素であり、すべての SSML ドキュメントで必須です。 言語が他の場所 (lang
要素内など) で調整されているかどうかにかかわらず、既定の言語は speak
要素内に指定する必要があります。
speak
要素の構文を次に示します。
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="string"></speak>
属性 | 説明 | 必須または省略可能 |
---|---|---|
version |
ドキュメント マークアップの解釈に使用される SSML 仕様のバージョンを指定します。 現在のバージョンは "1.0" です。 | 必須 |
xml:lang |
ルート ドキュメントの言語。 値には、en (英語) などの言語コード、または en-US (英語 - 米国) などのロケールを含めることができます。 |
必須 |
xmlns |
SSML ドキュメントのマークアップ ボキャブラリ (要素型と属性名) を定義するドキュメントへの URI。 現在の URI は "http://www.w3.org/2001/10/synthesis"" です。 | 必須 |
speak
要素には、少なくとも 1 つの音声要素が含まれている必要があります。
speak の例
speak
要素の属性でサポートされている値については、前に説明しました。
単一音声の例
この例では、en-US-AvaNeural
音声を使用します。 その他の例については、音声の例を参照してください。
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
This is the text that is spoken.
</voice>
</speak>
中断を追加する
break
要素を使用して、単語間の中断や一時停止の既定の動作をオーバーライドします。 それ以外の場合、Speech Service によって自動的に一時停止が挿入されます。
break
要素の属性の使用方法を次の表に示します。
属性 | 説明 | 必須または省略可能 |
---|---|---|
strength |
次のいずれかの値を使用した、一時停止の相対的な時間:
|
省略可能 |
time |
秒 (2s など) またはミリ秒 (500ms など) での、一時停止の絶対時間。 有効な値の範囲は 0 から 20000 ミリ秒です。 サポートされている最大値より大きい値を設定した場合、サービスは 20000ms を使用します。 time 属性が設定されている場合、strength 属性は無視されます。 |
省略可能 |
strength
属性の詳細を次に示します。
Strength | 相対期間 |
---|---|
x-weak | 250 ミリ秒 |
weak | 500 ミリ秒 |
Medium | 750 ミリ秒 |
Strong | 1,000 ミリ秒 |
x-strong | 1,250 ミリ秒 |
Break の例
break
要素の属性でサポートされている値については、前に説明しました。 次の 3 つの方法ではすべて、750 ミリ秒の中断が追加されます。
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
Welcome <break /> to text to speech.
Welcome <break strength="medium" /> to text to speech.
Welcome <break time="750ms" /> to text to speech.
</voice>
</speak>
無音を追加する
mstts:silence
要素を使用して、テキストの前後または 2 つの隣接する文の間に一時停止を挿入します。
mstts:silence
と break
の違いの 1 つは、break
要素はテキスト内の任意の場所に挿入できることです。 無音は、入力テキストの先頭または末尾、または隣接する 2 つの文の境界でのみ機能します。
無音設定は、それを囲んでいる voice
要素内のすべての入力テキストに適用されます。 無音設定をもう一度リセットまたは変更するには、同じ音声または別の音声を含む新しい voice
要素を使用する必要があります。
mstts:silence
要素の属性の使用方法を次の表に示します。
属性 | 説明 | 必須または省略可能 |
---|---|---|
type |
無音を追加する場所と方法を指定します。 次の無音の種類がサポートされています。
絶対的な無音の種類 ( -exact サフィックス付き) は、それ以外の自然な先頭または末尾の無音を置き換えます。 絶対的な無音の種類は、対応する非絶対的な種類よりも優先されます。 たとえば、Leading と Leading-exact の両方の種類を設定すると、Leading-exact の種類が有効になります。 WordBoundary イベントは、句読点関連の無音設定 (Comma-exact 、Semicolon-exact 、Enumerationcomma-exact など) よりも優先されます。 WordBoundary イベントと句読点関連の無音設定の両方を使用すると、句読点関連の無音設定は有効になりません。 |
必須 |
Value |
秒 (2s など) またはミリ秒 (500ms など) での、一時停止の時間。 有効な値の範囲は 0 から 20000 ミリ秒です。 サポートされている最大値より大きい値を設定した場合、サービスは 20000ms を使用します。 |
必須 |
mstts silence の例
mstts:silence
要素の属性でサポートされている値については、前に説明しました。
この例では、mstts:silence
を使用して、2 つの文の間に 200 ミリ秒の無音を追加します。
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xml:lang="en-US">
<voice name="en-US-AvaNeural">
<mstts:silence type="Sentenceboundary" value="200ms"/>
If we're home schooling, the best we can do is roll with what each day brings and try to have fun along the way.
A good place to start is by trying out the slew of educational apps that are helping children stay happy and smash their schooling at the same time.
</voice>
</speak>
この例では、mstts:silence
を使用して、コンマで 50 ミリ秒の無音、セミコロンで 100 ミリ秒の無音、列挙コンマで 150 ミリ秒の無音を追加します。
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xml:lang="zh-CN">
<voice name="zh-CN-YunxiNeural">
<mstts:silence type="comma-exact" value="50ms"/><mstts:silence type="semicolon-exact" value="100ms"/><mstts:silence type="enumerationcomma-exact" value="150ms"/>你好呀,云希、晓晓;你好呀。
</voice>
</speak>
段落や文を指定する
p
と s
の要素は、それぞれ段落と文を表すために使用します。 これらの要素がない場合は、音声サービスにより SSML ドキュメントの構造が自動的に決定されます。
段落と文の例
次の例では、それぞれが複数の文を含む 2 つの段落を定義します。 2 番目の段落では、文の構造が SSML ドキュメントで定義されていないため、音声サービスにより自動的に決定されます。
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
<p>
<s>Introducing the sentence element.</s>
<s>Used to mark individual sentences.</s>
</p>
<p>
Another simple paragraph.
Sentence structure in this paragraph is not explicitly marked.
</p>
</voice>
</speak>
ブックマーク要素
SSML の bookmark
要素は、テキストまたはタグのシーケンス内の特定の場所を参照するために使用できます。 次に、Speech SDK を使用し、BookmarkReached
イベントをサブスクライブして、オーディオ ストリーム内の各マーカーのオフセットを取得します。 bookmark
要素は読み上げられません。 詳細については、「シンセサイザー イベントをサブスクライブする」を参照してください。
bookmark
要素の属性の使用方法を次の表に示します。
属性 | 説明 | 必須または省略可能 |
---|---|---|
mark |
bookmark 要素の参照テキスト。 |
必須 |
ブックマークの例
bookmark
要素の属性でサポートされている値については、前に説明しました。
例として、次のスニペットのように各花言葉の時間オフセットを調べることができます。
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
We are selling <bookmark mark='flower_1'/>roses and <bookmark mark='flower_2'/>daisies.
</voice>
</speak>
口形素の要素
口形素は、音声言語での音素を視覚的に描写したものです。 人が言葉を話すときの顔と口の位置を定義します。 SSML で mstts:viseme
要素を使用して、口形素出力を要求できます。 詳細については、「口形素による顔の位置の取得」を参照してください。
口形素設定は、それを囲んでいる voice
要素内のすべての入力テキストに適用されます。 口形素設定をもう一度リセットまたは変更するには、同じ音声または別の音声を含む新しい voice
要素を使用する必要があります。
viseme
要素の属性の使用方法を次の表に示します。
属性 | 説明 | 必須または省略可能 |
---|---|---|
type |
口形素出力の型。
|
必須 |
注意
現時点では、redlips_front
は en-US
ロケールでのニューラル音声のみをサポートし、FacialExpression
は en-US
および zh-CN
ロケールでのニューラル音声をサポートしています。
Viseme の例
viseme
要素の属性でサポートされている値については、前に説明しました。
この SSML スニペットは、合成された音声でブレンド シェイプを要求する方法を示しています。
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xml:lang="en-US">
<voice name="en-US-AvaNeural">
<mstts:viseme type="FacialExpression"/>
Rainbow has seven colors: Red, orange, yellow, green, blue, indigo, and violet.
</voice>
</speak>