SSML标记语言

最近更新时间:2023-08-17 16:35:10 前往 Coding 编辑

导出文档

本文为您介绍SSML(Speech Synthesis Markup Language)标记语言的功能、标签使用及示例。

概述

SSML是一种基于XML的语音合成标记语言。与纯文本的合成相比,使用SSML可以充实合成的内容,为最终合成效果带来更多变化。SSML不仅控制语音合成能读什么,更能控制语音合成可以怎么读,包括控制断句分词方式、发音、速度、停顿、声调和音量等特征。

说明 语音合成服务的SSML实现基于W3C的语音合成标记语言版本1.0。但并不支持W3C包含的所有的标记类型,而是从业务角度出发,将支持的标记类型最大程度与业务需求绑定。

使用方式

说明

  • 目前仅中文声音支持SSML功能,详情请参考文档下方各标签的介绍和示例。
  • 所有文本需放在<speak></speak>标签之内,且每个语音合成任务只能包含一个<speak></speak>标签。长文本任务(包括实时长文本合成和异步长文本合成)可以含多个成对的<speak></speak>标签。
  • 长文本语音合成请求可使用多个<speak></speak>标签,及SSML与文本结合的方式,以下示例可以将全文作为一次请求,在长文本语音合成服务中进行合成测试。
    你好吗?<speak>
    <say-as interpret-as="telephone">114</say-as>查询号码 
    <say-as interpret-as="cardinal">123</say-as>开始干。
    加起来为<say-as interpret-as="digits">1234</say-as>。
    <say-as interpret-as="name">张三</say-as>的快递。
    <say-as interpret-as="address">富路国际1号楼3单元304</say-as>
    <say-as interpret-as="name">李四</say-as>
    </speak>我很好。<speak>
    </speak>哈哈哈
  • 文本头部<speak>之前可以省略XML Header。
  • 标签内的文字内容如果包含XML的特殊字符,需要做字符转义,常用的特殊字符对应关系如下。
    • "(双引号)对应:"
    • ' (撇号或单引号)对应:'
    • &(表示和的符号)对应:&
    • <(小于号)对应:<
    • > (大于号)对应:>

标签

<speak>

  • 描述
    <speak>标签是所有待支持SSML标签的根节点。一切需要调用SSML标签的文本都要包含在<speak></speak>中。
  • 语法
     <speak>需要调用SSML标签的文本</speak>
  • 标签关系
    <speak>标签可以包含文本和以下标签:
    • <break>
    • <s>
    • <w>
    • <phoneme>
    • <say-as>

示例

  • 空属性
    <speak>
      需要调用SSML标签的文本
    </speak>

<break>

  • 描述
    用于在文本中插入停顿,该标签是可选标签。
  • 语法
     # 空属性
     <break/>
     # 带time属性
     <break time="string"/>
  • 属性
    说明 使用无属性的标签时,停顿时长为“1s”。
    属性名称属性类型属性值是否必选描述
    timeStringnumbers/numberms以秒/毫秒为单位设置停顿的时长 (如“2s“、“50ms”)。

    numbers:以秒为单位,number取值范围为1, 10的整数。
    numberms:以毫秒为单位,number取值范围为50, 10000的整数。
  • 标签关系
    <break>是空标签,不能包含任何标签。如果SSML结构中存在<s>标签,请把<break>写在<s>里面,表示对当前段落或句子设置停顿。
  • 示例
     <speak>
       请闭上眼睛休息一下<break time="500ms"/>好了,请睁开眼睛。
     </speak>

<w>

  • 描述
    用于表示文本的词语结构,该标签是可选标签。<w>标签内部必须是一个独立的词或短语,这个词或短语不允许混合使用中文和其他外语。
  • 语法
     <w>文本</w>
  • 属性
  • 标签关系
    <w>标签可以包含文本
  • 示例
     <speak>南京市长<w>江大桥</w>今天发表了演讲。</speak>

