You need to enable JavaScript to run this app.
导航

SSML标记语言

最近更新时间2023.08.25 11:29:19

首次发布时间2022.03.15 14:48:47

1. 关于SSML

语音合成标记语言(SSML:Speech Synthesis Markup Language),它是W3C的语音接口框架的一部分,通过SSML,可以对语音合成的效果进行定制化。

2. 必读

注意

  • 接口传参时,请选择 text_type=ssml
  • 所有文本 需放在 <speak></speak>标签之内
  • 不同语种模型可使用的标签不同,请严格按照下表进行请求,否则会系统报错
  • 当前仅支持中文普通话音色SSML调用,方言及小语种音色SSML调用后续会进行支持
3. 能力目录
标签
分类值
作用
支持的模型语种
中文/中英混英文日语
根元素speak-根元素
韵律停顿breakstrength按照预设等级调整停顿时长
time指定秒数调整停顿时长
word-指定分词位置
音频拼接audio-拼接第三方音频文件
调节语速语调重音prosody-局部文本变速、变调、变音量。
tobi-控制英语语调、重音、停顿时长
指定读音phonemealphabet=py通过中文拼音指定中文发音
alphabet=ipa通过国际音标指定英文发音。常用于实现英语自然拼读、指定多音单词发音。
指定说法say-asinterpret-as="score"冒号按照比例含义播报
interpret-as="time"冒号按照时间含义播报
interpret-as="digits"数字按照单个数字播报
interpret-as="number"数字按照整体数字播报
interpret-as="telephone"数字按照电话播报
interpret-as="address"文本 按照地址播报
interpret-as="poetry"文本按照古诗风格播报(仅特定模型有效)
指定情感emtion-指定文本情感
4. SSML支持 标签

4.1 speak 根元素

描述

SSML的根元素,不论使用哪个ssml标签,都要有<speak></speak>

示例

<speak>这句话是没有任何SSML语法的效果。</speak>

注意事项

  • <speak></speak>可以独立使用,不加其他任何标签,此时的没有任何特殊合成效果
  • <speak></speak>在每次合成请求中,只能有且只有一次出现
  • <speak></speak>一定在需要合成的所有文本(及标点)的最外面

错误示范

  • ❌错误示范1❌:一次请求包含2个及以上的<speak></speak>
<speak> 南京市</speak> <speak><word>长江大桥</word></speak>
  • ❌错误示范2❌: <speak>标签外还有文本内容
南京市 <speak><word>长江大桥</word></speak>

4.2 break 调整停顿时长

描述

用于在文本中插入停顿,可以自定义停顿的时间长度。

属性

参数可选值
strength"x-weak", "weak", "medium", "strong", "x-strong"

time

具体停顿时长,秒的绝对值,上限10s,可以精确到小数点后1位

  • 标签中间不能添加文本
    • ❌错误示范❌:<break time="2.5s">测试</break>
  • <break time="0s"></break>时,默认按照句号节奏停顿,如不需停顿,请删去该标签

注意事项

  • strength & time 不能同时指定

示例

  1. 不添加break标签效果:
<speak>
  今天天气很好
</speak>
  • 音频效果:以BV001为例
  1. 使用 strength 示例
<speak>
  今天<break strength="x-strong"/>天气很好
</speak>
  • 音频效果:以BV001为例

  1. 使用 time 示例
<speak>
  今天天气<break time="2.5s"></break>很好
</speak>
  • 音频效果:以BV001为例

4.3 word 指定词语结构

描述

用于说明词语结构,使指定的词组不被拆分,只能加在中文上。

示例

<speak>
  南京市<word>长江大桥</word>。
</speak>
  • 音频效果:以BV001为例

注意事项

<word></word>内不支持数字、非中文语种。

4.4 audio 拼接音频链接

描述

将TTS合成的语音与外部的音频文件进行拼接,拼接后作为一段完整音频返回。

属性

名称类型是否必须
值/描述

src

string

外部音频的url地址

  • 支持http和https
  • 仅支持mp3格式
  • 对拼接的音频没有采样率限制,TTS侧会做resample
  • 文件大小不超过10M。音频越大,下载延迟越高。
  • 标签中间不能添加文本。
    • ❌错误示范❌:<audio src="++ ++*音频url*++++">测试</audio>

