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
、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>
引号、撇号和括号等特殊字符必须经过转义。 有关详细信息,请参阅可扩展标记语言 (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
元素必须至少包含一个语音元素。
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 到 20000 毫秒。 如果设置的值大于支持的最大值,则服务将使用 20000ms 。 如果设置了 time 属性,则会忽略 strength 属性。 |
可选 |
下面是有关该 strength
属性的更多详细信息。
Strength | 相对持续时间 |
---|---|
x-weak | 250 毫秒 |
weak | 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 到 20000 毫秒。 如果设置的值大于支持的最大值,则服务将使用 20000ms 。 |
必须 |
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 元素
可以使用 SSML 中的 bookmark
元素来引用文本或标签序列中的特定位置。 然后使用语音 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
元素属性支持的值。
此 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>