<s>

  • 描述
    用于表示文本的句子结构,该标签是可选标签。
  • 语法
    <s>文本</s>
  • 属性
    无。
  • 标签关系
    <s>标签可以包含文本和以下标签:
    • <break>
    • <w>
    • <phoneme>
    • <say-as>
  • 示例
    <speak><s>这是第一句话</s><s>这是第二句话</s></speak>

<phoneme>

  • 描述
    用于控制标签内文本的读音,该标签是可选标签。英文文本不支持该标签。
  • 语法
    <phoneme alphabet="string" ph="string">文本</phoneme>
  • 属性
属性名称属性类型属性值是否必选描述
alphabetStringpy“py”表示拼音。
phString标签内文本对应的拼音串拼音用法的赋值规范:字与字的拼音用空格分隔,拼音的数目必须与字数相等。每个拼音由发音和音调组成,音调为1~5的数字编号,其中”5”表示轻声。
  • 标签关系
    <phoneme>标签可以包括文本。
  • 示例
    <speak>
        去<phoneme alphabet="py" ph="dian3 dang4 hang2">典当行</phoneme>把这个玩意<phoneme alphabet="py" ph="dang4 diao4">当掉</phoneme>
    </speak>

<say-as>

  • 描述
    用于指示出标签内文本的信息类型,进而按照该类型的默认发音方式发音。
  • 语法
    <say-as interpret-as="string">文本</say-as>
  • 属性
    属性名称属性类型属性值是否必选描述
    Interpret-asStringcardinal/digits/telephone/name/address/id/characters/punctuation/date/time/currency/measure

    指示出标签内文本的信息类型:
    • cardinal:按整数或小数发音
    • digits:按数字发音。
    • telephone:按电话号码常用方式发音。
    • name:按人名发音。
    • address:按地址发音。
    • id:适用于账户名、昵称等
    • characters:将标签内的文本按字符一一读出。
    • punctuation:将标签内的文本按标点符号的方式读出来。
    • date:按日期发音。
    • time:按时间发音。
    • currency:按金额发音。
    • measure:按计量单位发音。
  • <say-as>类型支持范围
    cardinal
    格式示例中文输出说明
    数字串145一百四十五
    负号+数字串-145负一百四十五
    以逗号分隔3位数字串10,000一万
    负号+以逗号分隔3位数字串-10,124负一万一百二十四
    数字串+小数点+2个零10.00
    负号+数字串+小数点+2个零-110.00负一百一十
    数字串+小数点+数字串79.090七十九点零九零
    负号+数字串+小数点+数字串-79.001负七十九点零零一

    说明:
    整数输入范围:20位以内的正负整数,-99999999999999999999,99999999999999999999
    小数输入范围:对小数点后小数的位数没有特殊限制,建议不超过10位。

digits

格式示例中文输出说明
数字串129090909一二九零九零九零九

说明: 对数字串的长度没有特殊限制,建议不超过20位。当数字串超过10位时,每个数字后插入停顿。

telephone