示例

<speak>
苹果的英文是<audio src="https://sa-bucket.tos-cn-beijing.volces.com/apple.mp3"></audio>你学会了吗?
</speak>

4.5 调整语速、语调、音量

4.5.1 句级别 变速、变调、变音量

描述

支持请求中局部文字的变速、变调、变音量。所有音色均支持。

属性

名称是否必须描述

speed

区间:0.5 - 2.0
精度:小数点后一位

  • 改变速度

  • 1.0为原速

volume

区间:0.5 - 2.0
精度:小数点后一位

  • 改变音量

  • 1.0为原音量

pitch

区间:0.5 - 2.0
精度:小数点后一位

  • 改变音调

  • 1.0为原调

注意事项

  • speed、volume、pitch顺序可以调换,三者必须有一。

示例

//示例1
<speak>
    这是原来的样子。
    <prosody speed="1.5" >这是升速到1.5倍的样子</prosody> 
    <prosody speed="0.5" >这是降速到0.5倍的样子</prosody>
</speak>

//示例2
<speak>
    这是原来的样子。
    <prosody volume="1.5" >这是提高音量到1.5倍的样子</prosody>
    <prosody volume="0.5" >这是降低音量到0.5倍的样子</prosody>
</speak>

//示例3
<speak>
    这是原来的样子。
    <prosody pitch="1.5" >这是升调到1.5倍的样子</prosody>
    <prosody pitch="0.5" >这是降调到0.5倍的样子</prosody>
</speak>

4.5.2 <英语>语调、 重音、停顿时长 控制

描述

< tobi >用于指定英文音高重音、短语重音和边界调,只适用于英文音色

属性

参数描述

phrase_accent

  • L-

  • H-

  • 短语重音,控制单词的语调上扬、下降。

  • L-/H-,分别表示低/高。

boundary_tone

  • L%

  • H%

  • 边界调,控制单词的停顿时长。必须配合phrase_accent一起使用,不可单独出现。

  • L%/H%,分别表示低/高

accent_type

  • L*

  • H*

  • 音高重音,控制句子中的重音出现在哪个单词上。

  • L*/H*,分别表示低/高

注意事项

  • 参数phrase_accent, accent_type,二者至少要有一个。

  • 当需要参数boundary_tone时,必须提供参数phrase_accent。

  • <tobi 后略>xxx标签内有且只能有一个单词。

写法示例是否可以合成
✅ 正确示例单个单词 Yes. <tobi accent_type="H*">Where are you from?是,正常合成

单个单词有空格

Yes. <tobi accent_type="H*"> Where are you from?

是,正常合成

❌ 错误示例多个单词Yes.<tobi accent_type="H*">Where areyou from?否,会报错
单个单词有标点Yes.<tobi accent_type="H*">Where,you from?是,但标签会失效
多个单词且单词内没有空格 Yes. <tobi accent_type="H*">Whereare are you from? 是,但TTS会将Whereare判断为一个单词进行发音预测,无意义

示例:

<speak>
  We have a <tobi phrase_accent="L-" boundary_tone="L%" accent_type="L*" ><phoneme alphabet="ipa" ph="laɪv">live</phoneme></tobi> show of a football match this Friday night.
</speak>

4.6 phoneme 指定字词发音

4.6.1 py 指定中文发音

描述

为标签内的文本指定发音,只能加在中文上。

属性

名称类型是否必须
描述
alphabetStringpy代表拼音

ph

String

标签内文本对应的拼音串String

当alphabet="py"时,ph用于指定拼音,多个拼音用空格分割。

  • 1~4 分别顺序对应汉语四个声调,5对应轻声。比如,词语“爸爸”,拼音应写为“ba4 ba5”
  • 标签指定的拼音个数,必须与标签内中文字数相等
    • ❌错误示范❌:<phoneme alphabet="py" ph="yi1">依依</phoneme>惜别。
  • 标签内不能有标点符号、空格等非汉字内容
    • ❌错误示范❌:<phoneme alphabet="py" ph="ba4 ba5">爸爸!</phoneme>快来!
  • 拼音的ü需要写成v
    • ❌错误示范❌:<phoneme alphabet="py" ph="lü3">吕</phoneme>
    • ✅正确示范✅:<phoneme alphabet="py" ph="lv3">吕</phoneme>
    • 如果词语连读,导致发音控制不明显,增加<break>标签,增大字间停顿。但<phoneme>标签内不能嵌套<break>,需要每个字单独使用<phoneme>

