从入门到实战详解Python文本转语音的完全指南
用Python让你的程序"开口说话"!支持中英文,5分钟上手
什么是文本转语音?
文本转语音(Text-to-Speech, TTS) 就是让计算机把文字读出来。
应用场景:
- 智能助手(如小爱同学、Siri)
- 有声读物生成
- 车载导航语音播报
- 障碍辅助工具
Python 中最流行的 TTS 库是 pyttsx3,它离线运行、跨平台、支持中英文!
为什么选择 pyttsx3?
| 特性 | pyttsx3 | gTTS | edge-tts |
|---|---|---|---|
| 离线使用 | ✅ | ❌ | ❌ |
| 支持中文 | ✅ | ✅ | ✅ |
| 跨平台 | ✅ | ✅ | ✅ |
| 自定义语音 | ✅ | ❌ | ❌ |
| 速度 | ⚡ 快 | 🐢 慢(需联网) | 🐢 慢(需联网) |
结论:离线 + 中文 + 可定制 → pyttsx3 是首选!
安装教程
步骤1:创建虚拟环境(推荐)
# 创建虚拟环境 python -m venv tts_env # 激活环境 # Windows: tts_env\Scripts\activate # Mac/Linux: source tts_env/bin/activate
步骤2:安装 pyttsx3
pip install pyttsx3 # 如果需要更好的兼容性,安装特定版本 pip install pyttsx3==2.90
步骤3:安装 pypiwin32(Windows 必需)
pip install pypiwin32
快速上手(5行代码)
import pyttsx3
engine = pyttsx3.init()
engine.say("你好,世界!Hello World!")
engine.runAndWait()
运行后,你的电脑就会说话了!
进阶功能
1. 调整语速
import pyttsx3
engine = pyttsx3.init()
# 获取当前语速
rate = engine.getProperty('rate')
print(f"当前语速: {rate}") # 默认 200
# 设置语速(范围 50-300)
engine.setProperty('rate', 150) # 变慢
engine.say("这是慢速语音")
engine.runAndWait()
| 语速值 | 效果 |
|---|---|
| 50 | 🐢 极慢 |
| 150 | 🚶 正常偏慢 |
| 200 | 🏃 默认 |
| 300 | 🚀 极快 |
2. 调整音量
import pyttsx3
engine = pyttsx3.init()
# 获取当前音量
volume = engine.getProperty('volume')
print(f"当前音量: {volume}") # 默认 1.0
# 设置音量(范围 0.0 - 1.0)
engine.setProperty('volume', 0.8) # 80% 音量
engine.say("这是80%音量的语音")
engine.runAndWait()
3. 切换语音(中英文)
import pyttsx3
engine = pyttsx3.init()
# 查看所有可用语音
voices = engine.getProperty('voices')
for i, voice in enumerate(voices):
print(f"语音 {i}: {voice.name} (ID: {voice.id})")
# 切换到中文语音(通常是索引 1)
engine.setProperty('voice', voices[1].id)
engine.say("这是中文语音")
engine.runAndWait()
# 切换到英文语音(通常是索引 0)
engine.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. 保存为音频文件
import pyttsx3
engine = pyttsx3.init()
# 设置保存路径
engine.save_to_file("你好,这是保存的音频", "test.mp3")
engine.runAndWait()
print("✅ 音频已保存为 test.mp3")
常见问题及解决方案
问题1:SyntaxError: invalid syntax(海象运算符错误)
原因:Python 版本低于 3.8
解决:
# 方案A:升级 Python 到 3.8+ # 方案B:降级 pyttsx3 pip install pyttsx3==2.90
问题2:_ctypes.COMError: (-2147200966, None, ...)
原因:Windows 语音引擎找不到可用语音
解决:
import pyttsx3
engine = pyttsx3.init()
# 🔑 关键:手动设置语音
voices = engine.getProperty('voices')
engine.setProperty('voice', voices[0].id) # 使用第一个语音
engine.say("测试成功")
engine.runAndWait()
问题3:KeyError: None
原因:驱动初始化失败
解决:
pip uninstall pyttsx3 -y pip install pyttsx3==2.90 pip install pypiwin32
问题4:没有中文语音
解决:
- 打开 Windows 设置 → 时间和语言 → 语音
- 点击 “添加语音”
- 搜索 “Chinese” 并安装
- 重启电脑
完整实战案例
案例1:智能朗读器(支持中英文切换)
import pyttsx3
class TextToSpeech:
def __init__(self):
self.engine = pyttsx3.init()
self.voices = self.engine.getProperty('voices')
def set_chinese(self):
"""切换到中文语音"""
self.engine.setProperty('voice', self.voices[1].id)
def set_english(self):
"""切换到英文语音"""
self.engine.setProperty('voice', self.voices[0].id)
def set_speed(self, rate=150):
"""设置语速"""
self.engine.setProperty('rate', rate)
def set_volume(self, volume=0.8):
"""设置音量"""
self.engine.setProperty('volume', volume)
def speak(self, text, lang='cn'):
"""朗读文本"""
if lang == 'en':
self.set_english()
else:
self.set_chinese()
self.engine.say(text)
self.engine.runAndWait()
def save(self, text, filename='output.mp3'):
"""保存为音频文件"""
self.engine.save_to_file(text, filename)
self.engine.runAndWait()
# 🚀 使用示例
tts = TextToSpeech()
tts.speak("你好,欢迎使用Python文本转语音!")
tts.set_speed(120)
tts.speak("This is English voice, slower speed.")
tts.save("保存的音频测试", "test.mp3")
案例2:批量朗读文本文件
import pyttsx3
def read_file(filepath):
engine = pyttsx3.init()
engine.setProperty('voice', engine.getProperty('voices')[1].id)
with open(filepath, 'r', encoding='utf-8') as f:
text = f.read()
engine.say(text)
engine.runAndWait()
# 使用
read_file("article.txt")
总结
| 知识点 | 命令/代码 |
|---|---|
| 安装 | pip install pyttsx3==2.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 | 联网、音质好 | 在线服务、API |
| edge-tts | 微软语音、自然 | 高质量语音生成 |
| pyttsx4 | pyttsx3 改进版 | 未来替代方案 |
到此这篇关于从入门到实战详解Python文本转语音的完全指南的文章就介绍到这了,更多相关Python文本转语音内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
如何用Python中Tushare包轻松完成股票筛选(详细流程操作)
这篇文章主要介绍了如何用Python中Tushare包轻松完成股票筛选(详细流程操作),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-03-03
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
下面小编就为大家带来一篇基于Linux系统中python matplotlib画图的中文显示问题的解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-06-06


最新评论