TTS 语音合成接入实战:让 AI 会说话

王老师954 阅读

给 AI 助手加个"说话"能力,看似简单,实际踩坑不少。音色、延迟、并发、中文效果,每一项都要权衡。这篇记录我试过的几种 TTS 方案。

方案一:Edge-TTS(最快上手)

微软 Edge 的免费 TTS 接口,pip install edge-tts 就能用,中文音色多且自然:

Python
import edge_tts communicate = edge_tts.Communicate("你好", "zh-CN-XiaoxiaoNeural") await communicate.save("output.mp3")

优点:免费、效果好、中文音色 10+ 个。 缺点:非官方 API,有被封风险;不支持长文本(单次有限制);并发受限。

方案二:OpenAI TTS

Python
client.audio.speech.create(model="tts-1", voice="alloy", input="你好")

质量稳定、API 规范。但价格不便宜,长文本更贵。

方案三:CosyVoice(阿里开源,本地部署)

音色克隆、情感控制,质量顶级。但部署要 GPU,模型较大,合成速度取决于显卡。适合对音色有强需求的场景。

方案四:系统自带 TTS(兜底)

Windows/macOS 自带的语音合成,质量一般但零成本零依赖,适合紧急兜底。

接入时的坑

  1. 音频格式。不同 TTS 输出格式不同(mp3/wav/ogg),前端播放要统一转成浏览器支持的格式。我用 mp3 统一。

  2. 流式合成。长文本等待全部合成完再播,用户会等很久。Edge-TTS 和 OpenAI 都支持流式,边合成边播。

  3. 并发限制。免费方案并发一高就 429 或静默失败。我用队列 + 重试,高峰期排队合成。

  4. 延迟。合成 10 字大约 0.5-1 秒,长文要几秒。用户对"说话延迟"很敏感,最好配合"先显示文字,再补语音"的交互。

  5. 文本清洗。合成前要处理数字、英文、标点:TTS 会把"10086"读成"一万零八十六"还是"幺零零八六"?不同引擎不一样,要做数字转读法规则。

总结:快速验证用 Edge-TTS;生产要稳定用 OpenAI 或自建 CosyVoice;先想清楚音色和延迟需求再选。

评论0

还没有评论,来抢沙发~