SSML ドキュメントの構造とイベント

音声合成マークアップ言語 (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 要素には、テキストと、要素 audiobreakpsphonemeprosodysay-as、および sub を含めることもできます。
  • bookmark: この要素には、テキストやその他の要素を含めることはできません。
  • break: この要素には、テキストやその他の要素を含めることはできません。
  • emphasis: この要素には、テキストと、要素 audiobreakemphasislangphonemeprosodysay-as、および sub を含めることができます。
  • lang: この要素には、mstts:backgroundaudiovoicespeak 以外のすべての要素を含めることができます。
  • lexicon: この要素には、テキストやその他の要素を含めることはできません。
  • math: この要素に含めることができるのはテキスト要素と MathML 要素のみです。
  • mstts:audioduration: この要素には、テキストやその他の要素を含めることはできません。
  • mstts:backgroundaudio: この要素には、テキストやその他の要素を含めることはできません。
  • mstts:embedding: この要素には、テキストと、要素 audiobreakemphasislangphonemeprosodysay-as、および sub を含めることができます。
  • mstts:express-as: この要素には、テキストと、要素 audiobreakemphasislangphonemeprosodysay-as、および sub を含めることができます。
  • mstts:silence: この要素には、テキストやその他の要素を含めることはできません。
  • mstts:viseme: この要素には、テキストやその他の要素を含めることはできません。
  • p: この要素には、テキストと、要素 audiobreakphonemeprosodysay-assubmstts:express-as、および s を含めることができます。
  • phoneme: この要素に含めることができるのはテキストのみで、その他の要素を含めることはできません。
  • prosody: この要素には、テキストと、要素 audiobreakpphonemeprosodysay-assub、および s を含めることができます。
  • s: この要素には、テキストと、要素 audiobreakphonemeprosodysay-asmstts:express-as、および sub を含めることができます。
  • say-as: この要素に含めることができるのはテキストのみで、その他の要素を含めることはできません。
  • sub: この要素に含めることができるのはテキストのみで、その他の要素を含めることはできません。
  • speak: SSML ドキュメントのルート要素。 この要素には、要素 mstts:backgroundaudiovoice を含めることができます。
  • voice: この要素には、mstts:backgroundaudiospeak 以外のすべての要素を含めることができます。

音声サービスは、ピリオドの後の一時停止、または文が疑問符で終わるときの正しいイントネーションの使用など、句読点を自動的に適切に処理します。

特殊文字

SSML 要素の値またはテキスト内で文字 &<> を使用するには、エンティティ形式を使用する必要があります。 具体的には、& の代わりに &amp; を使用し、< の代わりに &lt;> の代わりに &gt; を使用する必要があります。 それ以外の場合、SSML は正しく解析されません。

たとえば、green & yellow ではなく、green &amp; 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 &amp; 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 次のいずれかの値を使用した、一時停止の相対的な時間:
  • x-weak
  • weak
  • medium (既定値)
  • strong
  • x-strong
省略可能
time 秒 (2s など) またはミリ秒 (500ms など) での、一時停止の絶対時間。 有効な値の範囲は 0 から 5000 ミリ秒です。 サポートされている最大値より大きい値を設定した場合、サービスは 5000ms を使用します。 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:silencebreak の違いの 1 つは、break 要素はテキスト内の任意の場所に挿入できることです。 無音は、入力テキストの先頭または末尾、または隣接する 2 つの文の境界でのみ機能します。

無音設定は、それを囲んでいる voice 要素内のすべての入力テキストに適用されます。 無音設定をもう一度リセットまたは変更するには、同じ音声または別の音声を含む新しい voice 要素を使用する必要があります。

mstts:silence 要素の属性の使用方法を次の表に示します。

属性 説明 必須または省略可能
type 無音を追加する場所と方法を指定します。 次の無音の種類がサポートされています。
  • Leading – テキストの先頭に追加の無音。 設定する値は、テキストの開始前の自然な無音に追加されます。
  • Leading-exact – テキストの先頭の無音。 値は無音の絶対的な長さです。
  • Tailing – テキストの末尾に追加の無音。 設定する値は、最後の単語の後の自然な無音に追加されます。
  • Tailing-exact – テキストの末尾の無音。 値は無音の絶対的な長さです。
  • Sentenceboundary - 隣接する文の間に追加の無音。 この種類の実際の無音長には、前の文の最後の単語の後の自然な無音、この種類に設定する値、次の文の先頭の単語の前の自然な無音が含まれます。
  • Sentenceboundary-exact - 隣接する文の間の無音。 値は無音の絶対的な長さです。
  • Comma-exact – 半角または全角形式のコンマで無音。 値は無音の絶対的な長さです。
  • Semicolon-exact – 半角または全角形式のセミコロンで無音。 値は無音の絶対的な長さです。
  • Enumerationcomma-exact – 全角形式の列挙コンマで無音。 値は無音の絶対的な長さです。

絶対的な無音の種類 (-exact サフィックス付き) は、それ以外の自然な先頭または末尾の無音を置き換えます。 絶対的な無音の種類は、対応する非絶対的な種類よりも優先されます。 たとえば、LeadingLeading-exact の両方の種類を設定すると、Leading-exact の種類が有効になります。 WordBoundary イベントは、句読点関連の無音設定 (Comma-exactSemicolon-exactEnumerationcomma-exact など) よりも優先されます。 WordBoundary イベントと句読点関連の無音設定の両方を使用すると、句読点関連の無音設定は有効になりません。
必須
Value 秒 (2s など) またはミリ秒 (500ms など) での、一時停止の時間。 有効な値の範囲は 0 から 5000 ミリ秒です。 サポートされている最大値より大きい値を設定した場合、サービスは 5000ms を使用します。 必須

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>

段落や文を指定する

ps の要素は、それぞれ段落と文を表すために使用します。 これらの要素がない場合は、音声サービスにより 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 – 口形素 ID とオーディオ オフセット出力を使用したリップシンク
  • FacialExpression – ブレンド シェイプ出力
必須

注意

現時点では、redlips_fronten-US ロケールでのニューラル音声のみをサポートし、FacialExpressionen-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>

次の手順