格式示例中文输出说明
座机号4930286四九三 零二八六支持7~8位座机号,支持空格和“-”作为分隔符。其中,7位座机号支持“3-4”的数字分隔方式;8位座机号支持“4-4”的数字分隔方式。
493 0286四九三 零二八六
493-0286四九三 零二八六
62552560六二五五 二五六零
6255 2560六二五五 二五六零
6255-2560六二五五 二五六零
座机号+分机号4930286-109四九三 零二八六 转幺零九支持1~4位分机号。
4930286转109四九三 零二八六 转幺零九
4930286分机109四九三 零二八六 分机幺零九
4930286分机号109四九三 零二八六 分机号幺零九
区号+座机号01062552560零幺零 六二五五 二五六零支持区号:010、02x、03xx、04xx、05xx、07xx、08xx、09xx。
010 62552560零幺零 六二五五 二五六零
010 6255 2560零幺零 六二五五 二五六零
010 6255-2560零幺零 六二五五 二五六零
010-62552560零幺零 六二五五 二五六零
010-6255-2560零幺零 六二五五 二五六零
(010)62552560零幺零 六二五五 二五六零
03198907098零三幺九 八九零 七零九八
0319-8907098三幺九 八九零 七零九八
区号+座机号+分机号010 62552560-109零幺零 六二五五 二五六零 转幺零九
010-62552560-109零幺零 六二五五 二五六零 转幺零九
(010)62552560-109零幺零 六二五五 二五六零 转幺零九
(010)62552560转109零幺零 六二五五 二五六零 转幺零九
(010)62552560分机109零幺零 六二五五 二五六零 分机幺零九
(010)62552560分机号109零幺零 六二五五 二五六零 分机号幺零九
国家代码+区号+座机号86-010-62791627八六 零幺零 六二七九 幺六二七支持国家代码:86、 (86)、+86、(+86)、0086。并统一读为“八六”。
(86)10-62791627八六 幺零 六二七九 幺六二七
+86-010-62791627八六 零幺零 六二七九 幺六二七
0086-10-62791627八六 幺零 六二七九 幺六二七
(+86)-10-6279 1627八六 幺零 六二七九 幺六二七
国家代码+区号+座机号+分机号(86)21-58118818-207八六 二幺 五八幺幺 八八幺八 转二零七
(86)021-5811-8818-207八六 零二幺 五八幺幺 八八幺八 转二零七
(86)021-58118818转207八六 零二幺 五八幺幺 八八幺八 转二零七
(86)21-5811-8818分机207八六 二幺 五八幺幺 八八幺八 分机二零七
+86-021-58118818分机号207八六 零二幺 五八幺幺 八八幺八分机号二零七
手机号139 0000 5678幺三九 零零零零 五六七八支持11位手机号,支持3-3-5、3-4-4两种数字分隔方式
139-000-05678幺三九 零零零 零五六七八
139 000 05678幺三九 零零零 零五六七八
国家代码+手机号+86-13900005678八六 幺三九 零零零零 五六七八
(+86)-139-0000-5678八六 幺三九 零零零零 五六七八
+8613900005678八六 幺三九 零零零零 五六七八
0086-139 000 05678八六 幺三九 零零零 零五六七八
服务号123幺二三支持常用的服务号。支持以400/800开头的10位服务号,支持以“3-3-4”的数字分隔方式。支持以12530/17951/12593开头的16位号码。
95678九五六七八
4008110510四零零 八幺幺 零五幺零
800-810-8888八零零 八幺零 八八八八
1253013520638377幺二五三零 幺三五 二零六三 八三七七
其他(86)(21)9899-80800-0909八六 二幺 九八九九 八零八零零 零九零九支持“数字串+分隔符(左右括号、-)”方式。

address

格式示例英文输出说明
常用地址格式元和镇嘉元30-9元和镇嘉元三十杠九支持常用地址格式。此处地址指标准的邮寄地址。
市台路388弄1107-1108号市台路三八八弄幺幺零七杠幺幺零八号
华润二十四城六期锦云府3-1-3205华润二十四城六期锦云府三杠一杠三二零五
圣华名都大厦2幢2006室圣华名都大厦二幢二零零六室
五常街道庭院5幢4单元201五常街道庭院五幢四单元二零幺
芙蓉江路150弄19号芙蓉江路幺五零弄十九号
  • 英文文本不支持该标签。

id

格式示例英文输出说明
字符串dell0101D E L L 零 一 零 一大小写英文字符、阿拉伯数字0~9、下划线。输出的空格表示每个字符之间插入停顿,即字符一个一个地读。
myid_1998M Y I D 下划线 一 九 九 八
AiTestA I T E S T

英文文本该标签功能同标签characters。

characters

格式示例中文输出说明
字符串ISBN 1-001-099098-1I S B N 一 杠 零 零 一 杠 零 九 九 零 九 八 杠 一支持中文汉字、大小写英文字符、阿拉伯数字0~9以及部分全角和半角字符。输出的空格表示每个字符之间插入停顿,即字符一个一个地读。标签内的文本如果包含XML的特殊字符,需要做字符转义。
x10b2345_ux 一 零 b 二 三 四 五 下划线 u
v1.0.1v 一 点 零 点 一
版本号2.0版本号二 点 零
苏M MA000苏M M A 零 零 零
空中客车A330空中客车A 三 三 零
型号s01 s02和s03型号s 零 一 s 零二 和s 零 三
空中客车A330空中客车A 三 三 零
αβγ阿尔法 贝塔 伽玛

