Pyttsx3, 一个神奇的 Python 库
来源:互联网
时间:2026-07-26 09:23:35
说到文本转语音(TTS),这项技术如今在应用开发中越来越常见。而pyttsx3这个库,可以说是让开发者快速上手TTS的一把利器。它会在不同操作系统上自动调用系统默认的语音合成器——Windows下是SAPI5,Linux或macOS下则是espeak。

一、安装
首先,安装非常简单,一条命令就能搞定:
pip install pyttsx3安装完成后,新建一个main.py文件,输入下面几行代码就可以了:
import pyttsx3
pyttsx3.speak("I will speak this text")运行脚本,就能听到电脑把文本读出来:
python main.py二、具体执行
整个过程可以分为几个步骤:初始化语音引擎、设置语音参数、朗读文本,以及将语音保存为音频文件。
1. 初始化语音引擎
首先,初始化语音引擎。代码是这样的:
engine = pyttsx3.init()
# Windows
engine = pyttsx3.init(driverName="sapi5")
# Linux,需要编译安装espeak支持
engine = pyttsx3.init(driverName="espeak")2. 设置语音参数
接下来,设置语音参数。有几个关键参数需要调整:
语速设置(RATE)
rate = engine.getProperty('rate') # 获取当前语速(默认约200)
engine.setProperty('rate', 125) # 设置较慢的语速(125字/分钟)音量设置(VOLUME)
volume = engine.getProperty('volume') # 获取当前音量(0.0-1.0)
engine.setProperty('volume', 1.0) # 设置最大音量声音选择(VOICE)
voices = engine.getProperty('voices') # 获取可用声音列表
for voice in voices:
print(f"支持的声音列表: {voice}")
# 输出如下内容,我们可以选择中文、英文等。
#
# 3. 朗读文本
engine.say("Hello World!") # 添加要朗读的文本
engine.runAndWait() # 执行并等待完成4. 保存语音文件
engine.sa ve_to_file('Hello World', 'test.mp3')
engine.runAndWait() # 必须调用才能生成文件三、优化处理
通过以上步骤,我们已经在电脑上实现了基础的文本朗读。但要想让朗读更自然,还需要一些优化技巧。比如,设置中文声音,同时调慢语速:
engine = pyttsx3.init(driverName="sapi5")
# 设置中文女生声音
voices = engine.getProperty('voices')
for voice in voices:
if "Chinese" in voice.name:
engine.setProperty('voice', voice.id)
# 设置语速
engine.setProperty('rate', 125)
engine.say("你好,世界")
engine.runAndWait()此外,pyttsx3还提供了一套事件回调机制,可以在语音开始、结束、甚至出错时触发特定操作,相当灵活。比如,我们可以这样写:
def onStart(name):
print(f'开始: {name}')
def onWord(name, location, length):
print(f'词: {name}, 位置: {location}, 长度: {length}')
def onEnd(name, completed):
print(f'结束: {name}, 完成: {completed}')
def onError(name, exception):
print(f"错误: {name}, 异常: {exception}")
# 连接回调函数
engine = pyttsx3.init()
engine.connect('started-utterance', onStart)
engine.connect('started-word', onWord)
engine.connect('finished-utterance', onEnd)
engine.connect('error', onError)
engine.say('这段文本将触发回调函数')
engine.runAndWait()四、「注意事项」
- :runAndWait()是阻塞方法,调用后程序会等待语音播放完毕才会继续执行。这意味着,如果你需要语音在后台播放,可能需要考虑异步方案。
阻塞与非阻塞
- :可以通过事件循环实现异步,参考engine.startLoop()的用法。
异步支持
- :不同系统的语音质量和可用声音可能不同。Windows通常支持更丰富的声音,而Linux和macOS的espeak效果相对有限。
跨平台差异
- :部分系统需要额外配置中文语音库,比如Linux要安装中文语音包,否则可能无法朗读中文。
中文支持
五、常见问题
- :确认是否已安装库,或者尝试重启Python环境。
报错No module named 'pyttsx3'
- :检查系统是否支持中文语音。Windows可以在“设置-语音”中管理语音包,Linux则需要手动安装。
无法播放中文
- :确保路径可写,或者尝试使用绝对路径来避免权限问题。
保存文件失败
总的来说,pyttsx3是一个轻量而实用的TTS工具,掌握这些基本用法,已经足以应对大部分开发场景。