社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

pyttsx3, 一个神奇的 Python 库

程序员老朱 • 9 月前 • 617 次点击  

在现代应用程序中,文本转语音(Text-to-Speech, TTS)技术越来越受到重视。pyttsx3库可以帮助你轻松实现文本转语音功能。

在各种操作系统上, 会使用系统默认的语音合成器(Windows:SAPI5,Linux/macOS:espeak)

一、安装

pip install pyttsx3

安装好,我们创建一个main.py文件,输入下面代码:

import pyttsx3
pyttsx3.speak("I will speak this text")

运行脚本,就能朗读文本内容。

python main.py

二、具体执行

  1. 初始化语音引擎
  2. 设置语音参数(语速、音量、声音类型)
  3. 朗读文本
  4. 将语音保存为音频文件

2.1、初始化语音引擎

engine = pyttsx3.init()

# windows
engine = pyttsx3.init(driverName="sapi5")
# linux, 需要编译安装espeak支持
engine = pyttsx3.init(driverName="espeak")

2.2  设置语音参数

  • 「语速设置(RATE)」
rate = engine.getProperty('rate')  # 获取当前语速(默认约200)
engine.setProperty( 'rate', 125)    # 设置较慢的语速(125字/分钟)
  • 「音量设置(VOLUME)」
volume = engine.getProperty('volume')  # 获取当前音量(0.0-1.0)
engine.setProperty('volume', 1.0)      # 设置最大音量
  • 「声音选择(VOICE)」
voices = engine.getProperty('voices')  # 获取可用声音列表
for voice in voices:
    print(f"支持的声音列表: {voice}")

# 输出如下内容,我们可以中文,英文等。 
.0
          name=Microsoft Huihui Desktop - Chinese (Simplified)
          languages=['zh-CN']
          gender=Female
          age=Adult>
.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提供了事件回调机制,可以在语音开始、结束或发生错误时执行特定操作:

def onStart(name):
    print(f'开始: {name}')

def onWord(name, location, length):
    print(f'词: {name}, 位置: {location}, 长度: {length}')

def onEnd(name, completed):
    print(f'结束: {name}, 完成: {completed}')

def onError(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()

四、「注意事项」

  1. 「阻塞与非阻塞」:runAndWait() 是阻塞方法,确保语音播放完毕后再继续程序。
  2. 「异步支持」:可通过事件循环实现异步(参考 engine.startLoop())。
  3. 「跨平台差异」:不同系统的语音质量和可用声音可能不同,Windows 通常支持更丰富的声音。
  4. 「中文支持」:部分系统需额外配置中文语音库(如 Linux 安装中文语音包)。

五、「常见问题」

  • 「报错 No module named 'pyttsx3'」:确认是否已安装库,或尝试重启 Python 环境。
  • 「无法播放中文」:检查系统是否支持中文语音(Windows 可在“设置-语音”中管理语音包)。
  • 「保存文件失败」:确保路径可写,或尝试使用绝对路径。

通过上述步骤,你可以轻松使用 pyttsx3 实现文本转语音功能。


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/192394