punctuation

格式示例中文输出说明
标点符号省略号支持常见中英文标点。输出的空格表示每个字符之间插入停顿,即字符一个一个地读。标签内的文本如果包含XML的特殊字符,需要做字符转义。
……省略号
!"#$%&叹号 双引号 井号 dollar 百分号 and
‘()*+单引号 左括号 右括号 星号 加号
,-./:;逗号 杠 点 斜杠 冒号 分号
<=>?@小于 等号 大于 问号 at
[]^_左方括号 反斜线 右方括号 脱字符 下划线

英文文本该标签功能同标签characters。

date

格式示例中文输出说明
xx年71年七一年支持2位和4位年份。其中:2位年份支持60年99年、00年09年、10年19年。4位年份支持1000年1999年、2000年~2099年。
04年零四年
19年一九年
1011年一零一一年
1998年一九九八年
2008年二零零八年
xx年xx月98年4月九八年四月当月份为1到9月时,支持开头带“0”和不带“0”两种写法。例如“1908年4月”和“1908年04月”。
1998年04月一九九八年四月
08年8月零八年八月
2008年8月二零零八年八月
xx年xx月xx日或xx年xx月xx号98年4月23日九八年四月二十三日当日期为1到9日时,支持开头带“0”和不带“0”两种写法。例如“1908年4月8日”和“1908年04月08日”。
1998年04月23日一九九八年四月二十三日
08年8月8号零八年八月八号
2008年08月08号二零零八年八月八号
xx月xx号3月20日三月二十日
08月07号八月七号
年月缩写2018/08二零一八年八月支持“/”、“-”、“.”作为缩写的分隔符。
2018-08二零一八年八月
2018.08二零一八年八月
年月日缩写2018/08/08二零一八年八月八日支持“/”、“-”、“.”作为缩写的分隔符。
2018-8-8二零一八年八月八日
2018.08.08二零一八年八月八日
xx年xx月xx日xx年xx月xx日. xx年xx月xx号xx年xx月xx号04年9月1日~30日零四年九月一日至三十日支持“~”、“-”作为“至”的缩写标志。
2004年09月01号-2008年06月08号二零零四年九月一号至二零零八年六月八号
xx年xx月xx日xx日. xx年xx月xx号xx号04年9月1日~30日零四年九月一日至三十日支持“~”、“-”作为“至”的缩写标志。
2004年09月01号-2008年06月08号二零零四年九月一号至二零零八年六月八号
xx年xx月~xx年xx月01年04月~10年04月零一年四月至一零年四月支持“~”、“-”作为“至”的缩写标志。
2001年04月~2010年04月二零零一年四月至二零一零年四月
xx月xx日xx月xx日或xx月xx号xx月xx号10月1日~10月7日十月一日至十月七日支持“~”、“-”作为“至”的缩写标志。
10月01号~10月07号十月一号至十月七号
xx月xx日xx日或xx月xx号xx号10月1日~7日十月一日至七日支持“~”、“-”作为“至”的缩写标志。
10月01号~07号十月一号至七号
年月日缩写~年月日缩写2018/03/03~2019/01/01二零一八年三月三日至二零一九年一月一日支持“/”、“.”作为缩写的分隔符,支持“~”、“-”作为“至”的缩写标志。
1997.9.9~1998.9.9一九九七年九月九日至一九九八年九月九日
月日缩写~月日缩写10/20~10/31十月二十日至十月三十一日支持“/”、“.”作为缩写的分隔符,支持“~”、“-”作为“至”的缩写标志。
xxxx月xx月xx月1~10月一至十月支持“/”、“.”作为缩写的分隔符,支持“~”、“-”作为“至”的缩写标志。
1月~10月一月至十月
月日年缩写10/20/2018二零一八年十月二十日仅支持4位的年份,仅支持“/”作为日期的分隔符,仅支持“月/日/年”的书写方式。

