You need to enable JavaScript to run this app.
导航
SSML标记语言
最近更新时间:2024.07.24 12:07:15首次发布时间: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

根元素

韵律停顿

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

指定文本情感

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. Whereare you from?

是,正常合成

单个单词有空格

Yes. Whereare you from?

是,正常合成

❌ 错误示例

多个单词

Yes.Where areyou from?

否,会报错

单个单词有标点

Yes.Where,you from?

是,但标签会失效

多个单词且单词内没有空格

Yes. Whereareare 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 指定中文发音

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

名称

类型

是否必须

描述

alphabet

String

py

代表拼音

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 /ɚ/。需要注意区分。

属性

名称

类型

是否必须

描述

alphabet

String

ipa

代表国际音标,注意小写

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

教学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

/ɝ/
/aɪ/

/ɜːr/
/aɪ/

ER
AY

flirt
cry

/'flɝt/
/kraɪ/

/'flɜːrt/
/kraɪ/

F L ER T
K R AY

/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

/ɡ/
/tʃ/

/g/
/tʃ/

G
CH

get
chain

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

/get/
/tʃeɪn/

G EH T
CH EY N

/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

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:C

A比B比C

示例

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

  • 音频效果: 以BV010为例

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

描述

格式

示例

播报方式

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>
  • 音频效果:以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 替换别名

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

参数

描述

alias

string

所替换的文本

示例

<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 标签
    • 不可嵌套其它标签