8.3 语音合成:Matcha-TTS
小莫会"听懂"之后,还要会"说话"——这就是语音合成(TTS)。本节使用 Matcha-TTS 模型,通过 sherpa-onnx 运行,将文字转化为语音并播放。
Matcha-TTS 是一种轻量级语音合成模型,中文模型 matcha-icefall-zh-baker 基于标贝数据集训练,女声、效果自然。在树莓派 4 上 RTF(实时率)约 0.5-0.9,CPU 上运行流畅。
学习目标
学完本节,你将能够:
- 下载 Matcha-TTS 模型和声码器
- 写一个 Python 节点将文字转为语音
- 播放合成后的音频
前置要求
- 完成 8.2 ASR 语音识别,安装了
sherpa-onnx - 有扬声器或耳机
下载 Matcha 模型
最终目录结构:
TTS 节点
新建 tts_node.py:
代码详解
sherpa-onnx 的 TTS 配置采用嵌套结构:OfflineTtsConfig → OfflineTtsModelConfig → OfflineTtsMatchaModelConfig。num_threads=2 指定推理线程数。
sid=0 指定说话人 ID(这个模型只有一个说话人)。speed=1.0 是语速系数。返回的 audio.samples 是 int16 数组,audio.sample_rate 是采样率(22050Hz)。
用 sounddevice 播放合成的语音。
数据流配置
先用定时器自测,确认 TTS 能正常工作:
如果扬声器传出声"你好,我是小莫!",说明 TTS 一切正常。
常见问题 FAQ
语音合成很慢
首次加载模型需要几秒钟,这是正常的。后续合成速度会稳定。可以增加 num_threads(如 4)来加速。
播放没有声音
检查系统音量、扬声器是否正常。尝试用 sounddevice.play 播放一个测试音:
模型文件找不到
确认模型路径正确。可以使用绝对路径或在脚本所在目录执行。
小结
- Matcha-TTS + sherpa-onnx 实现纯 CPU 中文语音合成。
tts.generate(text, sid, speed)生成语音,返回int16数组。- 配合
sounddevice播放合成音频。