time

格式示例中文输出说明
时刻12:00十二点支持常用时间和时间范围格式。
12:00:00点十二点
10:20分十点二十分
10:20:30十点二十分三十秒
09:18:14九点十八分十四秒
时刻~时刻11:00~12:00十一点到十二点支持常用时间和时间范围格式。
09:00-14:00九点到十四点
11:00~11:30十一点到十一点三十分
11:00-12:18十一点到十二点十八分
10:30~11:00十点三十分到十一点
09:28-10:00九点二十八分到十点
10:20~11:20十点二十分到十一点二十分
06:00~08:00六点到八点
上午10:20~下午13:30上午十点二十分到下午十三点三十分
时间缩写5:00 am凌晨五点整支持常用时间和时间范围格式。
5:30 am凌晨五点半
5:20:12 am凌晨五点二十分十二秒
7:00 am上午七点整
7:30 AM上午七点半
7:20:12 a.m.上午七点二十分十二秒
07:08:12 A.M.上午七点零八分十二秒
5:00 pm下午五点整
5:30 PM下午五点半
5:20:12 p.m.下午五点二十分十二秒
05:09:12 P.M.下午五点零九分十二秒
9:00 pm晚上九点整
9:30 pm晚上九点半
9:20:12 PM晚上九点二十分十二秒
9:02:12 P.M.晚上九点零二分十二秒
12:00 pm中午十二点整
12:30 p.m.中午十二点半
12:20:12 PM中午十二点二十分十二秒

currency

格式示例中文输出说明
数字+金额标识符12.00 RMB十二人民币支持AUD(澳元) 、CAD(加元)、 HKD(港币)、JPY(日元)、USD(美元)、CHF(瑞士法郎)、NOK(挪威克朗)、SEK(瑞典克朗)、GBP(英镑)、 RMB(人民币)、CNY(元)和EUR(欧元)。支持的数字格式包括:整数、小数以及以逗号分隔的国际写法。
12.50 RMB十二点五零人民币
12,000,000 RMB一千二百万人民币
12,000,000.00 RMB一千二百万人民币
12,000.35 RMB一万两千点三五人民币
金额标识符+数字$12十二美元支持 CAD(加元)、 $(美元)、Fr(法郎)、kr(丹麦克朗)、 £(英镑)、¥(元)和 €(欧元)。支持的数字格式包括:整数、小数以及以逗号分隔的国际写法。
$12.00十二美元
$12.12二点一二美元
$12,000一万两千美元
$12,000.00一万两千美元
$12,000.99一万两千点九九美元
其他默认读法1213一千二百一十三
1213 KML一千二百一十三K M L
1213.00 KML一千二百一十三K M L
1213.9 KML一千二百一十三点九K M L
1,000 KML一千K M L
1,000.00 KML一千K M L
1,000.98 KML一千点九八K M L
12,000一万两千

measure

格式示例中文输出说明
数字+中文单位2片两片支持常见中文单位及单位缩写。
120公顷一百二十公顷
100多毫克一百多毫克
100来米一百来米
100余人一百余人
1厘米20毫米一厘米二十毫米
120.00平方公里一百二十平方公里
数字+单位缩写120.56 cm²一百二十点五六平方厘米支持常见中文单位及单位缩写。
120 ㎡ 56 cm²一百二十平方米五十六平方厘米
100 m 12 cm 6 mm一百米十二厘米六毫米
范围10~15 kg十至十五千克支持常见中文单位及单位缩写。
10.24~789.82亩十点二四至七百八十九点八二亩
10米~15米十米至十五米
10.24 cm~19.08 cm十点二四厘米至十九点零八厘米
数字+单位+"/"+单位10元/斤十元每斤支持常见中文单位及单位缩写。
199~299元/件一百九十九至二百九十九元每件
299.99元/g~399.99元/g二百九十九点九九元每克至三百九十九点九九元每克
其他默认读法12扎十二扎支持常见中文单位及单位缩写。
30 rm三十r m
4万万同胞四万万同胞
12.897微克十二点八九七微克

