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>
下列清單中會說明每個元素中允許的內容範例:
audio
:audio
元素的內文可以包含純文字或 SSML 標記 (如果音訊檔案無法使用或無法播放的話)。 元素audio
也可以包含文字和下列元素:audio
、phoneme
prosody
s
p
break
、、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:附錄 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 |
使用下列其中一個值來暫停的相對持續時間:
|
選擇性 |
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:silence
和 break
之間的其中一個差異是可以在文字中的任何位置插入 break
元素。 沉默只能在輸入文字的開頭或結尾,或在兩個相鄰句子的界限上運作。
無聲設定會套用至其封入 voice
專案內的所有輸入文字。 若要再次重設或變更靜音設定,您必須使用具有相同語音或不同語音的新 voice
元素。
下表說明 mstts:silence
元素屬性的使用方式。
屬性 | 描述 | 必要或選用 |
---|---|---|
type |
指定新增無聲的位置和方式。 支援下列無聲類型:
絕對無聲類型 (後 -exact 綴) 會取代任何其他自然前置或尾端的沉默。 絕對無聲類型優先於對應的非絕對類型。 例如,如果您同時設定 Leading 和 Leading-exact 類型,類型 Leading-exact 就會生效。 WordBoundary 事件優先於標點符號相關的靜音設定,包括 Comma-exact 、Semicolon-exact 或 Enumerationcomma-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>
指定段落和句子
p
和 s
元素分別用來表示段落和句子。 如果沒有這兩個元素,語音服務會自動判斷 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
僅支援地區設定中的en-US
神經語音,並支援 FacialExpression
和 zh-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>
下一步
意見反映
https://aka.ms/ContentUserFeedback。
即將推出:我們會在 2024 年淘汰 GitHub 問題,並以全新的意見反應系統取代並作為內容意見反應的渠道。 如需更多資訊,請參閱:提交及檢視以下的意見反映: