在现代应用程序中,文本转语音(Text-to-Speech, TTS)技术越来越受到重视。pyttsx3库可以帮助你轻松实现文本转语音功能。
在各种操作系统上, 会使用系统默认的语音合成器(Windows:SAPI5,Linux/macOS:espeak)
一、安装
pip install pyttsx3
安装好,我们创建一个main.py文件,输入下面代码:
import pyttsx3pyttsx3.speak("I will speak this text")
运行脚本,就能朗读文本内容。
python main.py
二、具体执行
2.1、初始化语音引擎
engine = pyttsx3.init()# windowsengine = pyttsx3.init(driverName="sapi5")# linux, 需要编译安装espeak支持engine = pyttsx3.init(driverName="espeak")
2.2 设置语音参数
rate = engine.getProperty('rate') # 获取当前语速(默认约200)engine.setProperty('rate', 125) # 设置较慢的语速(125字/分钟)
volume = engine.getProperty('volume') # 获取当前音量(0.0-1.0)engine.setProperty('volume', 1.0) # 设置最大音量
voices = engine.getProperty('voices') # 获取可用声音列表for voice in voices: print(f"支持的声音列表: {voice}")# 输出如下内容,我们可以中文,英文等。 <Voice id=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_ZH-CN_HUIHUI_11.0 name=Microsoft Huihui Desktop - Chinese (Simplified) languages=['zh-CN'] gender=Female age=Adult><Voice id=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_ZIRA_11.0 name=Microsoft Zira Desktop - English (United States) languages=['en-US'] gender=Female age=Adult>
2.3 朗读文本
engine.say("Hello World!") # 添加要朗读的文本engine.runAndWait() # 执行并等待完成
2.4 保存语音文件
engine.save_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提供了事件回调机制,可以在语音开始、结束或发生错误时执行特定操作:
defonStart(name): print(f'开始: {name}')defonWord(name, location, length): print(f'词: {name}, 位置: {location}, 长度: {length}')defonEnd(name, completed): print(f'结束: {name}, 完成: {completed}')defonError(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 安装中文语音包)。
五、「常见问题」
- 「报错
No module named 'pyttsx3'」:确认是否已安装库,或尝试重启 Python 环境。 - 「无法播放中文」:检查系统是否支持中文语音(Windows 可在“设置-语音”中管理语音包)。
- 「保存文件失败」:确保路径可写,或尝试使用绝对路径。
通过上述步骤,你可以轻松使用 pyttsx3 实现文本转语音功能。