Python TTS 的 Coqui TTS / Piper 实践

1次阅读

coqui tts 返回静音主因是模型不支持中文或文本预处理错误;piper 中文卡住多因模型路径未配置;树莓派上优先选piper因其轻量、低延迟、中文模型成熟。

Python TTS 的 Coqui TTS / Piper 实践

Coqui TTS synthesizer.tts 返回空音频或静音?

根本原因通常是模型输入文本未被正确预处理,或模型不支持当前语言/标点。Coqui TTS 的 TTS 类默认用 en-us-kathleen-low 这类英文模型,直接喂中文会静音——它根本没学过中文字音映射。

实操建议:

立即学习Python免费学习笔记(深入)”;

  • 确认模型是否支持目标语言:tts --list_models 查看带 zhmultilingual 标签的模型,例如 coqui/tts_zh-CN-huayan-1.0
  • 避免用原始中文标点触发分词失败:把 !?。; 换成英文标点或加空格,如 "你好 !""你好!"
  • 检查 synthesizer.tts 调用时是否漏传 speaker_wav(零样本克隆场景)或 language(多语模型必须显式指定)
  • 静音还可能是采样率不匹配:模型输出是 22050,但用 44100 播放器硬播,听起来像无声——用 soundfile.write(..., samplerate=22050) 保存再试

Piper piper 命令行合成中文卡住或报 OSError: [errno 2] No such file or Directory

这是 Piper 在找语音模型时路径出错。它默认只查 ~/.local/share/piper/usr/local/share/piper,但你下载的 zh_CN-huayan-medium.onnx 可能放在了桌面或 Downloads 里,Piper 根本看不见。

实操建议:

立即学习Python免费学习笔记(深入)”;

  • 别靠 pip install piper 后直接跑命令:先手动下载模型到标准位置,比如 mkdir -p ~/.local/share/piper && cd ~/.local/share/piper && wget https://github.com/rhasspy/piper/releases/download/2024.02.26/zh_CN-huayan-medium.onnx
  • 运行时必须加 --model 显式指定路径:piper --model ~/.local/share/piper/zh_CN-huayan-medium.onnx -f out.wav
  • 中文需额外加 --language zh,否则 Piper 默认当英文处理,声调全丢
  • 如果仍卡住,加 --debug 看日志——大概率是 ONNX Runtime 初始化失败,换系统级安装的 onnxruntime-gpu(有 CUDA)或 onnxruntime(CPU 版)再试

Coqui vs Piper:选哪个跑在树莓派 4 上?

树莓派 4(4GB)跑 Coqui TTS 的 tts 命令会明显卡顿甚至 OOM,因为它的默认模型(如 tts_models/en/ljspeech/tacotron2-DDC)加载后占内存超 1.2GB,且依赖 pytorch 动态图,ARM 上优化差。

Piper 更合适,原因很实在:

  • Piper 模型是纯 ONNX,无 python 运行时依赖,onnxruntime ARM64 wheel 官方支持好,内存常驻仅 300–500MB
  • 合成延迟低:Piper 单句平均 800ms(含加载),Coqui 同配置下常超 3s,且首次加载后也不稳定
  • 中文可用模型更成熟:Piper 的 zh_CN-huayan 是专为中文训练的,Coqui 目前没有维护活跃的高质量中文 Tacotron2 或 VITS 模型
  • 但注意:Piper 不支持运行时切换 speaker voice,所有音色差异都得靠换模型文件——别指望用一个模型 + speaker_wav 克隆自己声音

合成音频有杂音、断字或语速突变?

不是模型坏了,大概率是文本预处理和语音对齐之间的缝隙没填平。特别是中英文混排、数字、单位符号这类边界,两个框架都容易崩。

实操建议:

立即学习Python免费学习笔记(深入)”;

  • 数字统一转汉字:把 "第123章" 改成 "第一百二十三章",Piper 和 Coqui 都不擅长读阿拉伯数字
  • 英文缩写加空格或括号:如 "CPU使用率""C P U 使用率""(CPU) 使用率",避免连读成“扣皮”
  • Coqui 中若用 vits 模型,关掉 text_cleaner(设为 None)反而更稳——它的默认 cleaner 会把中文标点全删,导致停顿丢失
  • Piper 的 --Length-scale 控制语速,值越小越快,但低于 0.8 容易吞字;高于 1.3 会拉长辅音,听感像卡顿

事情说清了就结束。真正麻烦的是中英文混排+数字+标点的组合,没有银弹,只能一句句试听、微调、存档规则。

text=ZqhQzanResources