SSML使用说明
SSML简介
语音合成标记语言(Speech Synthesis Markup Language, SSML)是一种基于XML的标记语言,用于提供语音合成的文本注释。用户通过给输入文本加上SSML中预先定义的标签,可以很好地指导合成器按照其需求进行操作。在接收到完整的SSML输入后,引擎对文本所有标签进行解析,再按长句(以句号、问好、感叹号结尾的句子称之为长句)输入后端合成声音。使用SSML版本的合成,需要在引擎初始化之前,设置usessml参数为1,该参数默认为0。
使用方式
说明:
- 目前只有中文合成支持SSML功能
- 所有文本需放在<speak></speak>标签之内;每个语音合成任务只能包含一个<speak></speak>标签。
语法:
<?xml version="1.0" encoding="utf8"?><speak>需要调用SSML标签的文本</speak>
常用标签
w 标签
一对< w>< /w>标签中的内容会作为一个词语连读,语句有停顿错误的情况可以使用此标签调整。
示例:
原句:这群山里的娃娃。
原有停顿: 这| 群山| 里的| 娃娃。
使用 ssml 调整:
<?xml version="1.0" encoding="utf8"?><speak xml:lang="cn"><p><w>这群</w><w>山里
的</w>娃娃。</p></speak>
注释:<w></w>标记出“这群” “山里的”分别是一个词,从而消除了停顿错误
break 标签
在音频中加入指定时长的停顿。
示例:
原句:我有一条蓝色的绣花短袖长裙。
使用ssml调整:
<?xml version="1.0" encoding="utf8"?><speak xml:lang="cn"><p> 我 有 一 条
<break></break>蓝色的绣花短袖长裙。</p></speak>
<speak xml:lang="cn">
<p>
<break time="3000ms"></break>今天天气非常好,我们打算出海去打鱼
<break time="2s"></break>。
</p>
</speak>
注释:<break></break>的作用是在“一条”和“蓝色的”之间加入了明显停顿。
特殊说明:break 只对部分发音人(voiceId)起作用,一般不建议使用。
phoneme 标签
指明标签内文本的读音。目前仅支持汉语拼音,读音通过 py 属性给出。
示例:
原句: 未来三年中将增长两倍。
问题:多音字“将”被读为”jiang4”(四声)
使用 ssml 调整:
<?xml version="1.0" encoding="utf8"?><speak xml:lang="cn"><p>未来三年中<phoneme
py="jiang1">将</phoneme>增长两倍。</p></speak>
注释:<phoneme py="jiang1">将</phoneme>指定将的发音为”jiang1“,拼音1-4代表声
调里的一声到四声,5代表轻声。
sayas 标签
指明文本中数字串和字母串的发音方式,属性 type 可选值 spell-out(字母逐个读出),
number:digits(数字逐个读出),number:ordinal(数字按照数值发音)。
原句:我的设备号是 27AM5
问题:“27“被读为二十七, “AM”读成单词”am“
使用 ssml 调整:
<?xml version="1.0" encoding="utf8"?><speak xml:lang="cn"><p> 我 使 用 的 设 备 号 是
<sayas type="number:digits">27</sayas><sayas type="spell-out">AM</sayas><sayas
type="number:digits">53</sayas>,你使用过这种设备吗?</p></speak>
注释:<sayas type="number:digits">27</sayas>标记 “27“读为二七;<sayas type="spell-out">AM</sayas>标
记”AM“按照字母逐个读出。
sub 标签
使用指定的文本替换原有的文本的发音,如果指定文本为空,则不发音。使用sub元素替换原来文本中的内容,或者是让一段文本不发音。
属性 | 说明 | 是否支持 |
alisa | 必需,指定替换后的文本 | 是 |
<?xml version="1.0" encoding="GB2312"?>
<speak xml:lang="cn">
<sentence>
中国是<sub alias="世界贸易组织">WTO</sub>的成员
</sentence>
</speak>
总结
同一句中,上述标签可结合使用,对于未用标签标注的部分,系统将按照正常流程处理。