Python pyttsx3 文字转语音完整指南:从安装到高级控制

许南星
许南星
发布时间:2026-10-13| 4人浏览过
原创

本文详细介绍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提供了灵活且强大的文字转语音解决方案。通过合理配置参数和利用事件监听,开发者可以构建出符合特定需求的语音合成应用。希望本文的内容能对读者的学习和工作有所帮助。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。