语音合成是怎么工作的:从文本到波形的三段流水线

2026-08-24

语音合成(TTS)是把一段文字变成可播放音频的技术,它在工程上通常由三段接力完成:前端做文本分析,声学模型把语言学特征变成声学中间表示,声码器再把中间表示还原成时域波形。

把这三段记牢的实际价值是:当合成音听着不对劲时,你能判断该动哪一段。同样是”听着别扭”,多音字读错和音色发闷完全不是一个问题,修的地方也完全不同。

这条链路和语音识别的四个环节正好是镜像关系:ASR 把波形一层层剥成文字,TTS 把文字一层层长成波形。有意思的是,两者的中间站是同一个东西——梅尔频谱。

第一段:前端,把文字翻译成”该怎么念”

前端不产生任何声音,它做的是把书面文本变成一份发音说明书。输入是人写的字,输出是带发音标注与韵律标注的序列。它至少要处理四件事:

  • 文本规范化(TN):把书面写法转成口语读法。“2025 年”要变成”二零二五年”,“3.14”要变成”三点一四”。注意这个方向——TTS 前端做的是书面到口语,而 ASR 后端的 ITN 做的是口语到书面,两者是一对反向操作。
  • 分词:中文没有天然词边界,分词错了后面全错。
  • 注音:中文多音字必须靠上下文消歧,“银行”和”行走”、“重复”和”重量”、“了解”和”算了”,字形一样读音不同。
  • 韵律预测:哪里停顿、哪个字重读、句尾升调还是降调。

前端是中文 TTS 最容易翻车的地方,因为规则离不开语义。同样是 2025,当年份读”二零二五”,当数量读”两千零二十五”,当房间号又可能逐位读——光看字符串永远判断不出来。类似的还有 1-2 到底是”一到二”还是”一杠二”,3/4 是”四分之三”还是一个日期。

英文缩写更是没有通法:API 逐字母读、NASA 当一个单词读、iOS 有约定俗成的读法,只能靠词典。多音字消歧也有两条路——词典加规则可控、专名能手工补,神经网络 G2P 覆盖广但会出意外错误。工业系统常常两条都用,并且一定保留人工干预的入口。更细的拆解见TTS 前端到底在做什么

第二段:声学模型,把发音说明书变成声音的”设计图”

声学模型接过前端的标注序列,输出一份声学中间表示。最常见的中间表示是梅尔频谱:一张时间与频率的二维图,记录了每个时刻各频段的能量。

它决定的是音高走向、每个音持续多久、整体的音色特征。你可以把它理解成一张声音的设计图——已经把”这句话听起来什么样”定下来了,但还不是能播放的音频。

为什么非要在中间停一站

这是理解 TTS 架构最关键的一点。

梅尔频谱是一个信息量适中的中间表示。往上看,它比纯文字丰富得多——文字里没有音高、没有时长、没有音色,频谱里都有。往下看,它又比原始波形紧凑得多——波形每秒有上万个采样点,而频谱每秒只有几十帧,数量级差得很远。

这个”不多不少”的位置带来三个实际好处:

  • 两个子问题各自可解。前一半是”这句话该怎么念”,后一半是”这张频谱该怎么发出声”,两者的难点完全不同,硬塞进一个模型反而更难训。
  • 可替换。换个声码器不用重训声学模型,反之亦然。
  • 可单独训练。声码器的训练不需要文本,只要音频,数据来源宽得多。

代价也有:声学模型训练时见到的是真实频谱,推理时声码器却要吃预测出来的频谱,这个不匹配是两段式的经典问题。也正因如此,有一类做法干脆省掉显式的中间表示,让文本直接到波形。两条路各有各解决的问题,这里不下”哪种是未来”的结论。想细看两段的分工与配合,见声学模型和声码器各管什么;想理解梅尔频谱本身,可以从 ASR 侧的梅尔频谱入门,那边讲的是同一个东西。

第三段:声码器,把设计图变成真实波形

声码器负责最后一步:从梅尔频谱还原出时域波形。

这一步比看上去难,因为它是个欠定问题——频谱只记了各频段的能量,把相位信息丢掉了。早年用 Griffin-Lim 迭代去估计相位,结果就是那种典型的金属感。神经声码器改成直接学习频谱到波形的映射,音质有了很大改善。

现在主要有三条技术路线,各有取舍,不分高下:

  • 自回归:逐个采样点生成,音质好,但慢。
  • 基于流或 GAN:一次性并行生成整段波形,快得多,是当前实时场景常见的选择。
  • 扩散或流匹配:迭代去噪生成,质量高,迭代步数直接影响延迟。

出问题时,先看症状落在哪一段

症状大概率出在
多音字读错(“银行”读成”行走”的行)前端注音
数字读法不对(年份读成了数量)前端 TN
断句停顿离谱,该停不停前端韵律预测
人名、地名、专业术语读错前端词典,缺词条
英文缩写读法不对前端词典,没有通法只能补
语气平板,每句一个调子声学模型,韵律建模能力或控制信号
语速忽快忽慢、字被拖长声学模型的时长预测
音色发闷、高频糊、有金属感声码器
出现电流声、爆音、杂音声码器
长文本前后音色漂移分段合成的拼接策略,不在三段内

用这张表的方式是:先定位到段,再决定要不要换模型。很多被当成”模型不行”的问题,其实是前端缺了几个词条,加上就好了;而真正需要换模型的音色问题,改文本再多次也没用。合成音整体”像机器”的成因不止一条,为什么合成语音听起来像机器里有更完整的归因。

常见问题

问:一定要分三段吗?有没有一个模型全包的方案?

有。端到端 TTS 让文本直接到波形,省掉显式的梅尔频谱,好处是没有两段之间的误差累积与不匹配。两段式的好处则是模块可替换、可分别优化、训练资源要求更低。近年还有一类做法把语音离散化成 token,用语言模型的方式预测语音 token 再解码成波形,这让零样本音色克隆和用提示词控制风格变得自然。各条路解决的问题不同,按场景选就行。

问:合成一句话要多久?

这个数字脱离场景没有意义。更值得关心的是首包延迟——从请求发出到收到第一块可播放音频的时间。只要首包够快、后续生成速度跟得上播放速度,用户听到的就是连续无卡顿的语音,总耗时再长也感知不到;反过来总耗时很短但一次性返回,用户还是得干等。详见流式 TTS 与首包延迟

问:换一个更好的模型能解决所有问题吗?

不能。前端的多音字、数字读法、专名,本质是知识与规则问题,换模型只是换一批错误。这类问题最直接的修法是给出注音标注强制指定读音,或者干脆把数字写成中文,绕开规范化的歧义。

问:三段之外还有什么会影响最终听感?

采样率与音频格式。采样率不是越高越好——目标信道是 8 kHz 电话时,合成 48 kHz 再降采样是白费算力。另外长文本的切分与拼接也在三段之外,切得不好会让韵律断裂。

相关阅读


本文讲的是语音合成领域的通用原理,不绑定某一个具体实现。 各家系统的段落划分、默认配置与能力边界差异很大,请以你所用系统的官方文档为准。 我们没有对文中提到的任何方案做过性能实测,因此不给延迟、音质评分一类的数字。

想系统学会用 AI?报名体系课或加入会员,照着学、照着用。