语音合成 TTS 入门:让机器开口说话——从拼接合成到神经声码器

· 约 4 分钟 ·
本文目录(8 节)

语音识别把声音变文字,语音合成(TTS)是它的逆过程:把文字变声音。智能客服的应答、有声书的旁白、导航的”前方右转”,背后都是 TTS。这一篇和 ASR 篇配对,构成完整的语音技术线。

前置阅读:语音识别入门(采样率、梅尔频谱等音频基础本篇直接复用)。

两段式架构:先谱后声

现代 TTS 几乎都拆成两步:

第一步:声学模型——文本 → 梅尔频谱图。这一步决定”说什么、什么语调、什么节奏”。代表模型是 Tacotron 2(自回归,稳但慢)和 FastSpeech 2(非自回归,快且可控——时长、音高、能量可以显式调节)。

第二步:声码器(Vocoder)——梅尔频谱 → 波形。这一步决定”声音有多真”。代表是 HiFi-GAN(生成对抗思路,快且质量高)。两步解耦的好处:声码器训练好后可以服务多个声学模型。

文本进声学模型前还有一道文本前端:分词、多音字消歧(“行长”读 háng 还是 zhǎng)、数字归一化(“2026 年”读”二零二六年”)、韵律预测(哪里停顿)。中文 TTS 的半壁江山在这道工序——前端错了,后面模型再好也是字正腔圆地念错。

演进:拼接 → 参数 → 端到端

  • 拼接合成(上古):录大量真人语音切片,按文本拼起来。自然度可以很高,但死板、无法改音色、拼接处有毛刺。
  • 参数合成:统计模型直接生成声学参数。灵活但声音发”机器味”。
  • 端到端神经合成:Tacotron 2 + WaveNet 开启了新时代,VITS 这类模型进一步把声学模型和声码器合成一个端到端网络,文本直接到波形。

今天的实用格局:开源侧 VITS 系(含 Bert-VITS2 等中文社区改进版)质量最好;零样本声音克隆(给几秒钟参考音频就模仿其音色)以 GPT-SoVITS、XTTS 为代表。

实战:中文 TTS 的最短路径

个人项目不建议从头训练(数据要几十小时录音 + 训练成本高),直接用预训练模型:

# 方案一:edge-tts(微软在线引擎,零部署,质量高)
# pip install edge-tts
import edge_tts
import asyncio

async def synth():
    tts = edge_tts.Communicate(
        "今天我们来讨论模型的训练稳定性问题。",
        voice="zh-CN-YunxiNeural",       # 中文男声;云希/晓晓/云野各有性格
        rate="+0%", pitch="+0Hz")
    await tts.save("output.mp3")

asyncio.run(synth())

# 方案二:本地 VITS(离线、可定制音色)
# 用开源 VITS 中文预训练模型加载推理即可

选型的实用建议:在线服务(edge-tts / 云厂商)质量稳定零维护,优先;需要离线、定制音色、或大量生成控制成本时上本地 VITS 系。

评估:MOS 与工程指标

MOS 来自听众对特定样本的主观评分,不能只给一个均值而省略听众数量、文本选择和播放条件。语速自然、数字读法正确与音色相似也不是同一个目标,最好分开记录,避免一个综合分掩盖明显读错。

TTS 的评估比 ASR 主观:

  • MOS 分:人工打分 1-5(自然度),4.0 以上接近真人。小项目可以 3-5 人小组盲听打分。
  • 可懂度:合成的语音拿去做 ASR,识别错误率低说明发音清晰——这是便宜的客观代理指标。
  • 工程指标:RTF(实时率,合成 1 秒音频耗时多少秒)、首包延迟(流式场景)。

坏案例要分类记录:多音字错、数字读法错、韵律平淡、长句断气——每一类对应不同的修复路径(前端词典、文本规范化、模型/参数)。

与 ASR 的对照记忆

维度ASRTTS
方向声音 → 文字文字 → 声音
核心模型Whisper / ConformerTacotron/FastSpeech + HiFi-GAN
评估WER(客观)MOS(主观)+ ASR 回测
工程难点噪声、长音频切分文本前端、韵律自然度

踩坑排查

症状原因处理
多音字读错前端词典缺失自定义词典/拼音标注强制指定
数字/英文读法怪文本规范化没做预处理:数字转汉字、英文转音译
长句后半段跑调模型长文本不稳按标点切句合成再拼接
合成速度跟不上自回归模型慢换 FastSpeech 类非自回归
音色不像参考音克隆模型需微调用几分钟目标音色数据微调
背景有电流声采样率/格式转换错统一 16bit PCM 处理链

练习

  1. 用 edge-tts 合成一段含多音字(“银行行长”)的文本,记录错误并用拼音标注修复。
  2. 对比 3 个不同音色在同样文本上的 MOS 盲评分。
  3. 用 ASR 回测法评估合成语音的可懂度(合成 → Whisper 识别 → 算 WER)。
  4. 实现长文本自动切句合成 + 拼接,对比整段合成的差异。

面试常问

Q:TTS 的两段式架构及各部分职责? 声学模型把文本转成梅尔频谱(决定内容和韵律),声码器把频谱转成波形(决定音质)。解耦让声码器可复用,也让韵律控制有明确的干预点。

Q:中文 TTS 特有的难点? 多音字消歧、文本规范化(数字/符号/英文读法)、韵律层次(中文是声调语言,语调模式与英文不同)——大部分工程投入在文本前端而非声学模型本身。

Q:声音克隆的技术路线? 少样本:说话人编码器提取音色嵌入做条件(零样本克隆);多样本:在目标音色数据上微调。几分钟数据的微调效果通常显著优于零样本。

Q:怎么评估 TTS 系统? 主观 MOS(自然度)是黄金标准;ASR 回测 WER 是可懂度的客观代理;工程上 RTF 与首包延迟决定可用性。离线优化看 MOS,线上体验看延迟。


相关阅读:语音识别入门(逆过程)、声纹识别(“这是谁在说话”)。

💬 评论

这套方案在哪一步卡住了?也欢迎补充你的实现方式或踩坑经验。

正在连接评论服务,首次访问可能需要几秒…