语音合成标记语言SSML

1 简介

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

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

2 使用方式

说明:

  • 目前只有中文合成支持SSML功能。

  • 所有文本需放在<speak></speak>标签之内;每个语音合成任务只能包含一个<speak></speak>标签。

将带标签的文本作为text参数值,上传至语音合成服务即可,以Java SDK为例:

SpeechSynthesizer synthesizer = new SpeechSynthesizer(client, getSynthesizerListener());String text = "<speak>请闭上眼睛休息一下<break time=\"500ms\"/>好了,请睁开眼睛。</speak>";synthesizer.setText(text);.......

发送给语音合成服务的请求内容如下:

{    "payload": {        "volume": 50,        "sample_rate": 16000,        "format": "wav",        "text": "<speak>请闭上眼睛休息一下<break time=\"500ms\"/>好了,请睁开眼睛。</speak>"    },    "context": {        "sdk": {            "name": "nls-sdk-java",            "version": "2.0.4"        }    },    "header": {        "namespace": "SpeechSynthesizer",        "name": "StartSynthesis",        "message_id": "5fdf78c0dd574b6897f3cb204dd080b3",        "appkey": "fd4******er4",        "task_id": "6e1be78ef5804c50a2c5a8b92de15cb9"    }}

语音合成服务所支持的SSML标签请阅读如下章节,使用方式与上述示例相同。

3 标签

3.1 speak

  1. 描述

    <speak>标签是所有待支持SSML标签的根节点。一切需要调用SSML标签的文本都要包含在<speak></speak>中。

  2. 语法


    1. <speak>需要调用SSML标签的文本</speak>

  3. 属性

    <speak>标签可以使用以下属性:

    属性名称属性类型属性值是否必需描述
    voiceString线上可调用的发音人的名称代号(voice的属性值需要为全小写的voice参数值,如”siyue”)阿里巴巴语音合成特有标签。在合成时,指定发音人,优先级高于接口请求参数voice指定的发音人。(xiaowei和xiaomeng暂不支持在voice中设置)
    encodeTypeStringpcm
    wav
    mp3
    阿里巴巴语音合成特有标签。在合成时,指定音频文件格式,优先级高于接口请求参数format指定的文件格式。
    sampleRateString8000
    16000
    阿里巴巴语音合成特有标签。在合成时,指定音频的采样率,优先级高于接口请求参数sample_rate指定的音频采样率。
    rateString[-500, 500]之间的任意整数。0是默认值,大于0表示加快语速,小于0表示减慢语速。阿里巴巴语音合成特有标签。在合成时,指定音频的语速,优先级高于接口请求参数speech_rate指定的语速。
    pitchString[-500, 500]之间的任意整数。0是默认值,大于0表示升高音高,小于0表示降低音高。阿里巴巴语音合成特有标签。在合成时,指定音频的音高,优先级高于接口请求参数pitch_rate指定的音高。
    volumeString[0, 100]之间的任意整数。50是默认值,大于50表示增大音量,小于50表示减小音量。阿里巴巴语音合成特有标签。在合成时,指定音频的音量,优先级高于接口请求参数volume指定的音量。
    effectStringrobot
    lolita
    lowpass
    echo
    eq
    lpfilter
    hpfilter
    阿里巴巴语音合成特有标签。使用该标签可以使合成的语音产生不同的声音效果。
    • robot是机器人音效。
    • lolita是萝莉音效。
    • lowpass是低通音效。
    • echo是回声音效。
    • eq是均衡器。
    • lpfilter是低通滤波器。
    • hpfilter是高通滤波器。
    备注:
    1. 其中eq、lpfilter、hpfilter是高级效果器,您可以通过effectValue自定义效果器的效果。
    2. 一个SSML只支持一种音效,不可以写多个effect属性。
    3. 选择使用音效功能会增加系统延时。
    effectValueString当用户选择使用高级音效eq, lpfilter, hpfilter时,可以使用该参数修改效果器的默认效果。• eq(均衡器): 系统默认使用8个band,对应的频率为[“40Hz”, “100Hz”, “200Hz”, “400Hz”, “800Hz”, “1600Hz”, “4000Hz”, “12000Hz”],对应的带宽为[“1.0q”, “1.0q”, “1.0q”, “1.0q”, “1.0q”, “1.0q”, “1.0q”, “1.0q”]。用户在使用过程中,需要输入的是8个band对应的gain。gain的调整范围在[-20dB, 20dB]之间。例如effectValue=”1 1 1 1 1 1 1 1”。输入是一个以空格分割的8个整数组成的string。数值为0表示不调整对应频率的gain。
    • lpfilter: 输入低通滤波器的频率值。可以是(0, 目标采样率/2]之间的任意整数。例如effectValue=”800”。
    • hpfilter: 输入高通滤波器的频率值。可以是(0, 目标采样率/2]之间的任意整数。例如effectValue=”1200”。
    bgmString线上可调用的背景音乐的名称,请阅读下面bgm属性说明。阿里巴巴语音合成特有标签。为合成的语音添加指定的背景音乐。
    backgroundMusicVolumeString[0, 100]之间的任意整数。50是默认值,大于50表示增大音量,小于50表示减小音量。阿里巴巴语音合成特有标签。控制背景音乐的音量。

    bmg属性说明:

    服务内嵌URL目前阿里巴巴语音合成服务内嵌了几款背景音乐供您体验:
    http://nls.alicdn.com/bgm/1.wav
    http://nls.alicdn.com/bgm/2.wav
    http://nls.alicdn.com/bgm/3.wav
    自定义背景音URL您可以根据需求,使用自定义的背景音。需要将背景音存放在阿里云的OSS上,并且所在的Bucket至少为公共读权限,请参考创建存储空间,生成文件访问链接请阅读如何获取OSS文件的访问地址, 使用HTTP/HTTPS协议。
    您需要对上传的音频版权承担相应的法律责任。
    对音频要求:
    1. 采样率16KHz、单声道wav格式
    2. 大小不超过2MB
    3. 合成时长超出背景音时长时,背景音将循环合成
    (如果您的背景音不是wav格式,可使用ffmpeg将其转为wav格式:ffmpeg -i 输入音频 -acodec pcm_s16le -ac 1 -ar 16000 目标.wav)

    说明:标签内的URL如果包含XML的特殊字符,需要做字符转义。常用的共有5个:< > & " '

  4. 标签关系 <speak>标签可以包含文本和以下标签:

    • break

    • s

    • w

    • phoneme

    • say-as


网友点评

*

*

*

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。