收藏必备!大模型训练基础概念详解,助你快速入门LLM
2025/12/17 23:42:51
pyttsx3(Python Text-to-Speech eXtended version 3)是一个跨平台的 Python 库,用于将文本转换为语音(Text-to-Speech, TTS)。它可以在不依赖互联网连接的情况下,在本地将文本朗读出来,支持 Windows、macOS 和 Linux 系统。
pip install pyttsx3如果使用的是Linux系统,还需要额外安装espeak
sudo apt-get install espeak如果语音输出还是不能正常工作,那么就需要安装espeak-ng和libespeak1
sudo apt update && sudo apt install espeak-ng libespeak1官方PyPI链接:官方介绍
import pyttsx3 # 初始化引擎 engine = pyttsx3.init() # 设置要朗读的文本 engine.say("你好,我是Python文本转语音引擎") # 开始朗读并等待完成 engine.runAndWait()| 名称 | 类型 | 作用 | 用法示例 | 备注 / 返回值 |
|---|---|---|---|---|
pyttsx3.init() | 函数 | 初始化 TTS 引擎(离线) | engine = pyttsx3.init() | 返回Engine实例;自动选择平台后端(SAPI5/macOS/Linux) |
pyttsx3.Engine | 类 | TTS 引擎主对象 | 由init()返回 | 所有语音操作均通过此对象进行 |
engine.say(text) | 方法 | 将文本加入播报队列 | engine.say("Hello") | 非阻塞;需调用runAndWait()才会发声 |
engine.save_to_file(text, filename) | 方法 | 将文本合成并保存为音频文件 | engine.save_to_file("Hi", "output.wav") | 文件格式通常为.wav;必须调用runAndWait()才生效 |
engine.runAndWait() | 方法 | 执行队列中的所有任务并等待完成 | engine.runAndWait() | 阻塞式调用;用于触发播放或保存 |
engine.stop() | 方法 | 立即停止当前及后续播报 | engine.stop() | 中断正在运行的runAndWait() |
engine.getProperty(name) | 方法 | 获取引擎属性值 | rate = engine.getProperty('rate') | 常用属性:'rate'(语速)、'volume'(音量 0.0–1.0)、'voices'(语音列表) |
engine.setProperty(name, value) | 方法 | 设置引擎属性 | engine.setProperty('rate', 200) | 属性名区分大小写;设置无效值可能被忽略 |
engine.getProperty('voices') | 方法 | 获取系统支持的语音列表 | voices = engine.getProperty('voices') | 返回list[Voice];每个Voice包含id,name,languages等 |
engine.setProperty('voice', voice_id) | 方法 | 切换语音 | engine.setProperty('voice', voices[0].id) | voice_id必须来自有效Voice.id |
Voice.id | 属性 | 语音唯一标识符 | v.id | 用于setProperty('voice', ...);不可读但可设 |
Voice.name | 属性 | 语音显示名称 | v.name | 如'Microsoft Huihui Desktop - Chinese (Simplified)' |
Voice.languages | 属性 | 支持的语言标签 | v.languages | 可能为['zh-CN']、[b'\x05z\x04h\x04'](macOS 编码)等;判断中文需谨慎 |
engine.connect(event, callback) | 方法 | 绑定播报事件回调 | engine.connect('finished-utterance', on_end) | 事件类型: • 'started-utterance'• 'finished-utterance'• 'started-word'(部分平台支持) |
engine.startLoop(useDriverLoop=False)engine.endLoop() | 方法 | 手动控制事件循环(高级) | engine.startLoop(False)# 自定义逻辑engine.endLoop() | 一般不需要使用;仅在 GUI 或异步环境中替代runAndWait() |
import pyttsx3 # 初始化 TTS 引擎 engine = pyttsx3.init() # 设置语音参数(可选) engine.setProperty('rate', 150) # 语速(默认约200) engine.setProperty('volume', 0.9) # 音量(0.0 到 1.0) # 获取可用语音列表 voices = engine.getProperty('voices') engine.setProperty('voice', voices[1].id) # 选择第二个语音(通常是女声) # 朗读文本 engine.say("你好,欢迎使用 pyttsx3!") engine.runAndWait() # 等待语音播放完成