本文共 3035 字,大约阅读时间需要 10 分钟。
安装 pyttsx3 库以便使用其语音合成功能:
pip install pyttsx3
Pyttsx3 使用工厂模式来获取语音引擎实例。在第一次调用 pyttsx3.init() 时,会返回一个新的 pyttsx3.Engine 对象。若已有引擎实例存在,则会使用现有的引擎实例,否则会创建一个新的引擎实例。
语音引擎的初始化方法如下:
pyttsx.init([driverName : string, debug : bool]) → pyttsx.Engine
driverName:指定使用的语音驱动程序。
sapi5:适用于 Windows 的 SAPI5 驱动程序。nsss:适用于 Mac OS X 的 NSSpeechSynthesizer 驱动程序。espeak:适用于其他平台的 eSpeak 驱动程序。debug:设置调试状态标志。建议在开发阶段设置为 True。
了解 pyttsx3 引擎的 API 是使用它功能的关键。以下是 pyttsx.Engine 的主要方法:
| 方法名称 | 参数 | 返回值 | 简要说明 |
|---|---|---|---|
connect(topic : str, cb : callable) | topic:事件主题;cb:回调函数 | 返回字典 | 在指定主题上注册回调函数 |
disconnect(token : dict) | token:回调失联的标记 | 无返回值 | 取消回调函数的注册 |
endLoop() | 无参数 | 无返回值 | 结束事件循环 |
getProperty(name : str) | name:属性名称 | 返回对象 | 获取引擎实例的属性值 |
setProperty(name : str) | name:属性名称 | 返回对象 | 设置引擎实例的属性值 |
say(text : unicode, name : str) | text:要朗读的文本;name:发音人关联名 | 无返回值 | 朗读指定文本 |
runAndWait() | 无参数 | 无返回值 | 等待所有事件处理完成并结束循环 |
startLoop([useDriverLoop : bool]) | useDriverLoop:是否启用驱动循环 | 无返回值 | 启动事件驱动循环 |
通过 pyttsx3.voice.Voice 类设置发音参数:
| 属性名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
age | str | None | 发音人的年龄 |
gender | str | None | 性别:male、female 或 neutral |
id | str | None | 发音签名的唯一标识符 |
languages | list | [] | 支持的语言列表 |
name | str | None | 发音人的名称 |
以下是使用 pyttsx3 进行文本朗读的示例代码:
import pyttsx3engine = pyttsx3.init()engine.say('Sally sells seashells by the seashore.')engine.say('The quick brown fox jumped over the lazy dog.')engine.runAndWait() 注册回调函数来跟踪朗读过程:
import pyttsx3def onStart(name): print('开始朗读:', name)def onWord(name, location, length): print('正在朗读单词:', name, '位置:', location, '长度:', length)def onEnd(name, completed): print('完成朗读:', name, '是否完成:', completed)engine = pyttsx3.init()engine.say('The quick brown fox jumped over the lazy dog.')engine.runAndWait() 设置语速:
import pyttsx3engine = pyttsx3.init()rate = engine.getProperty('rate')engine.setProperty('rate', rate + 50)engine.say('The quick brown fox jumped over the lazy dog.')engine.runAndWait() 调整音量:
import pyttsx3engine = pyttsx3.init()volume = engine.getProperty('volume')engine.setProperty('volume', volume - 0.25)engine.say('The quick brown fox jumped over the lazy dog.')engine.runAndWait() 切换发音人:
import pyttsx3engine = pyttsx3.init()voices = engine.getProperty('voices')for voice in voices: engine.setProperty('voice', voice.id) engine.say('The quick brown fox jumped over the lazy dog.')engine.runAndWait() 实现基于事件驱动的朗读循环:
import pyttsx3def onStart(name): print('开始朗读:', name)def onWord(name, location, length): print('正在朗读单词:', name, '位置:', location, '长度:', length)def onEnd(name, completed): print('完成朗读:', name, '是否完成:', completed) if name == 'fox': engine.say('What a lazy dog!', 'dog') elif name == 'dog': engine.endLoop()engine = pyttsx3.init()engine.say('The quick brown fox jumped over the lazy dog.', 'fox')engine.startLoop() 在外部驱动循环中使用引擎:
import pyttsx3engine = pyttsx3.init()engine.say('The quick brown fox jumped over the lazy dog.', 'fox')engine.startLoop(False)# 需要在外部循环中调用 iterate() 方法externalLoop()engine.endLoop() 通过以上代码示例,可以轻松实现文本到语音的转换功能。Pyttsx3 提供了丰富的接口,适用于多种开发场景。
转载地址:http://zjofk.baihongyu.com/