SSML使用文档

语音合成标记语言(SSML:Speech Synthesis Markup Language),是提供语音合成的文本注释。

DuerOS会将技能返回的response消息里面的文本信息按照一定的规则转化成语音信息进行播放。转化后的语音有着相同特征,如语调、语速、停顿等都相同。但是在不同的场景下,可能需要不同的语音效果。例如在朗读儿童故事《白雪公主》时,公主说话的声音和小矮人说话的声音,在语调、语速、音色上都不同。这种情况下,开发者可以通过使用SSML标签得到不同的语音效果。

DuerOS支持基础标签和扩展标签两种。基础标签里的所有标签都是SSML标准标签,相当于SSML标签的子集。扩展标签指DuerOS使用标准SSML语言定制的标签。

基础标签

基础标签包含speakaudiosay-assubsilence等标签。

speak标签

是SSML的根标签,所有的标签(基础标签和扩展标签)和文本都要包含在<speak></speak>标签内。

audio标签

在合成语音中引入外部的音频,音频以服务器可以访问的地址给出,目前仅支持16K采样,16bit,单声道,44字节头的wav文件格式。

属性描述

属性名称 描述
src 音频地址。仅支持百度云BOS的音频地址。

使用示例

<speak>
播放周杰伦的听妈妈的话。<audio src="http://tis-audio.bj.bcebos.com/tingmamadehua.wav?authorization=bce-auth-v1%2F96d3a871ef2a41ae92abc41ae6acf932%2F2018-03-05T02%3A31%3A13Z%2F-1%2Fhost%2F792bff900a458fd52c07893f27957263a3b2719ee38e1a79212bd980ddd80156"></audio> 播放完了,好听吗?
</speak>

say-as标签

设置合成语音中数字、符号的读法,属性是type 。

属性描述

属性名称 描述
number: ordinal 整数读法。
number: digits 数字串读法。
number: score 比分读法。
number: fraction 分数读法。
telephone 电话号码读法。
number
  • 整数读法。
  • 负整数读法。
  • 浮点数读法。
  • 负浮点数读法。
  • 比分读法。
  • 分数读法。
  • 负分数读法。
  • 科学计数读法。

使用示例

  • 一百二十三。
    <say-as type="number:ordinal">123</say-as>
  • 一二三。
    <say-as type="number:digits">123</say-as>
  • 十二比一百二十三。
    <say-as type="number:score">12:123</say-as>
  • 一百二十三分之十二。
    <say-as type="number:fraction">12/123</say-as>
  • 幺幺零。
    <say-as type="telephone">110</say-as>
  • 一百二十三。
    <say-as type="number">123</say-as>
  • 负一百二十三。
    <say-as type="number">-123</say-as>
  • 一百二十三点四五。
    <say-as type="number">123.45</say-as>
  • 负一百二十三点四五。
    <say-as type="number">-123.45</say-as>
  • 一百二十三比四十五。
    <say-as type="number">123:45</say-as>
  • 负一百二十三比四十五。
    <say-as type="number">-123:45</say-as>
  • 三乘以十的十一次幂。
    <say-as type="number">3e+11</say-as>
  • 三乘以十的负十一次幂。
    <say-as type="number">3e-11</say-as>
  • 一点二三乘以十的十一次幂。
    <say-as type="number">1.23e+11</say-as>
  • 一点二三乘以十的负十一次幂。
    <say-as type="number">1.23e-11</say-as>
  • 三乘以十的七次幂。
    <say-as type="number">3E+07</say-as>
  • 三乘以十的负七次幂。
    <say-as type="number">3e-07</say-as>
  • 一点二三乘以十的七次幂。
    <say-as type="number">1.23e+07</say-as>
  • 一点二三乘以十的负七次幂。
    <say-as type="number">1.23e-07</say-as>

sub标签

替换合成语音中部分词语的发音。

属性描述

属性名称 描述
alias 替换词语后的发音。支持中文和英文,不支持数字。

使用示例

用“胃溃疡”替换单词“GU”的发音,下面的语句读音是“报告单上显示你得了胃溃疡”。

<speak>
    报告单上显示你得了<sub alias="胃溃疡">Gu</sub>。
</speak> 

silence标签

设置静音,在文本播报的开头或结尾增加静音片段。

属性描述

属性名称 描述
time 设置静音时间,支持单位s、ms,最大10s,当设置静音时间超过10s时,统一按10s处理。

使用示例

<speak>
走廊里传来脚步声,乱哄哄的教室突然安静下来。<silence time="5s"></silence>所有人都盯着教室门。
</speak>

扩展标签

background标签

设置合成语音的背景音。目前仅支持16K采样、16bit、单声道、44字节头的wav格式。

属性描述

属性名称 描述
src 音频地址,仅支持百度云BOS的音频地址。
repeat 音频文件是否重复播放。

使用示例

<speak>    
<background src="http://tis-audio.bj.bcebos.com/lantern_festival.wav?authorization=bce-auth-v1%2F96d3a871ef2a41ae92abc41ae6acf932%2F2018-03-05T02%3A31%3A01Z%2F-1%2Fhost%2F40a27013eb5244b349301dc1775747ccf3254a1e65b29a6109f38a4479f4cc29" repeat="yes">欢迎使用百度语音合成服务</background>。   
</speak>     

say-as标签

设置合成语音中英文单词读音方式。

属性描述

属性名称 描述
interpret-as
  • as-character:按字母方式读。
  • as-word:按单词方式读。

使用示例

<speak>
美国宇航局简称读作<say-as  interpret-as="as-word">NASA</say-as>还是<say-as  interpret-as="as-character">NASA</say-as>。
</speak>

注意事项

该标签仅对英文有效。

使用限制

在使用SSML标签时,请注意以下限制条件。

  • 标签audio不能包含background标签。
  • 标签audio、background不支持自我嵌套。
  • 标签sub、say-as不能包含其他任何标签,会引发解析错误。

相关参考

SSML应用文件存储

一些SSML标签使用时需要链接文件、播放文件,如audio标签、background标签。目前SSML标签只支持对百度网址的文件访问,推荐使用百度云对象存储BOS存放文件。 下面以audio标签为例,介绍如何在百度云BOS上存储文件及SSML标签如何引用文件。

1.登录百度云对象存储BOS。如果你没有百度账号,请先注册。

2.开通BOS服务。 具体操作步骤请参考开通BOS服务指南,BOS是付费项目,请根据需要选择付费类型。

3.点击新建Bucket。

图片

4.填写新建的Bucket信息。

  • 按要求填写Bucket名称。
  • 选择所属区域。建议根据技能所在区就近存储。
  • 根据技能需要选择合适的存储类型。目前支持标准存储、低频存储、冷存储三种类型,存储类型详细信息请参考存储类型的特点
  • 选择读写权限。SSML标签链接的文件不能选择私有权限,可以选择公共读或公共读写。

图片

5.上传文件。选择需要上传的文件,点击上传。

图片

6.获取文件链接地址。

图片

7.在audio标签加入文件链接地址。

<speak>
播放清晨<audio src="http://ssml-example.bj.bcebos.com/qingchen.wav"></audio>,这是一首让你每次聆听都会有不同感动的音乐,早晨若少了纯真鸟语,这一天洒下的阳光都是寂寞的。 
</speak>

了解更多百度云BOS存储内容,请参考百度云对象存储BOS指南