示例

<speak>
  《<phoneme alphabet="py" ph="xi1 xi1">茜茜</phoneme>公主》是奥地利拍摄的历史题材的德语三部曲电影。
</speak>
  • 音频效果:以BV001为例

4.6.2 ipa 指定「英文」发音

描述

通过国际音标指定英文发音,实现指定同型不同音的单词发音,也可以实现自然拼读效果。

✨ 特别说明✨

我们调研了牛津、剑桥、有道等常用词典,发现均使用了类似的教学IPA体系对产品内的英语进行标注,但彼此间又有一定出入。为了保证发音指定严谨,火山引擎目前采用的是学术IPA集。下方提供了学术IPA、教学IPA、CMU的对照关系表,使用前需要确认传入的IPA是否正确哦~

举例:

  • 学术IPA集里 /ɹ/,在常见词典多使用 /r/ 进行标注。需要注意区分。
  • 学术IPA集里/ɛ/,在常见词典多使用 /e/ 进行标注,只有牛津使用的是标准的学术IPA /ɛ/。需要注意区分。
  • 学术IPA集里/ɚ/,在常见词典多使用 /ər/ 进行标注,只有剑桥使用的是标准的学术IPA /ɚ/。需要注意区分。

属性

名称类型是否必须描述
alphabetStringipa代表国际音标,注意小写

ph

String

标签内文本对应的音标串String

当alphabet="ipa"时,ph用于指定国际音标。

  • 标签内不限定字母是否为一个真正的单词,以“ph”的值为准。
    • 比如 :<phoneme alphabet="ipa" ph="ə">qweasd</phoneme>
  • 标签内不能有标点符号、空格等非英语字母内容。
  • ❌错误示范❌:<phoneme alphabet="py" ph="ba4 ba5">爸爸!</phoneme>快来!

示例1 - 音标(仅支持部分音色)

<speak>
  <phoneme alphabet="ipa" ph="æ">a</phoneme>,apple.是苹果的意思.
</speak>

示例2 - 单词

<speak>
  We have a <phoneme alphabet="ipa" ph="laɪv">live</phoneme> show of a football match this Friday night.
  We used to <phoneme alphabet="ipa" ph="lɪv">live</phoneme>in London .
</speak>

示例3 - 词重音

<speak>
    <phoneme alphabet="ipa" ph="fəˈnæns">finance</phoneme> .
    <phoneme alphabet="ipa" ph="ˈfaɪˈnæns">finance</phoneme>.
    <phoneme alphabet="ipa" ph="ˈfaɪnæns">finance</phoneme>.
</speak>

示例4 - 自然拼读

<speak>
    <phoneme alphabet="ipa" ph="æ">a</phoneme>
    <break time="0.5s"></break>
    <phoneme alphabet="ipa" ph="æ">a</phoneme>
    <break time="0.5s"></break>
    apple
</speak>

学术IPA
(ssml支持的)

教学IPA
(市面常见的)

CMU

范例

单词学术IPA教学IPACMU
元音/i//iː/IYme/mi//miː/M IY
/ɪ//ɪ/IHfit/fɪt//fɪt/F IH T
/ɛ//e/EHmet/mɛt//met/M EH T
/æ//æ/AEact/ækt//ækt/AE K T

/ɑ/
ɑ

/aː/

AA

father

/'faðɚ/

/'fa:ðər/

F AA DH ER

/ɔ//ɔː/AOclaw/klɔ//klɔː/K L AO
/ʊ//ʊ/UHput/pʊt//pʊt/P UH T
/u//uː/UWtoo/tu//tuː/T UW
/ʌ//ʌ/AHfund/fʌnd//fʌnd/F AH N D
/ə//ə/AHabout/ə'baʊt//ə'baʊt/AH B AW T
/ɚ//ər/ERbetter/'bɛtɚ//'betər/B EH T ER

/ɝ/
/aɪ/

/ɜːr/
/aɪ/

ER
AY

flirt
cry

/'flɝt/
/kraɪ/

