语音合成标记语言(SSML:Speech Synthesis Markup Language),它是W3C的语音接口框架的一部分,通过SSML,可以对语音合成的效果进行定制化。
注意
<speak></speak>
标签之内标签 | 分类值 | 作用 | 支持的模型语种 | |||
---|---|---|---|---|---|---|
中文/中英混 | 英文 | 日语 | ||||
根元素 | speak | 根元素 | ✅ | ✅ | ✅ | |
韵律停顿 | break | strength | 按照预设等级调整停顿时长 | ✅ | ||
time | 指定秒数调整停顿时长 | ✅ | ✅ | ✅ | ||
word | 指定分词位置 | ✅ | ||||
音频拼接 | audio | 拼接第三方音频文件 | ✅ | ✅ | ✅ | |
调节语速语调重音 | prosody | 局部文本变速、变调、变音量。 | ✅ | ✅ | ✅ | |
tobi | 控制英语语调、重音、停顿时长 | ✅ | ||||
指定读音 | phoneme | alphabet=py | 通过中文拼音指定中文发音 | ✅ | ||
alphabet=ipa | 通过国际音标指定英文发音。常用于实现英语自然拼读、指定多音单词发音。 | ✅ | ✅ | |||
指定说法 | say-as | interpret-as="score" | 冒号按照比例含义播报 | ✅ | ||
interpret-as="time" | 冒号按照时间含义播报 | ✅ | ||||
interpret-as="digits" | 数字按照单个数字播报 | ✅ | ||||
interpret-as="number" | 数字按照整体数字播报 | ✅ | ||||
interpret-as="telephone" | 数字按照电话播报 | ✅ | ||||
interpret-as="address" | 文本 按照地址播报 | ✅ | ||||
interpret-as="poetry" | 文本按照古诗风格播报(仅特定模型有效) | ✅ | ||||
指定情感 | emotion | 指定文本情感 | ✅ |
描述
SSML的根元素,不论使用哪个ssml标签,都要有<speak></speak>
。
示例
<speak>这句话是没有任何SSML语法的效果。</speak>
注意事项
<speak></speak>
可以独立使用,不加其他任何标签,此时的没有任何特殊合成效果<speak></speak>
在每次合成请求中,只能有且只有一次出现<speak></speak>
一定在需要合成的所有文本(及标点)的最外面错误示范
<speak></speak>
<speak> 南京市</speak> <speak><word>长江大桥</word></speak>
<speak>
标签外还有文本内容南京市 <speak><word>长江大桥</word></speak>
描述
用于在文本中插入停顿,可以自定义停顿的时间长度。
属性
参数 | 可选值 |
---|---|
strength | "x-weak", "weak", "medium", "strong", "x-strong" |
time | 具体停顿时长,秒的绝对值,上限10s,可以精确到小数点后1位
|
注意事项
示例
<speak> 今天天气很好 </speak>
<speak> 今天<break strength="x-strong"/>天气很好 </speak>
<speak> 今天天气<break time="2.5s"></break>很好 </speak>
描述
用于说明词语结构,使指定的词组不被拆分,只能加在中文上。
示例
<speak> 南京市<word>长江大桥</word>。 </speak>
注意事项<word></word>
内不支持数字、非中文语种。
描述
将TTS合成的语音与外部的音频文件进行拼接,拼接后作为一段完整音频返回。
属性
名称 | 类型 | 是否必须 | 值/描述 |
---|---|---|---|
src | string | 是 | 外部音频的url地址
|
示例
<speak> 苹果的英文是<audio src="https://sa-bucket.tos-cn-beijing.volces.com/apple.mp3"></audio>你学会了吗? </speak>
描述
支持请求中局部文字的变速、变调、变音量。所有音色均支持。
属性
名称 | 值 | 是否必须 | 描述 |
---|---|---|---|
speed | 区间:0.5 - 2.0 | 否 |
|
volume | 区间:0.5 - 2.0 | 否 |
|
pitch | 区间:0.5 - 2.0 | 否 |
|
注意事项
示例
//示例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>
描述
< tobi >用于指定英文音高重音、短语重音和边界调,只适用于英文音色。
属性
参数 | 值 | 描述 |
---|---|---|
phrase_accent |
|
|
boundary_tone |
|
|
accent_type |
|
|
注意事项
写法 | 示例 | 是否可以合成 | |
---|---|---|---|
✅ 正确示例 | 单个单词 | Yes. | 是,正常合成 |
单个单词有空格 | Yes. | 是,正常合成 | |
❌ 错误示例 | 多个单词 | Yes. | 否,会报错 |
单个单词有标点 | Yes. | 是,但标签会失效 | |
多个单词且单词内没有空格 | Yes. | 是,但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>
描述
为标签内的文本指定发音,只能加在中文上。
属性
名称 | 类型 | 值 | 是否必须 | 描述 |
---|---|---|---|---|
alphabet | String | py | 是 | 代表拼音 |
ph | String | 标签内文本对应的拼音串String | 是 | 当alphabet="py"时,ph用于指定拼音,多个拼音用空格分割。
|
示例
<speak> 《<phoneme alphabet="py" ph="xi1 xi1">茜茜</phoneme>公主》是奥地利拍摄的历史题材的德语三部曲电影。 </speak>
描述
通过国际音标指定英文发音,实现指定同型不同音的单词发音,也可以实现自然拼读效果。
✨ 特别说明✨
我们调研了牛津、剑桥、有道等常用词典,发现均使用了类似的教学IPA体系对产品内的英语进行标注,但彼此间又有一定出入。为了保证发音指定严谨,火山引擎目前采用的是学术IPA集。下方提供了学术IPA、教学IPA、CMU的对照关系表,使用前需要确认传入的IPA是否正确哦~
举例:
属性
名称 | 类型 | 值 | 是否必须 | 描述 |
---|---|---|---|---|
alphabet | String | ipa | 是 | 代表国际音标,注意小写 |
ph | String | 标签内文本对应的音标串String | 是 | 当alphabet="ipa"时,ph用于指定国际音标。
|
示例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 | 教学IPA | CMU | 范例 | ||||
---|---|---|---|---|---|---|---|
单词 | 学术IPA | 教学IPA | CMU | ||||
元音 | /i/ | /iː/ | IY | me | /mi/ | /miː/ | M IY |
/ɪ/ | /ɪ/ | IH | fit | /fɪt/ | /fɪt/ | F IH T | |
/ɛ/ | /e/ | EH | met | /mɛt/ | /met/ | M EH T | |
/æ/ | /æ/ | AE | act | /ækt/ | /ækt/ | AE K T | |
/ɑ/ | /aː/ | AA | father | /'faðɚ/ | /'fa:ðər/ | F AA DH ER | |
/ɔ/ | /ɔː/ | AO | claw | /klɔ/ | /klɔː/ | K L AO | |
/ʊ/ | /ʊ/ | UH | put | /pʊt/ | /pʊt/ | P UH T | |
/u/ | /uː/ | UW | too | /tu/ | /tuː/ | T UW | |
/ʌ/ | /ʌ/ | AH | fund | /fʌnd/ | /fʌnd/ | F AH N D | |
/ə/ | /ə/ | AH | about | /ə'baʊt/ | /ə'baʊt/ | AH B AW T | |
/ɚ/ | /ər/ | ER | better | /'bɛtɚ/ | /'betər/ | B EH T ER | |
/ɝ/ | /ɜːr/ | ER | flirt | /'flɝt/ | /'flɜːrt/ | F L ER T | |
/aʊ/ | /aʊ/ | AW | out | /aʊt/ | /aʊt/ | AW T | |
/eɪ/ | /eɪ/ | EY | train | /treɪn/ | /treɪn/ | T R EY N | |
/ɔɪ/ | /ɔɪ/ | OY | boy | /bɔɪ/ | /bɔɪ/ | B OY | |
/oʊ/ | /oʊ/ | OW | boat | /boʊt/ | /boʊt/ | B OW T | |
辅音 | /p/ | /p/ | P | pen | /pɛn/ | /pen/ | P EH N |
/b/ | /b/ | B | bad | /bæd/ | /bæd/ | B AE D | |
/t/ | /t/ | T | tea | /ti/ | /tiː/ | T IY | |
/d/ | /d/ | D | did | /dɪd/ | /dɪd/ | D IH D | |
/k/ | /k/ | K | cat | /kæt/ | /kæt/ | K AE T | |
/ɡ/ | /g/ | G | get | /gɛt/ | /get/ | G EH T | |
/dʒ/ | /dʒ/ 或 /ʤ/ | JH | jam | /dʒæm/ | /dʒæm/ | JH AE M | |
/f/ | /f/ | F | fall | /fɔl/ | /fɔːl/ | F AO L | |
/v/ | /v/ | V | van | /væn/ | /væn/ | V AE N | |
/θ/ | /θ/ | TH | thin | /θɪn/ | /θɪn/ | TH IH N | |
/ð/ | /ð/ | DH | this | /ðɪs/ | /ðɪs/ | DH IH S | |
/s/ | /s/ | S | see | /si/ | /siː/ | S IY | |
/z/ | /z/ | Z | zoo | /zu/ | /zuː/ | Z UW | |
/ʃ/ | /ʃ/ | SH | shoe | /ʃu/ | /ʃuː/ | SH UW | |
/ʒ/ | /ʒ/ | ZH | vision | /'vɪʒn/ | /'vɪʒn/ | V IH ZH N | |
/h/ | /h/ | HH | hat | /hæt/ | /hæt/ | H AE T | |
/m/ | /m/ | M | man | /mæn/ | /mæn/ | M AE N | |
/n/ | /n/ | N | now | /naʊ/ | /naʊ/ | N AW | |
/ŋ/ | /ŋ/ | NG | sing | /sɪŋ/ | /sɪŋ/ | S IH NG | |
/j/ | /j/ | Y | yes | /jɛs/ | /jes/ | Y EH S | |
/w/ | /w/ | W | wet | /wɛt/ | /wet/ | W EH T | |
/ɹ/ | /r/ | R | red | /ɹɛd/ | /red/ | R EH D | |
/l/ | /l/ | L | leg | /lɛg/ | /leg/ | L EH G |
描述
根据信息类型指定标签参数,使之按照该类型常见的发音方式进行合成。
语法说明
<say-as interpret-as="string">text</say-as>。
描述
示例 | 播报方式 |
---|---|
1:2 | 一比二 |
1:11 | 一比十一 |
1:2:3 | 一比二比三 |
0:4:0 | 零比四比零 |
12:15 | 十二比十五 |
A:B:C | A比B比C |
示例
<speak> 这场比赛最终以<say-as interpret-as="score">12:15</say-as>告终。 </speak>
描述
格式 | 示例 | 播报方式 |
---|---|---|
H:mm | 5:00 | 五点 |
5:01 | 五点零一分 | |
5:40 | 五点四十分 | |
HH:mm | 05:00 | 五点 |
12:00 | 十二点 | |
12:01 | 十二点零一分 | |
12:15 | 十二点十五分 | |
12:45 | 十二点四十五分 | |
22:31 | 二十二点三十一分 | |
H:mm:ss | 5:00:00 | 五点 |
5:01:00 | 五点零一分 | |
HH:mm:ss | 05:00:00 | 五点 |
05:01:00 | 五点零一分 | |
12:01:15 | 十二点零一分十五秒 | |
12:41:08 | 十二点四十一分零八秒 |
示例
<speak> 我们约了<say-as interpret-as="time">12:15</say-as>在公园门口见面。 </speak>
描述
文本 | 播报 |
---|---|
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>
描述
只能包含数字、负号、小数点以及英文逗号且符合数字格式,否则会合成失败
文本 | 播报 |
---|---|
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>
描述
支持空格或横杠分割的数字串作为电话播报,"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>
描述
标签包含的文本按照地址播报,对其中的数字按照以下方式读取
文本 | 播报 |
---|---|
1号楼 | 一号楼 |
12单元 | 十二单元 |
文本 | 播报 |
---|---|
103号房 | 幺零三号房 |
4406号房间 | 四四零六号房间 |
示例
<speak> 我的住址是<say-as interpret-as="address">碧水家园12号楼1单元6601号房</say-as>。 </speak>
描述
使用该标签后,标签内部文本中的每一个符号顺序播报,在通用场景「business=default」与数学场景下「business=math」效果不同
文本符号 | 播报方式 |
---|---|
. | 点 |
杠 | |
_ | 下划线 |
示例
<speak> <say-as interpret-as="characters"> ab+xy=apple </say-as> </speak>
描述
标签内容按照古诗词韵律、字词发音方式进行合成。
注意事项
请提前验证目标音色在poetry标签下的合成效果。
示例
<speak> <say-as interpret-as="poetry">窗前明月光,疑是地上霜。</say-as>。 </speak>
描述
使用该标签后,可将内嵌文本替换为指定文本,后续将按照替换后的文本进行处理以及播报,目前暂时仅中文音色适用
属性
参数 | 值 | 描述 |
---|---|---|
alias | string | 所替换的文本 |
示例
<speak><sub alias="Speech Synthesis Markup Language">SSML</sub></speak>
描述
可对文本制定情感并进行播报,但仅对支持情感能力的音色生效,且不同音色支持的情感种类不同。对于不支持的情感,音频能合成成功,但不带情感。此外部分音色(主要是小说风格音色)的情感通过接口参数调用,建议调用前咨询相关同学。
属性
参数 | 值 | 描述 |
---|---|---|
style | ","分割的情感组合字符串,最多支持两个情感组合 | 指定文本情感 |
style_ratio | 单个情感: [0 , 2.0] | 不传默认1.0 |
示例
<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>