Python 文本转语音实现指南:使用 pyttsx3 库
前言
在软件开发中,让程序能够输出语音(Text-to-Speech, TTS)是一项非常实用的功能。无论是为视障用户辅助阅读、制作有声读物,还是开发智能助手,Python 都能提供便捷的解决方案。
Python 拥有庞大的第三方库生态,允许开发者用少量代码实现复杂功能。本文将详细介绍如何使用 pyttsx3 库将文本转换为语音,涵盖安装、基础用法、属性配置及文件保存等核心内容。
本文介绍如何使用 Python 的 pyttsx3 库将文本转换为语音。内容包括库的安装、引擎初始化、语音属性配置(如语速和音量)、多语言支持查询以及将语音保存为 MP3 文件的方法。此外还对比了其他方案并提供了完整的代码示例与注意事项。

在软件开发中,让程序能够输出语音(Text-to-Speech, TTS)是一项非常实用的功能。无论是为视障用户辅助阅读、制作有声读物,还是开发智能助手,Python 都能提供便捷的解决方案。
Python 拥有庞大的第三方库生态,允许开发者用少量代码实现复杂功能。本文将详细介绍如何使用 pyttsx3 库将文本转换为语音,涵盖安装、基础用法、属性配置及文件保存等核心内容。
在使用 pyttsx3 之前,请确保已安装 Python 环境。该库依赖于操作系统的语音合成引擎,因此无需额外下载语音包即可工作。
通过 pip 安装主库:
pip install pyttsx3
注意: 如果在 Windows 系统上遇到导入错误,可能需要安装 pypiwin32 模块:
pip install pypiwin32
pyttsx3 的核心逻辑是初始化一个引擎对象,然后调用方法发送文本并执行播放。
import pyttsx3
# 初始化引擎
engine = pyttsx3.init()
可以使用 say() 方法将文本加入队列,或使用 speak() 方法直接播放。
# 方式一:加入队列
engine.say("如何让 Python 开口说话!")
# 方式二:直接播放
engine.speak("Hello World!")
# 运行队列中的任务
engine.runAndWait()
# 停止当前播放
engine.stop()
运行上述代码后,计算机将朗读指定的文本。
为了获得更好的语音效果,我们可以调整语速、音量以及选择特定的语音包。
不同操作系统预装的语音包不同。可以通过以下代码查看当前系统支持的所有语音:
import pyttsx3
engine = pyttsx3.init()
voices = engine.getProperty('voices')
for voice in voices:
print(f"ID: {voice.id}")
print(f"Name: {voice.name}")
print(f"Languages: {voice.languages}")
print("-" * 30)
输出示例可能包含中文(如 Microsoft Huihui)或英文(如 Microsoft Zira)语音包。
默认情况下,语速和音量可能不符合预期。可以通过 getProperty 获取当前值,再使用 setProperty 进行调整。
import pyttsx3
engine = pyttsx3.init()
# 获取当前语速
rate = engine.getProperty('rate')
# 增加语速 (例如增加 50)
engine.setProperty('rate', int(rate) + 50)
# 获取当前音量 (范围 0.0 到 1.0)
volume = engine.getProperty('volume')
# 增加音量
engine.setProperty('volume', float(volume) + 0.25)
# 播放测试
engine.say("现在语速较快,音量较大")
engine.runAndWait()
engine.stop()
除了实时播放,pyttsx3 还支持将语音保存为音频文件(如 MP3),方便后续分发或存储。
import pyttsx3
engine = pyttsx3.init()
str_text = "这是一段保存的语音内容"
engine.save_to_file(str_text, 'output.mp3')
engine.runAndWait()
engine.stop()
在实际应用中,常需要将文本文件的内容转换为语音。
import pyttsx3
engine = pyttsx3.init()
try:
# 打开文本文件,指定编码以防乱码
with open("input.txt", "r", encoding="utf-8") as f:
text_content = f.read()
engine.save_to_file(text_content, 'audio_output.mp3')
engine.runAndWait()
print("转换完成")
except FileNotFoundError:
print("未找到输入文件")
except Exception as e:
print(f"发生错误:{e}")
finally:
engine.stop()
在 GUI 应用(如 Tkinter, PyQt)中使用 runAndWait() 可能会导致界面卡死。建议在后台线程中处理语音播放:
import threading
def speak_thread(text):
engine = pyttsx3.init()
engine.say(text)
engine.runAndWait()
threading.Thread(target=speak_thread, args=("后台播放测试",)).start()
本文详细介绍了如何使用 Python 的 pyttsx3 库实现文本转语音功能。通过初始化引擎、配置属性、保存文件等操作,开发者可以快速构建具备语音交互能力的应用。对于不需要极高音质的场景,pyttsx3 是一个轻量且高效的解决方案。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online