/'flɜːrt/
/kraɪ/

F L ER T
K R AY

/aʊ//aʊ/AWout/aʊt//aʊt/AW T
/eɪ//eɪ/EYtrain/treɪn//treɪn/T R EY N
/ɔɪ//ɔɪ/OYboy/bɔɪ//bɔɪ/B OY
/oʊ//oʊ/OWboat/boʊt//boʊt/B OW T
辅音/p//p/Ppen/pɛn//pen/P EH N
/b//b/Bbad/bæd//bæd/B AE D
/t//t/Ttea/ti//tiː/T IY
/d//d/Ddid/dɪd//dɪd/D IH D
/k//k/Kcat/kæt//kæt/K AE T

/ɡ/
/tʃ/

/g/
/tʃ/

G
CH

get
chain

/gɛt/
/tʃeɪn/

/get/
/tʃeɪn/

G EH T
CH EY N

/dʒ//dʒ/ 或 /ʤ/JHjam/dʒæm//dʒæm/JH AE M
/f//f/Ffall/fɔl//fɔːl/F AO L
/v//v/Vvan/væn//væn/V AE N
/θ//θ/THthin/θɪn//θɪn/TH IH N
/ð//ð/DHthis/ðɪs//ðɪs/DH IH S
/s//s/Ssee/si//siː/S IY
/z//z/Zzoo/zu//zuː/Z UW
/ʃ//ʃ/SHshoe/ʃu//ʃuː/SH UW
/ʒ//ʒ/ZHvision/'vɪʒn//'vɪʒn/V IH ZH N
/h//h/HHhat/hæt//hæt/H AE T
/m//m/Mman/mæn//mæn/M AE N
/n//n/Nnow/naʊ//naʊ/N AW
/ŋ//ŋ/NGsing/sɪŋ//sɪŋ/S IH NG
/j//j/Yyes/jɛs//jes/Y EH S
/w//w/Wwet/wɛt//wet/W EH T
/ɹ//r/Rred/ɹɛd//red/R EH D
/l//l/Lleg/lɛg//leg/L EH G

4.7 say-as 根据「信息类型」指定读法

描述

根据信息类型指定标签参数,使之按照该类型常见的发音方式进行合成。

语法说明

<say-as interpret-as="string">text</say-as>。

4.7.1 score 冒号按照「比例/比分」播报

描述

示例
播报方式
1:2一比二
1:11一比十一
1:2:3一比二比三
0:4:0零比四比零
12:15十二比十五
A:B:CA比B比C

示例

<speak>
  这场比赛最终以<say-as interpret-as="score">12:15</say-as>告终。
</speak>

  • 音频效果: 以BV010为例

4.7.2 time 冒号按照「时间」播报

描述

格式
示例
播报方式
H:mm5:00五点
5:01五点零一分
5:40五点四十分
HH:mm05:00五点
12:00十二点
12:01十二点零一分
12:15十二点十五分
12:45十二点四十五分
22:31二十二点三十一分
H:mm:ss5:00:00五点
5:01:00五点零一分
HH:mm:ss05:00:00五点
05:01:00五点零一分
12:01:15十二点零一分十五秒
12:41:08十二点四十一分零八秒

示例

<speak>
  我们约了<say-as interpret-as="time">12:15</say-as>在公园门口见面。
</speak>
  • 音频效果:以BV010为例

4.7.3 digits 数字按照「单个数字」播报

描述

文本播报
123,45一二三,四五
123 456一二三 四五六

示例

<speak>
我的游戏ID是<say-as interpret-as="digits">123 456 789</say-as>。
他给我的笔记上写的数字是<say-as interpret-as="digits">467,995</say-as>,我推测这可能是游戏内隐藏奖励的坐标。
</speak>
  • 音频效果:以BV700为例

4.7.4 number 数字按照「整体数字」播报

描述
只能包含数字、负号、小数点以及英文逗号且符合数字格式,否则会合成失败

文本播报
1,000,000一百万
-12.34负十二点三四
1234一千二百三十四

示例

<speak>
X的值是<say-as interpret-as="number">-12.34</say-as>。
Y的值是<say-as interpret-as="number">467,995</say-as>。
</speak>
  • 音频效果:(以BV700为例)

4.7.5 telephone 数字按照「电话」播报

