使用 Python 的 pyttsx3 库进行文本转语音

1. 什么是 pyttsx3?

1.1 pyttsx3 是一个 Python 库,它可以将文本转换为语音。与其他文本转语音库(如 gTTS)不同,pyttsx3 不依赖于网络服务,它使用本地的 TTS(Text-to-Speech)引擎,这使得它在离线状态下也能正常工作

1.2 pyttsx3 支持多平台(Windows、Linux 和 macOS),且可以对语音的音量、语速以及语音类型等进行控制

2. 安装 pyttsx3

要使用 pyttsx3,首先需要在你的 Python 环境中安装该库

你可以通过以下命令安装它:

复制代码
pip install pyttsx3

安装完成后,就可以开始使用它来生成语音了

3. 使用 pyttsx3 播放文本

下面是一个简单的示例,展示了如何使用 pyttsx3 库将文本转换为语音

示例代码:

复制代码
import pyttsx3

# 初始化 pyttsx3 引擎
engine = pyttsx3.init()

# 要转换的文本
text = "你好,欢迎使用 pyttsx3 库进行文本转语音转换。"

# 播放文本
engine.say(text)

# 等待语音播放完毕
engine.runAndWait()

在这段代码中,我们首先通过 pyttsx3.init() 初始化了语音引擎

然后通过 say() 方法将文本添加到语音队列中,最后通过 runAndWait() 方法让引擎开始播放并等待播放结束

4. 控制语音的参数

pyttsx3 库提供了几个可以控制语音效果的参数,包括音量、语速和语音类型

下面是如何调整这些参数的示例

控制音量

音量的取值范围是 0.0 到 1.0,默认值通常为 1.0

你可以通过 setProperty() 方法来设置音量

复制代码
engine.setProperty('volume', 0.9)  # 设置音量为 90%
控制语速

语速的默认值通常是 200(单位:字/分钟),你可以使用 setProperty() 方法来设置语速

复制代码
engine.setProperty('rate', 150)  # 设置语速为 150(单位:字/分钟)
控制语音类型

pyttsx3 允许你选择不同的语音引擎

你可以查看可用的语音列表并选择不同的语音类型(例如男声或女声)

复制代码
voices = engine.getProperty('voices')  # 获取可用的语音列表

# 打印出可用的语音类型
for voice in voices:
    print(f"ID: {voice.id}, Name: {voice.name}, Lang: {voice.languages}")

# 设置使用第一个语音(通常是男性语音)
engine.setProperty('voice', voices[0].id)

你可以通过循环输出所有的语音选项,选择你想要的语音

例如,你可以选择一个女性的语音或者不同的语言

5. 保存语音到文件

pyttsx3 默认是播放语音,而不是保存语音文件

如果你希望将生成的语音保存到一个文件中,pyttsx3 本身并没有直接支持输出到文件的功能,但你可以使用其他工具结合来实现,例如 pydub 或其他音频处理库

如果你有兴趣,可以查看下面的代码片段,它展示了如何使用 pydub 将 pyttsx3 的输出保存为 .mp3 文件:

复制代码
import pyttsx3
from pydub import AudioSegment
import os

# 使用 pyttsx3 生成语音并保存为 WAV 文件
engine = pyttsx3.init()
engine.save_to_file("你好,欢迎使用 pyttsx3 库进行文本转语音转换。", "output.wav")
engine.runAndWait()

# 使用 pydub 将 WAV 转换为 MP3
audio = AudioSegment.from_wav("output.wav")
audio.export("output.mp3", format="mp3")

# 删除临时的 WAV 文件
os.remove("output.wav")

6. 完整代码示例

下面是一个完整的示例代码,它演示了如何使用 pyttsx3 来控制音量、语速、语音类型,并将文本转换为语音:

复制代码
import pyttsx3

# 初始化 pyttsx3 引擎
engine = pyttsx3.init()

# 获取当前的音量、语速、语音设置
volume = engine.getProperty('volume')
rate = engine.getProperty('rate')
voices = engine.getProperty('voices')

# 输出当前设置
print(f"当前音量: {volume}")
print(f"当前语速: {rate}")
print(f"当前语音: {voices[0].name}")

# 设置新的属性
engine.setProperty('volume', 0.8)  # 设置音量为 80%
engine.setProperty('rate', 150)    # 设置语速为 150

# 设置使用不同的语音
engine.setProperty('voice', voices[1].id)  # 使用第二个语音(通常是女性语音)

# 要转换的文本
text = "你好,欢迎使用 pyttsx3 库进行文本转语音转换。"

# 播放文本
engine.say(text)

# 等待语音播放完毕
engine.runAndWait()

pyttsx3 是一个功能强大的文本转语音库,可以用于各种应用场景,如语音助手、自动化任务、盲人辅助工具等,通过简单的 API,用户可以轻松控制音量、语速和语音类型等参数,且无需依赖互联网服务,适合离线使用。

相关推荐
ITLiu_JH1 分钟前
scikit-surprise 智能推荐模块使用说明
开发语言·数据分析·智能推荐
聪明的墨菲特i4 分钟前
Python 办公技巧:PDF 自动化处理
python·pdf·自动化
User_芊芊君子9 分钟前
【Java】——数组深度解析(从内存原理到高效应用实践)
java·开发语言
Ronin-Lotus10 分钟前
深度学习篇---模型参数调优
人工智能·pytorch·python·深度学习·paddlepaddle·batch·学习率
林泽毅1 小时前
SwanLab硬件监控:英伟达、昇腾、寒武纪
python·深度学习·昇腾·英伟达·swanlab·寒武纪·训练实战
一 乐1 小时前
网红酒店|基于java+vue的网红酒店预定系统(源码+数据库+文档)
java·开发语言·数据库·毕业设计·论文·springboot·网红酒店预定系统
DARLING Zero two♡1 小时前
C++底层学习精进:模板进阶
开发语言·c++·模板
勘察加熊人2 小时前
c++生成html文件helloworld
开发语言·c++·html
小哲慢慢来2 小时前
解决auto_gptq安装问题
python
奔跑草-2 小时前
【服务端】使用conda虚拟环境部署Django项目
python·django·conda