Python pyttsx3 文字转语音完整指南:从安装到高级控制
本文详细介绍Python中利用pyttsx3库实现文字转语音(TTS)的完整流程。内容涵盖库的安装、引擎初始化机制、核心API接口解析,以及发音人、语速、音量等关键参数的配置方法。此外,文章还深入讲解了通过事件监听实现打断发音、外部驱动循环控制等高级功能,帮助开发者构建更灵活的语音合成应用。
Python pyttsx3文字转语音实现指南
本文深入解析如何在Python环境中使用pyttsx3库实现文字转语音功能。通过详细的代码示例,展示从基础配置到高级控制的完整过程,为开发者提供具有实际参考价值的技术指南。
# -*- coding: utf-8 -*-
import pyttsx3
engine = pyttsx3.init()
with open("all.txt",'r',encoding='utf-8') as f:
while 1:
line = f.readline()
print(line, end = '')
engine.say(line)
engine.runAndWait()
import pyttsx3
with open('all.txt','r',encoding='utf-8') as f:
line = f.read()#文件不大,一次性读取
engine = pyttsx3.init()
#调整频率
rate = engine.getProperty('rate')
engine.setProperty('rate', rate-50)
# 调整音量
volume = engine.getProperty('volume')
engine.setProperty('volume', volume+0.25)
engine.say(line)
engine.runAndWait()
安装与环境配置
环境准备与安装
pip install pyttsx3
语音引擎初始化原理
语音引擎初始化机制
pyttsx3的初始化过程借鉴了设计模式中的“工厂模式”概念。调用init函数时,系统会返回一个pyttsx3.engine对象。若该引擎实例已存在,则直接复用;若不存在,则创建新实例。这种机制确保了资源的有效管理和复用。
pyttsx.init([driverName : string, debug : bool]) → pyttsx.Engine
init方法的声明如下:。其中包含两个关键参数,分别用于指定驱动和调试模式。
第一个参数为driverName,由pyttsx3.driver模块根据当前操作系统自动选择最佳驱动。默认情况下,系统会选用当前平台下性能最优的语音驱动。
在Windows系统中,默认使用的驱动为sapi5(SAPI5 on Windows)。
在Mac OS X系统中,默认使用的驱动为nsss(NSSpeechSynthesizer on Mac OS X)。
在其他平台(如Linux)上,默认使用的驱动为espeak(eSpeak on every other platform)。
第二个参数为debug,用于控制是否以调试模式输出日志信息。建议在开发阶段将其设置为True,以便于排查问题;生产环境中可设为False以提升性能。
引擎API与Voice属性详解
核心API接口解析
要高效使用pyttsx3,必须熟悉其核心API。engine.Engine类提供了丰富的方法,用于控制语音合成的各个细节。
| 方法签名 | 参数列表 | 返回值 | 简单释义 |
| connect(topic : string, cb : callable) | topic:要描述的事件名称;cb:回调函数 | → dict | 在给定的topic上添加回调通知 |
| disconnect(token : dict) | token:回调失联的返回标记 | Void | 结束连接 |
| endLoop() | None | → None | 简单来说就是结束事件循环 |
| getProperty(name : string) | name有这些枚举值“rate, vioce,vioces,volumn | → object | 获取当前引擎实例的属性值 |
| setProperty(name : string) | name有这些枚举值“rate, vioce,vioces,volumn | → object | 设置当前引擎实例的属性值 |
| say(text : unicode, name : string) | text:要进行朗读的文本数据; name: 关联发音人,一般用不到 | → None | 预设要朗读的文本数据,这也是“万事俱备,只欠东风”中的“万事俱备” |
| runAndWait() | None | → None | 这个方法就是“东风”了。当事件队列中事件全部清空的时候返回 |
| startLoop([useDriverLoop : bool]) | useDriverLoop:是否启用驱动循环 | → None | 开启事件队列 |
Voice对象元数据
pyttsx3.voice.Voice类用于封装合成器的发音属性,包含以下关键字段:
age
表示发音人的年龄,默认值为None。
gender
表示发音人的性别,类型为字符串,可选值包括male(男性)、female(女性)或neutral(中性),默认值为None。
id
Voice对象的唯一标识字符串。通过pyttsx3.engine.Engine.setPropertyValue()方法可以设置当前活动的发音签名。该属性始终被定义,用于区分不同的声音配置。
languages
表示该发音支持的语言列表。如果未指定支持语言,则返回空列表。
name
发音人的名称,默认值为None,用于标识特定的声音配置。
核心功能代码示例
功能实现与测试
基础文本朗读
import pyttsx3
engine = pyttsx3.init()
engine.say('Sally sells seashells by the seashore.')
engine.say('The quick brown fox jumped over the lazy dog.')
engine.runAndWait()
事件监听机制
import pyttsx3
def onStart(name):
print 'starting', name
def onWord(name, location, length):
print 'word', name, location, length
def onEnd(name, completed):
print 'finishing', name, completed
engine = pyttsx3.init()
engine.say('The quick brown fox jumped over the lazy dog.')
engine.runAndWait()
发音打断控制
import pyttsx3
def onWord(name, location, length):
print('word', name, location, length)
if location > 10:
engine.stop()
engine = pyttsx3.init()
engine.say('The quick brown fox jumped over the lazy dog.')
engine.runAndWait()
更换发音人声音
engine = 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()
语速调节
engine = pyttsx3.init()
rate = engine.getProperty('rate')
engine.setProperty('rate', rate+50)
engine.say('The quick brown fox jumped over the lazy dog.')
engine.runAndWait()
音量调节
engine = 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()
内部事件驱动循环
engine = pyttsx3.init()
def onStart(name):
print('starting', name)
def onWord(name, location, length):
print('word', name, location, length)
def onEnd(name, completed):
print('finishing', 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()
外部驱动循环集成
engine = pyttsx3.init()
engine.say('The quick brown fox jumped over the lazy dog.', 'fox')
engine.startLoop(False)
# engine.iterate() must be called inside externalLoop()
externalLoop()
engine.endLoop()
综上所述,pyttsx3提供了灵活且强大的文字转语音解决方案。通过合理配置参数和利用事件监听,开发者可以构建出符合特定需求的语音合成应用。希望本文的内容能对读者的学习和工作有所帮助。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