描述
支持空格或横杠分割的数字串作为电话播报,"1"读作“幺”

文本播报
123-4567-4567幺二三 四五六七 四五六七
110幺幺零
468 6153四六八 六幺五三

示例

<speak>
    办公室电话是<say-as interpret-as="telephone">80004001-121</say-as>。
    我的电话是<say-as interpret-as="telephone">123 4567 4567</say-as>。
    没事儿不要乱拨<say-as interpret-as="telephone">110</say-as>。
    他今天给我转账了110元。
</speak>
  • 音频效果:以BV700为例

4.7.6 address 文本按照「地址」播报

描述
标签包含的文本按照地址播报,对其中的数字按照以下方式读取

  • 1-2位数字按照整体数字读取
文本播报
1号楼一号楼
12单元十二单元
  • 3+位数字按照单个数字读取,且"1"读作"幺"
文本播报
103号房幺零三号房
4406号房间四四零六号房间

示例

<speak>
我的住址是<say-as interpret-as="address">碧水家园12号楼1单元6601号房</say-as>。
</speak>
  • 音频效果:以BV700为例

4.7.7. characters 文本按照「单个符号」播报

描述
使用该标签后,标签内部文本中的每一个符号顺序播报,在通用场景「business=default」与数学场景下「business=math」效果不同

  • 通用场景下:英文字符以及数字均会按照单个读取,且文本中如有下述符号的也会按照指定发音朗读
文本符号播报方式
.
-
_下划线
  • 数学场景(math)下:仅英文字符会单个读取

示例

<speak>
    <say-as interpret-as="characters">
        ab+xy=apple
    </say-as>
</speak>
  • 音频效果:以BV034为列

4.7.8 poetry 按照「古诗风格」播报

描述

标签内容按照古诗词韵律、字词发音方式进行合成。

注意事项

请提前验证目标音色在poetry标签下的合成效果。

  • 不同音色,训练语料中古诗词的比例不同,会导致古诗文合成的韵律效果各不相同。
  • 不同体裁的古诗文韵律结构、特殊字词的发音不同。同一音色对不同体裁古诗文的支持程度也不相同。

示例

<speak>
  <say-as interpret-as="poetry">窗前明月光,疑是地上霜。</say-as>。
</speak>
  • 音频效果:以BV010为例

4.8 sub 替换别名

描述
使用该标签后,可将内嵌文本替换为指定文本,后续将按照替换后的文本进行处理以及播报,目前暂时仅中文音色适用
属性

参数描述
aliasstring所替换的文本

示例

<speak><sub alias="Speech Synthesis Markup Language">SSML</sub></speak>
  • 音频效果:以BV034为列

4.9 指定文本播报的情感及强度 - emotion

描述
可对文本制定情感并进行播报,但仅对支持情感能力的音色生效,且不同音色支持的情感种类不同。对于不支持的情感,音频能合成成功,但不带情感。此外部分音色(主要是小说风格音色)的情感通过接口参数调用,建议调用前咨询相关同学。

属性

参数描述

style

","分割的情感组合字符串,最多支持两个情感组合

指定文本情感
两个情感表示组合情感,建议搭配style_ratio进行情感分配,否则默认1.0,只对第一个情感生效

style_ratio

单个情感: [0 , 2.0]
两个情感: [0 , 1.0]

不传默认1.0
单个情感:表示情感强度
两个情感:表示情感分配,第一个情感强度style_ratio,第二个1-style_ratio

示例

<speak>
    <emotion style='sorry' style_ratio='0.5'> 
        很抱歉,我还不支持这项功能,但我会努力学习的!
    </emotion> 
    <emotion style='sorry' style_ratio='1.0'> 
        很抱歉,我还不支持这项功能,但我会努力学习的!
    </emotion>
    	<emotion style='sorry' style_ratio='2.0'> 
        很抱歉,我还不支持这项功能,但我会努力学习的!
    </emotion>    
</speak>
  • 音频效果:以BV700为例
5. 关于标签嵌套的说明
  • phoneme 标签
    • 不可嵌套其它标签
  • word 标签
    • 可嵌套一层phoneme标签
  • break 标签
    • 不可嵌套其它标签
  • audio 标签
    • 不可嵌套其它标签