语音合成入门:SSML 标记语言快速上手

如果你在搭 AI 语音助手、有声内容生成或智能客服,SSML 是一个绕不开的基础工具。

SSML 的全称是 Speech Synthesis Markup Language,中文叫语音合成标记语言。它由 W3C 制定,本质上是一种 XML 标记语言,用来描述”这段文字该怎么读”。用上它,合成出来的语音在停顿、语速、音调上都能听出明显差别,比默认的机器音自然得多。

一、最基础的结构

SSML 文件最外层统一用 <speak> 标签包裹:

1
2
3
4
<speak version="1.0" xmlns="http://www.w3.org/2001/06/ten/"
xml:lang="zh-CN">
这是默认语音。
</speak>

versionxmlns 是标准写法,xml:lang 用来声明语言。实际接入各平台时,部分厂商会简化这些属性,不用太纠结。

二、段落与句子

SSML 用 <p> 表示段落,<s> 表示句子:

1
2
3
4
5
6
7
8
9
<speak>
<p>
<s>第一句话。</s>
<s>第二句话。</s>
</p>
<p>
<s>另一段的第一句。</s>
</p>
</speak>

写上之后,合成引擎在段落间会自然多停顿一下,读起来更像人在说话。

三、停顿

3.1 break 标签

<break> 用来插入停顿,用 time 指定时长:

1
2
<p>欢迎参加今天的发布会 <break time="500ms"/> 接下来介绍新产品。</p>
<p>第一点 <break strength="medium"/> 然后是第二点。</p>

time 支持毫秒和秒两种写法。strength 控制停顿的相对长度,有五个档:none(不停)、x-weakweakmediumstrong

3.2 零宽度空格

有时候不想让引擎在某个词中间自动断句——比如”CDN加速”,引擎可能读成”C D N 加速”。在中间插一个 zero-width space(&#x200B;)就能解决:

1
<p>CDN&#x200B;加速</p>

四、语速与音调:prosody

prosody 是最实用的一个标签,语速、音调、音量都能用它调:

1
2
3
<prosody rate="slow" pitch="low">说得慢,音调低。</prosody>
<prosody rate="fast">快速播报。</prosody>
<prosody volume="x-loud">这里需要大声点。</prosody>

rate(语速): x-slow / slow / medium / fast / x-fast,或者直接写百分比,80% 偏慢,150% 偏快。

pitch(音调): x-low / low / medium / high / x-high,也可以用半音偏移,+10st 升调,-5st 降调。

volume(音量): silent / x-soft / soft / medium / loud / x-loud,或者用分贝值,+3dB 放大,-2dB 减小。

五、emphasis:强调

emphasis 语义更明确,告诉引擎”这里要强调”,具体怎么处理让它自己判断:

1
2
3
<emphasis level="strong">重点内容。</emphasis>
<emphasis level="moderate">稍微提一下。</emphasis>
<emphasis level="none">正常读就行。</emphasis>

level 可选 strong(重读)、moderate(中等)、reduced(弱化)、none(不强调)。

六、say-as:数字、日期怎么读

引擎默认按字面读,但”123”读成”一二三”还是”一百二十三”,用法不同结果完全不同。say-as 就是用来解决这个问题:

1
2
3
4
5
6
7
8
9
<say-as interpret="cardinal">123</say-as>   <!-- 一百二十三 -->

<say-as interpret="ordinal">3</say-as> <!-- 第三 -->

<say-as interpret="telephone">010-12345678</say-as> <!-- 按电话格式读 -->

<say-as interpret="characters">HTTP</say-as> <!-- H T T P -->

<say-as interpret="date" format="ymd">2024-01-15</say-as> <!-- 二零二四年一月十五日 -->

常用的 interpret 类型有 cardinal(整数)、ordinal(序数)、date(日期)、time(时间)、telephone(电话)、characters(逐字拼读)。

七、phoneme:自定义发音

多音字、品牌名这类词,默认发音经常出错。phoneme 允许你直接标注 IPA 国际音标来指定读法:

1
2
<phoneme alphabet="ipa" ph="tɪˈneɪ">Tesla</phoneme>
<phoneme alphabet="ipa" ph="pʰu²¹⁴⁵"></phoneme>

IPA 门槛不低,也有更简单的办法——用 alias 直接写读音别名:

1
<phoneme alphabet="x-ibm" ph="P I:2 X I:2"></phoneme>

各平台支持的音标格式不同,IPA 是通用标准,厂商私有格式则各有各的写法。

完整示例

把上面的内容串起来:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<speak version="1.0" xmlns="http://www.w3.org/2001/06/ten/"
xml:lang="zh-CN">
<p>
各位开发者朋友,欢迎了解 <emphasis level="strong">SSML</emphasis>
</p>
<p>
今天是 <say-as interpret="date" format="ymd">2024-01-15</say-as>
演示几个常用技巧。
</p>
<p>
语速控制:<prosody rate="slow">这段说得很慢。</prosody>
音调控制:<prosody pitch="high">这段音调偏高。</prosody>
</p>
<p>
再加个停顿 <break time="800ms"/> 听一下效果。
</p>
</speak>

工具推荐:青萍AI 语音

写完 SSML 之后,如果想快速生成配音,推荐试试青萍AI 语音

官网:https://audio.lusyoe.com

  • 全 SSML 语法支持:所有标签都能用,配音效果精细可调
  • 图形化操作:不用写代码,拖拖拽拽就能控制停顿、音量、语速
  • 免费音色克隆:上传一段音频,生成专属音色,不花钱
  • 免费音色设计:只需要选择一些角色参数,就能生成一句简单提示词,定制独有音色
  • 情感参数丰富:开心、悲伤、严肃、兴奋……都能调
  • 多语言 + 多人对话:一种语言里穿插多种声音,适合做播客或有声故事
  • 字幕生成:配音完成自动带时间轴字幕,省去后期
  • 音效 + BGM 库:海量无版权素材,直接用

适合做短视频配音、有声书、语音播报、产品 demo 配音等场景。

结尾

SSML 是 W3C 的通用标准,Azure、Google Cloud、阿里云、科大讯飞这些平台都兼容。
不过需要注意不同的平台可能适配的程度不太一样~
今天这里只是介绍很基础的,还有插入音效、插入BGM等等高级功能可以进一步探索,这些目前在青萍AI语音平台均已支持。