Python文本转语音完全指南:从入门到实战
用Python让你的程序开口说话支持中英文5分钟上手 目录什么是文本转语音为什么选择 pyttsx3安装教程快速上手进阶功能常见问题及解决方案完整实战案例总结1️⃣ 什么是文本转语音文本转语音Text-to-Speech, TTS就是让计算机把文字读出来。应用场景 智能助手如小爱同学、Siri 有声读物生成 车载导航语音播报障碍辅助工具Python 中最流行的 TTS 库是pyttsx3它离线运行、跨平台、支持中英文2️⃣ 为什么选择 pyttsx3特性pyttsx3gTTSedge-tts离线使用✅❌❌支持中文✅✅✅跨平台✅✅✅自定义语音✅❌❌速度⚡ 快 慢需联网 慢需联网结论离线 中文 可定制 → pyttsx3 是首选3️⃣ 安装教程✅ 步骤1创建虚拟环境推荐# 创建虚拟环境python-mvenv tts_env# 激活环境# Windows:tts_env\Scripts\activate# Mac/Linux:sourcetts_env/bin/activate✅ 步骤2安装 pyttsx3pipinstallpyttsx3# 如果需要更好的兼容性安装特定版本pipinstallpyttsx32.90✅ 步骤3安装 pypiwin32Windows 必需pipinstallpypiwin324️⃣ 快速上手5行代码importpyttsx3 enginepyttsx3.init()engine.say(你好世界Hello World!)engine.runAndWait()运行后你的电脑就会说话了5️⃣ 进阶功能️ 1. 调整语速importpyttsx3 enginepyttsx3.init()# 获取当前语速rateengine.getProperty(rate)print(f当前语速:{rate})# 默认 200# 设置语速范围 50-300engine.setProperty(rate,150)# 变慢engine.say(这是慢速语音)engine.runAndWait()语速值效果50 极慢150 正常偏慢200 默认300 极快 2. 调整音量importpyttsx3 enginepyttsx3.init()# 获取当前音量volumeengine.getProperty(volume)print(f当前音量:{volume})# 默认 1.0# 设置音量范围 0.0 - 1.0engine.setProperty(volume,0.8)# 80% 音量engine.say(这是80%音量的语音)engine.runAndWait()️ 3. 切换语音中英文importpyttsx3 enginepyttsx3.init()# 查看所有可用语音voicesengine.getProperty(voices)fori,voiceinenumerate(voices):print(f语音{i}:{voice.name}(ID:{voice.id}))# 切换到中文语音通常是索引 1engine.setProperty(voice,voices[1].id)engine.say(这是中文语音)engine.runAndWait()# 切换到英文语音通常是索引 0engine.setProperty(voice,voices[0].id)engine.say(This is English voice)engine.runAndWait()输出示例语音 0: Microsoft David (ID: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_DAVID_11.0) 语音 1: Microsoft Huihui (ID: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_ZH-CN_HUIHUI_11.0) 4. 保存为音频文件importpyttsx3 enginepyttsx3.init()# 设置保存路径engine.save_to_file(你好这是保存的音频,test.mp3)engine.runAndWait()print(✅ 音频已保存为 test.mp3)6️⃣ 常见问题及解决方案 ❌ 问题1SyntaxError: invalid syntax海象运算符错误原因Python 版本低于 3.8解决# 方案A升级 Python 到 3.8# 方案B降级 pyttsx3pipinstallpyttsx32.90❌ 问题2_ctypes.COMError: (-2147200966, None, ...)原因Windows 语音引擎找不到可用语音解决importpyttsx3 enginepyttsx3.init()# 关键手动设置语音voicesengine.getProperty(voices)engine.setProperty(voice,voices[0].id)# 使用第一个语音engine.say(测试成功)engine.runAndWait()❌ 问题3KeyError: None原因驱动初始化失败解决pip uninstall pyttsx3-ypipinstallpyttsx32.90pipinstallpypiwin32❌ 问题4没有中文语音解决打开Windows 设置 → 时间和语言 → 语音点击“添加语音”搜索“Chinese”并安装重启电脑7️⃣ 完整实战案例 案例1智能朗读器支持中英文切换importpyttsx3classTextToSpeech:def__init__(self):self.enginepyttsx3.init()self.voicesself.engine.getProperty(voices)defset_chinese(self):切换到中文语音self.engine.setProperty(voice,self.voices[1].id)defset_english(self):切换到英文语音self.engine.setProperty(voice,self.voices[0].id)defset_speed(self,rate150):设置语速self.engine.setProperty(rate,rate)defset_volume(self,volume0.8):设置音量self.engine.setProperty(volume,volume)defspeak(self,text,langcn):朗读文本iflangen:self.set_english()else:self.set_chinese()self.engine.say(text)self.engine.runAndWait()defsave(self,text,filenameoutput.mp3):保存为音频文件self.engine.save_to_file(text,filename)self.engine.runAndWait()# 使用示例ttsTextToSpeech()tts.speak(你好欢迎使用Python文本转语音)tts.set_speed(120)tts.speak(This is English voice, slower speed.)tts.save(保存的音频测试,test.mp3) 案例2批量朗读文本文件importpyttsx3defread_file(filepath):enginepyttsx3.init()engine.setProperty(voice,engine.getProperty(voices)[1].id)withopen(filepath,r,encodingutf-8)asf:textf.read()engine.say(text)engine.runAndWait()# 使用read_file(article.txt)8️⃣ 总结 知识点命令/代码安装pip install pyttsx32.90初始化engine pyttsx3.init()说话engine.say(文本)执行engine.runAndWait()语速engine.setProperty(rate, 150)音量engine.setProperty(volume, 0.8)切换语音engine.setProperty(voice, voices[0].id)保存文件engine.save_to_file(文本, file.mp3) 延伸学习库特点适用场景pyttsx3离线、可定制桌面应用、嵌入式gTTS联网、音质好在线服务、APIedge-tts微软语音、自然高质量语音生成pyttsx4pyttsx3 改进版未来替代方案 互动话题你用文本转语音做过什么有趣的项目欢迎在评论区分享 智能助手 有声读物生成器 游戏语音播报觉得有用点个 ⭐ Star 收藏吧有问题评论区见作者Python学习笔记更新时间2024年源码地址GitHub示例代码