<say-as>常见计量单位如下表所示。

格式类别中文示例
缩写长度nm(纳米)、μm(微米)、 mm(毫米)、cm(厘米)、m(米)、km(千米)、ft(英尺)、in(英寸)
面积cm²(平方厘米)、㎡(平方米)、km²(平方千米)、SqFt(平方英尺)
体积cm³(立方厘米)、m³(立方米)、km³(立方千米)、mL(毫升)、L(升)、gallon(加仑)
重量μg(微克)、mg(毫克)、g(克)、kg(千克)
时间min(分)、sec(秒)、ms(毫秒)
电磁μA(微安)、mA(毫安)、Ω(欧姆)、Hz(赫兹)、kHz(千赫兹)、MHz(兆赫兹)、GHz(吉赫兹)、V(伏)、kV(千伏)、kWh(千瓦时)
声音dB(分贝)
气压Pa(帕)、kPa(千帕)、Mpa(兆帕)
其它常见单位支持不限于上述类别的中文单位,例如“米”、“秒”、“美元”、“毫升每瓶”等。以及中文量词,例如“架”、“场”、“头”、“部”、“盆”等。

另外还有<say-as>常见符号读法,省略。

标签关系

<say-as>标签可以包括文本

综合示例

  • 重要
    • 示例样音中旁白发音人使用的是定制声音。
    • 语音合成每次合成请求的文本字数不能超过300字符,且只能使用一次<speak>标签,以下示例需要按照<speak>标签分多次进行合成测试。
<speak>
  相传北宋年间,
  <say-as interpret-as="date">1121-10-10</say-as>,
  <say-as interpret-as="address">开封城</say-as>
  郊外的早晨笼罩在一片
  前买买买的欢乐海洋中。一支运货的骡队刚进入城门
  一个肤白貌美
  <phoneme alphabet="py" ph="de5">地</phoneme>
  姑娘便拦下第一排的小哥<say-as interpret-as="name">阿发。</say-as>
</speak>

<speak>
  “亲,本店今日特惠,鞋履全场
  <say-as interpret-as="digits">199</say-as>
  <say-as interpret-as="cardinal">100</say-as>,
  走过路过不要错过”。
</speak>

<speak>
  “不啦不啦,赶着上货,已经
  <say-as interpret-as="time">09:59:59</say-as>
  了,再晚就供应链断裂了”。
</speak>

<speak>
  <say-as interpret-as="name">阿发</say-as>
  擦了擦汗,带着运货队伍,径直穿过闹巷,耳边充斥着各种叫卖声:
</speak>

<speak>
  最新花色现染布匹,买两尺送一尺;
</speak>

<speak>
  爆款纱帽头盔,7天无理由退货;
</speak>

<speak>
  专治大小方脉,调理男人妇人疑难杂症。
</speak>

<speak>
  突然,一匹马不知怎么受了惊,在路上嘶鸣狂奔
  一个孩子也吓坏了,跌跌撞撞地扑向大人怀里
  <break time="50ms"/>大喊道:
</speak>

<speak>
  “妈妈,妈妈!”
</speak>

<speak>
  这时,
  <say-as interpret-as="name">阿发</say-as>
  心想
</speak>

<speak>
  “吓死宝宝了!”
</speak>

<speak>
  于是他赶紧捂住了
  <phoneme alphabet="py" ph="he2 bao1">钱包</phoneme>,
  继续赶路送货。一路上,
  <say-as interpret-as="address">开封城</say-as>
  的繁荣景象给
  <say-as interpret-as="name">阿发</say-as>
  留下了深刻的印象。
</speak>

<speak>
  物换星移,繁华落尽,于是他在购物狂欢之余握起画笔,勾勒出一幅长卷,并命名为《清明上河图》。
</speak>