SSML 文件結構和事件

具有輸入文字的語音合成標記語言 (SSML) 會判斷文字轉換語音輸出的結構、內容和其他特性。 例如,您可以使用 SSML 來定義段落、句子、中斷或暫停或靜音。 您可以使用書籤或描聲影像等事件標籤來換行文字,以供應用程式稍後處理。

如需如何在 SSML 文件中建構元素的詳細資訊,請參閱下列各節。

文件結構

SSML 的語音服務實作是以萬維網聯合會的 語音合成標記語言 1.0 版為基礎。 語音支援的元素可能與 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>

下列清單中會說明每個元素中允許的內容範例:

  • audioaudio 元素的內文可以包含純文字或 SSML 標記 (如果音訊檔案無法使用或無法播放的話)。 元素audio也可以包含文字和下列元素:audiophonemeprosodyspbreak、、 say-as和 。sub
  • bookmark:此元素不可包含文字或任何其他元素。
  • break:此元素不可包含文字或任何其他元素。
  • emphasis:此元素可包含文字和下列元素:audiobreakemphasislangphonemeprosodysay-assub
  • lang:此元素可包含除了 mstts:backgroundaudiovoicespeak 以外的所有其他元素。
  • lexicon:此元素不可包含文字或任何其他元素。
  • math:此元素只可包含文字和 MathML 元素。
  • mstts:audioduration:此元素不可包含文字或任何其他元素。
  • mstts:backgroundaudio:此元素不可包含文字或任何其他元素。
  • mstts:embedding:此元素可包含文字和下列元素:audiobreakemphasislangphonemeprosodysay-assub
  • mstts:express-as:此元素可包含文字和下列元素:audiobreakemphasislangphonemeprosodysay-assub
  • mstts:silence:此元素不可包含文字或任何其他元素。
  • mstts:viseme:此元素不可包含文字或任何其他元素。
  • p:此元素可包含文字和下列元素:audiobreakphonemeprosodysay-assubmstts:express-ass
  • phoneme:此元素只可包含文字,且不可包含其他元素。
  • prosody:此元素可包含文字和下列元素:audiobreakpphonemeprosodysay-assubs
  • s:此元素可包含文字和下列元素:audiobreakphonemeprosodysay-asmstts:express-assub
  • say-as:此元素只可包含文字,且不可包含其他元素。
  • sub:此元素只可包含文字,且不可包含其他元素。
  • speak:SSML 文件的根項目。 此元素可包含下列元素:mstts:backgroundaudiovoice
  • voice:此元素可包含除了 mstts:backgroundaudiospeak 以外的所有其他元素。

語音服務會適時自動處理標點符號,例如在遇到句號後暫停,或在句子的結尾為問號時使用正確語調。

特殊字元

若要在 SSML 元素的值或文字中使用字元 &<>,您必須使用實體格式。 具體來說,您必須使用 &amp; 而非 &、使用 &lt; 而非 <,並使用 &gt; 來取代 >。 否則,SSML 不會正確剖析。

例如指定 green &amp; 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 &amp; yellow.
    </voice>
</speak>

特殊字元 (例如引號、撇號和括弧) 必須避免。 如需詳細資訊,請參閱 Extensible Markup Language (XML) 1.0:附錄 D

雙引號或單引號必須括住屬性值。 例如, <prosody volume="90"><prosody volume='90'> 是格式正確的有效元素,但 <prosody volume=90> 無法辨識。

說出根項目

speak 元素包含例如版本、語言和標記詞彙定義等資訊。 speak 元素是根項目,為所有 SSML 文件所必要。 您必須在 speak 元素內指定預設語言,無論語言是否在其他地方 (例如在 lang 元素內) 受到調整。

以下是 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 元素必須包含最少一個語音元素

說話範例

先前已描述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 元素覆寫單字之間中斷或暫停的預設行為。 否則語音服務會自動插入暫停。

下表說明 break 元素屬性的使用方式。

屬性 描述 必要或選用
strength 使用下列其中一個值來暫停的相對持續時間:
  • x-weak
  • 中 (預設值)
  • 強式
  • x-strong
選擇性
time 暫停的絕對持續時間,以秒 (例如 2s) 或毫秒 (例如 500ms) 為單位。 有效值的範圍為 0 到 5000 毫秒。 如果您設定的值大於支援的最大值,服務會使用 5000ms。 如果設定了 time 屬性,則服務會忽略 strength 屬性。 選擇性

以下是屬性的詳細數據 strength

優勢 相對持續時間
X-weak 250 毫秒
500 毫秒
750 毫秒
強式 1,000 毫秒
X-strong 1,250 毫秒

中斷範例

先前已描述break 元素的屬性支援值。 下列三種方式都會新增 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使用 元素在文字前後插入暫停,或在兩個相鄰的句子之間插入。

mstts:silencebreak 之間的其中一個差異是可以在文字中的任何位置插入 break 元素。 沉默只能在輸入文字的開頭或結尾,或在兩個相鄰句子的界限上運作。

無聲設定會套用至其封入 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 靜音範例

先前已描述mstts:silence 元素的屬性支援值。

在此範例中, mstts:silence 用來在兩個句子之間新增 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 文件的結構。

段落和句子範例

下列範例會定義個別包含句子的兩個段落。 在第二個段落中,語音服務會自動判斷句子結構,因為它們未在 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>

Bookmark 元素

您可以使用 bookmark SSML 中的 元素來參考文字或標記序列中的特定位置。 然後使用語音 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>

Viseme 元素

viseme 是語音語音語音的視覺描述。 它定義了一個人說話時臉部和嘴的位置。 您可以使用 mstts:viseme SSML 中的 元素來要求 viseme 輸出。 如需詳細資訊,請參閱 使用viseme取得臉部位置。

viseme 設定會套用至其封入 voice 專案內的所有輸入文字。 若要再次重設或變更描聲影像設定,您必須使用具有相同語音或不同語音的新 voice 元素。

下表說明 viseme 元素屬性的使用方式。

屬性 描述 必要或選用
type 描聲影像輸出的類型。
  • redlips_front – 含 viseme 識別符和音訊位移輸出的唇同步處理
  • FacialExpression – 混合圖形輸出
必要

注意

目前,redlips_front僅支援地區設定中的en-US神經語音,並支援 FacialExpressionzh-CN 地區設定中的en-US神經語音。

描聲影像範例

先前已描述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>

下一步