一句话定义:SSML(Speech Synthesis Markup Language,语音合成标记语言)是一种基于 XML 的标记语言,用来在文本里嵌入标签,精确指定 TTS(Text-to-Speech,语音合成)该怎么念——在哪里停多久、哪个词重读、语速快慢、数字和日期怎么读。
为什么不直接“说人话”就行
现在很多语音合成接口支持你写一句自然语言风格描述,比如“用温柔、稍慢的语气,在‘但是’后面停顿一下”。这种方式上手快,但有两个问题:不确定和不可复用。同一句话,换个模型、换个音色、换个版本,理解就可能偏;你要在一万条文案里都保持同一个停顿节奏,也没法靠“求”出来。
SSML 的思路是把“请求”变成“指令”。它是 XML 方言,根节点是 <speak>,里面挂各种标签:
```xml
<speak>
各位好,<break time="600ms"/>
今天讲三件事。
<emphasis level="strong">第一件</emphasis>,
<prosody rate="slow">也是最容易被忽略的一件</prosody>。
会议定在 <say-as interpret-as="date">2025-03-08</say-as>。
</speak>
```
<break time="600ms"/>:强制停顿 600 毫秒,而不是等模型“感觉”该停了<emphasis level="strong">:把这个词念重<prosody rate="slow" pitch="+2st" volume="loud">:控制语速、音高、音量<say-as interpret-as="date">:告诉引擎这串字符是日期,别念成“二零二五减零三减零八”- 还有
<phoneme>指定音素纠正多音字、<sub alias="...">把“CPU”读成“C-P-U”、<audio src="...">插入预录音频
打个比方:自然语言描述像你对配音演员说“这里深情一点”,SSML 则是乐谱上的强弱记号——p、f、渐慢、延长记号。前者依赖演员悟性,后者是写给任何演奏者都能复现的规范。
和相邻概念的区别
| 自然语言风格描述 | SSML 标签 | 音频后期剪辑 | |
|---|---|---|---|
| 控制粒度 | 整体语气 | 逐词、逐句 | 波形级 |
| 可复现性 | 低 | 高 | 高但费人力 |
| 批量成本 | 低 | 低(模板化) | 高 |
| 学习成本 | 最低 | 需要查标签集 | 需要工具 |
SSML 处在中间:比“求模型”精确,比手动剪辑省事,而且能随文本一起批量生成。
对实际工作的意义
做产品的:客服 IVR、有声书、导航播报、无障碍朗读这类场景,一旦要处理成千上万条文本,靠人耳逐条调是不现实的。用模板把 SSML 标签和文案一起生成,节奏和重读就固定下来了。多音字、金额、电话号码这些“念错就出事故”的地方,<say-as> 和 <phoneme> 是最直接的保险。
普通职场人:至少要意识到“合成语音念得别扭”往往不是模型不行,而是输入没标注。知道 SSML 存在,你就能向技术同事提出“这里能不能加个停顿”这样的具体需求,而不是只能说“听起来怪怪的”。
一个务实的提醒:SSML 是规范,但各家语音引擎对标签的支持范围并不一致,有的标签会被静默忽略。真正上线前,拿目标引擎的官方文档对一遍标签清单,做几段试听,比照着规范写完就直接用更稳妥。
