一、概述
SSML(Speech Synthesis Markup Language,语音合成标记语言)是由 W3C 制定的标准 XML 标记语言,用于控制文本转语音(TTS)的输出。通过 SSML 标签,开发者可以精确控制合成语音的语速、音调、音量、停顿、发音方式、朗读风格等。
LaTeX 公式朗读则是在此基础上的能力延伸——将数学公式以自然语音输出,让 TTS 能够"读懂"数学表达式并正确朗读。
SSML 标准版本:SSML 1.0(2004)→ SSML 1.1(2010)
LaTeX 朗读本质:将公式解析后映射到对应的读法规则
SSML 本质:给 TTS 引擎的"剧本"
二、SSML 核心标签
- speak:根容器,所有 SSML 的容器
- voice:指定声音(男女/特定语音包)
- prosody:控制语速、音调、音量
- break:插入停顿(毫秒或强度)
- say-as:指定朗读方式(数字/日期/电话等)
- phoneme:自定义发音(IPA 或拼音)
- emphasis:强调文本(强/中/弱)
- audio:插入音频文件或音效
- lang:切换语言
- p / s:段落/句子划分
- sub:替代文本朗读
- mark:设置标记点,用于事件回调
- whisper:耳语效果(部分平台扩展)
- mstts:express-as:微软专属,风格+角色扮演
- amazon:emotion:亚马逊专属情感控制
三、SSML 常用标签详解
- speak — 根容器
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="zh-CN">
你好世界
</speak>
- prosody — 语速/音调/音量控制
<prosody rate="80%">慢一点读这句话</prosody>
<prosody rate="x-slow">非常慢</prosody>
<prosody pitch="+10%">稍微高一点</prosody>
<prosody pitch="low">低沉的声音</prosody>
<prosody volume="loud">大声一点</prosody>
rate:x-slow, slow, medium, fast, x-fast 或百分比(默认 100%)
- break — 停顿
<break strength="strong"/>
<break time="500ms"/>
<break time="2.5s"/>
- say-as — 指定朗读方式
<say-as interpret-as="cardinal">123</say-as> 一百二十三
<say-as interpret-as="date" format="ymd">2024-01-01</say-as>
<say-as interpret-as="telephone">010-12345678</say-as>
<say-as interpret-as="fraction">3/4</say-as> 四分之三
- phoneme — 精确控制发音
<phoneme alphabet="py" ph="zhong1 guo2">中国</phoneme>
<phoneme alphabet="ipa" ph="ˈtʃaɪnə">China</phoneme>
最实用场景:纠正多音字、罕见姓氏、专业术语发音
- 其他便捷标签
<sub alias="世界贸易组织">WTO</sub>
<emphasis level="strong">非常重要</emphasis>
<audio src="https://example.com/notification.mp3">通知音</audio>
<lang xml:lang="en-US">Hello, welcome!</lang>
四、LaTeX 公式朗读
4.1 核心挑战
- 符号歧义:同一符号在不同上下文读法不同(a' 读"a 撇" vs 'a' 读"单引号 a")
- 嵌套结构:分数、根式、上下标嵌套时的断句
- 读法约定:中文"x 的平方" vs 英文"x squared"
- 希腊字母:α β γ 等的名称和读音
4.2 中文读法规则
- x + y → x 加 y
- x - y → x 减 y
- x × y → x 乘以 y
- x = y → x 等于 y
- x > y → x 大于 y
- x^2 → x 的平方
- x^3 → x 的三次方
- sqrt{x} → 根号 x
- frac{x}{y} → y 分之 x
- sin x → 正弦 x
- cos x → 余弦 x
- log x → log x
- ln x → 自然对数 x
- f'(x) → f 撇 x
- int_{a}^{b} f(x) dx → 从 a 到 b f(x) 对 x 的积分
- sum_{i=1}^{n} a_i → i 从 1 到 n 的求和 a_i
- lim_{x \to 0} → x 趋向于 0 的极限
- alpha → 阿尔法
- beta → 贝塔
- gamma → 伽马
- delta → 德尔塔
4.3 实现方案
方案一:预处理替换 — LaTeX → 自然语言 → TTS。适合所有引擎,但失去节奏控制。
方案二:SSML 模板映射(推荐)— LaTeX → SSML → TTS。精度最高,推荐使用。
方案三:MathML → SSML 桥接 — LaTeX → MathML → SSML。适合已有 MathML 体系的场景。
五、各平台 SSML 支持对比
Azure TTS:标准 SSML 支持度 ✅ 大部分,中文支持 ✅ 优秀。30+中文声音,10+风格。
阿里云:标准 SSML 支持度 ✅ 大部分,中文支持 ✅ 优秀。支持微笑/情感/方言。
腾讯云:标准 SSML 支持度 ✅ 大部分,中文支持 ✅ 良好。支持 break/prosody/say-as。
百度 TTS:标准 SSML 支持度 ⚠️ 部分,中文支持 ✅ 一般。仅基础标签。
讯飞:标准 SSML 支持度 ⚠️ 部分,中文支持 ✅ 良好。自有扩展格式。
Amazon Polly:标准 SSML 支持度 ✅ 大部分,中文支持 ⚠️ 有限。中英双语声音较少。
Google TTS:标准 SSML 支持度 ✅ 基础,中文支持 ✅ 一般。需通过 SSML+TextType。
OpenAI TTS:标准 SSML 支持度 ❌ 不支持。需用 prompt 控制。
ElevenLabs:标准 SSML 支持度 ❌ 不支持。有 voice settings API。
Edge TTS:标准 SSML 支持度 ✅ 基础,中文支持 ✅ 良好。免费版 Azure 核心。
六、实用示例
示例1:中文新闻播报
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="zh-CN">
<prosody rate="90%" pitch="0%">
今天是2024年1月15日,
欢迎收看新闻联播。
<break time="500ms"/>
<emphasis level="strong">央行宣布降准0.5个百分点</emphasis>。
</prosody>
</speak>
示例2:客服语音(Azure 专属扩展)
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xml:lang="zh-CN">
<voice name="zh-CN-XiaoxiaoNeural">
<mstts:express-as style="cheerful" styledegree="1.5">
您好,欢迎致电!请问有什么可以帮您?
</mstts:express-as>
</voice>
</speak>
示例3:数学公式朗读
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="zh-CN">
<prosody rate="85%">
求解一元二次方程:
x 的平方 加 2x 减 3 等于 0。
根据求根公式,x 等于 负 b 加减根号下 b 平方减 4ac,除以 2a。
代入系数:a 等于 1,b 等于 2,c 等于 负 3。
计算得 x₁ 等于 1,x₂ 等于 负 3。
</prosody>
</speak>
七、优势与局限
优势
✅ 标准通用:一次编写多处使用(部分兼容)
✅ 精确发音控制:解决多音字/人名最大痛点
✅ 提升自然度:让 TTS 不再"机器感"
✅ 格式处理:自动处理好数字/日期/电话号码
✅ 节奏控制:精细的停顿和语速调节
✅ 音效插入:支持插入音频和音效
局限
❌ 非所有 TTS 引擎支持(OpenAI/ElevenLabs 不支持)
❌ 各平台扩展标签不兼容
❌ 编写略显冗长
❌ 部分引擎 prosody 效果不够好
❌ LaTeX 朗读没有统一标准,需要自行实现映射
八、适用场景和建议
推荐使用 SSML 的场景:
- 需要精确发音校正(多音字、罕见姓氏、专业术语)
- 新闻播报、有声书——需要节奏控制
- 客服语音——需要情感/风格定制
- 需要插入音频/静音/音效的交互式语音场景
推荐使用 LaTeX 公式朗读的场景:
- 在线教育平台——数学/物理课程的语音讲解
- 无障碍辅助工具——帮助视障学生
- 数学内容播报——语音播报数学试卷/题目
- 问答机器人——涉及数学公式的语音交互
建议:
- 使用 Azure/Aliyun/Tencent TTS → 强烈建议接入 SSML
- 使用 OpenAI/ElevenLabs → 不支持 SSML,需用 prompt 或 API 参数控制
- 对于 LaTeX 朗读 → 推荐采用 SSML 模板映射方案,精度最高
- 如果 LaTeX 朗读需求简单 → 使用预处理替换方案,兼容性最好
文章评论