推荐TTS用pyttsx3(离线轻量)或gTTS(需网、多语言),高自然度选Coqui TTS;ASR离线首选Whisper.cpp或Vosk,在线可用云API。

语音合成(TTS)快速上手
Python中实现文本转语音,推荐使用pyttsx3(离线、轻量)或gTTS(需网络、支持多语言)。若追求自然度,可接入Coqui TTS(开源、支持微调)。
基础示例(pyttsx3):
- 安装:
pip install pyttsx3 - 初始化引擎并朗读:
import pyttsx3
engine = pyttsx3.init()
engine.say("你好,这是语音合成")
engine.runAndWait() - 可调节语速、音量、选择本地语音(如Windows的Zira、David;macOS的Alex)
语音识别(ASR)主流方案选型
离线识别优先考虑Whisper.cpp(C++加速版Whisper)或Vosk(小模型、低延迟、支持中文);在线识别可用Python免费学习笔记(深入)”;
- 下载对应语言模型(如vosk-model-small-zh-cn)
- 加载模型与音频(WAV格式,16kHz单声道):
from vosk import Model, KaldiRecognizer
model = Model("vosk-model-small-zh-cn")
rec = KaldiRecognizer(model, 16000) - 逐帧识别,获取JSON结果后提取
"text"字段
TTS与ASR双向交互集成
构建“听—理解—说”闭环,关键在音频流衔接与状态管理。不建议边录边播,应分阶段处理:录音 → 识别 → 逻辑响应 → 合成 → 播放。
典型结构示意:
- 用pyaudio实时采集麦克风音频,保存为临时WAV文件
- 调用Vosk识别该WAV,得到文本;做关键词匹配或接LLM生成回复
- 将回复文本送入pyttsx3/gTTS生成语音文件(或内存音频流)
- 用playsound或pygame.mixer播放合成语音
- 加入简单超时与重试机制,避免卡死
进阶:轻量化Whisper+Edge-TTS端到端实践
若需更高识别准确率且接受一定资源开销,可用faster-whisper(CTranslate2加速)替代Vosk;语音合成换用微软Edge-TTS(免费、音色丰富、中文自然)。
操作要点:
pip install faster-whisper edge-tts- faster-whisper支持GPU推理,加载模型时指定
device="cuda"可提速3–5倍 - Edge-TTS无需本地模型,按需生成MP3:
import asyncio
async def tts_to_file(text):
await edge_tts.Communicate(text, "zh-CN-YunxiNeural").save("out.mp3") - 注意异步调用需
asyncio.run()驱动,避免阻塞主线程
部署与避坑提醒
项目打包为exe时,pyttsx3和Vosk易因路径问题失效;Whisper模型较大,首次运行会自动下载,建议预置模型路径并设WHISPER_MODELS_DIR环境变量。
常见问题:
- 音频设备权限失败 → 检查系统麦克风/扬声器权限,Windows需开启“允许应用访问麦克风”
- Vosk识别为空 → 确认WAV采样率是16kHz、单声道、PCM编码
- Edge-TTS报网络错误 → 检查代理设置或换用国内镜像(部分版本支持)
- 合成语音卡顿 → 避免在识别线程中直接调用TTS,改用队列+独立播放线程










