利用Python的Pyttsx3库实现离线文字转语音(TTS)功能

文章介绍了在项目中替换微软TTS的需求,推荐了Python中的Pyttsx3库,它支持跨平台的文本到语音(TTS)转换,包括控制语音速度、音量和选择不同语音。还展示了如何在GUI应用程序中集成Pyttsx3,实现文本转语音并保存为MP3的功能。
摘要由CSDN通过智能技术生成

项目中需要一个语言模块,之前用微软的TTS其实挺好用的,但是不开源,离线也不好整,打算找个轻量化的,然后发现,Python里Pyttsx3库已经能完美实现我的需求了

Pyttsx3

Pyttsx3是一个Python库,用于将文本转换成语音。它是跨平台的,可以在Windows、MacOS和Linux上运行。Pyttsx3实际上是一个文本到语音转换(TTS)的接口,背后支持使用系统内置的语音引擎,比如Windows上的SAPI5、MacOS上的NSSpeechSynthesizer,以及Linux上的espeak。

使用pyttsx3,你可以控制语音的速度、音量和语调,并且可以选择不同的语音(如果系统支持的话)。这个库不依赖于互联网连接,因此非常适合需要在没有网络环境下使用语音功能的应用。

示例

这里有一个基本的使用pyttsx3的例子:

import pyttsx3

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

# 设置要说的话
engine.say("Hello, how are you?")

# 运行
engine.runAndWait()

中文的话,也是直接输进去就行

import pyttsx3

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

# 设置要说的话
engine.say("你有这么高速运转的机械进入中国记住我给出的原理")

# 运行
engine.runAndWait()

下面搞些好玩的,比如整个GUI界面

GUI界面使用

为了实现一个具有图形用户界面的程序,其中使用 pyttsx3 库来将文本转化为语音并保存为 MP3 文件,我们可以使用 Python 的 Tkinter 库来构建 GUI。以下是一个简单的示例程序,展示了如何实现这样的功能:

  1. 创建一个窗口,其中包含两个输入框:一个用于输入文本,另一个用于输入文件名。
  2. 添加两个按钮:一个用于保存语音为 MP3 文件,另一个用于试听输入的文本。
  3. 使用 pyttsx3 来生成语音,并利用其将生成的语音保存为文件。

首先,确保你已经安装了 pyttsx3tkinter 库。如果未安装,可以通过以下命令安装:

pip install pyttsx3

tkinter 通常作为 Python 的标准库自带,不需要额外安装。

以下是代码的实现:

import tkinter as tk
from tkinter import simpledialog
import pyttsx3
import datetime
import os

def save_speech():
    text = text_entry.get("1.0", "end-1c")
    filename = filename_entry.get()
    if not filename:
        filename = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
    filename += ".mp3"
    
    engine = pyttsx3.init()
    engine.save_to_file(text, filename)
    engine.runAndWait()
    label_status.config(text=f"Saved as {filename}")

def preview_speech():
    text = text_entry.get("1.0", "end-1c")
    engine = pyttsx3.init()
    engine.say(text)
    engine.runAndWait()

root = tk.Tk()
root.title("Text to Speech Converter")

tk.Label(root, text="Enter Text:").pack()
text_entry = tk.Text(root, height=10, width=50)
text_entry.pack()

tk.Label(root, text="Enter Filename (optional):").pack()
filename_entry = tk.Entry(root)
filename_entry.pack()

save_button = tk.Button(root, text="Save to MP3", command=save_speech)
save_button.pack(pady=5)

preview_button = tk.Button(root, text="Preview", command=preview_speech)
preview_button.pack(pady=5)

label_status = tk.Label(root, text="")
label_status.pack()

root.mainloop()

这段代码创建了一个基本的界面,用户可以在其中输入文本和文件名。点击 "Save to MP3" 按钮将文本保存为 MP3 文件,而点击 "Preview" 按钮则可试听文本的语音输出。注意,pyttsx3save_to_file 方法可能在不同的系统和版本中行为有所不同,因此建议在开发中检查相关的库文档和兼容性问题。

进一步修改GUI

进一步的,我们可以在GUI中添加控制语速、音量和语调的选项,同时还可以提供一个下拉菜单来选择不同的语音。在下面的程序中,我将把所有界面元素的文本设置为中文,并增加调整这些语音属性的控件。

import tkinter as tk
from tkinter import simpledialog, ttk
import pyttsx3
import datetime

def save_speech():
    text = text_entry.get("1.0", "end-1c")
    filename = filename_entry.get()
    if not filename:
        filename = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
    filename += ".mp3"
    
    engine = pyttsx3.init()
    engine.setProperty('rate', int(rate_entry.get()))
    engine.setProperty('volume', float(volume_entry.get())/100)
    engine.setProperty('voice', voice_var.get())
    engine.save_to_file(text, filename)
    engine.runAndWait()
    status_label.config(text=f"文件已保存为:{filename}")

def preview_speech():
    text = text_entry.get("1.0", "end-1c")
    engine = pyttsx3.init()
    engine.setProperty('rate', int(rate_entry.get()))
    engine.setProperty('volume', float(volume_entry.get())/100)
    engine.setProperty('voice', voice_var.get())
    engine.say(text)
    engine.runAndWait()

root = tk.Tk()
root.title("文字转语音转换器")

tk.Label(root, text="输入文本:").pack()
text_entry = tk.Text(root, height=10, width=50)
text_entry.pack()

tk.Label(root, text="文件名(可选):").pack()
filename_entry = tk.Entry(root)
filename_entry.pack()

tk.Label(root, text="语速(0-200):").pack()
rate_entry = tk.Entry(root)
rate_entry.insert(0, '150')  # 默认语速
rate_entry.pack()

tk.Label(root, text="音量(0-100):").pack()
volume_entry = tk.Entry(root)
volume_entry.insert(0, '100')  # 默认音量
volume_entry.pack()

tk.Label(root, text="选择语音:").pack()
voice_var = tk.StringVar(root)
voices_combo = ttk.Combobox(root, textvariable=voice_var, state="readonly")
engine = pyttsx3.init()
voices = engine.getProperty('voices')
voices_combo['values'] = [voice.id for voice in voices]
voices_combo.current(0)
voices_combo.pack()

save_button = tk.Button(root, text="保存为MP3", command=save_speech)
save_button.pack(pady=5)

preview_button = tk.Button(root, text="试听", command=preview_speech)
preview_button.pack(pady=5)

status_label = tk.Label(root, text="")
status_label.pack()

root.mainloop()

这个程序包含了以下功能:

  • 输入文本:用户可以输入想要转换的文本。
  • 文件名:用户可以自定义保存的文件名,默认使用当前时间戳。
  • 语速设置:用户可以通过输入一个数值(0到200)来调整语速。
  • 音量设置:用户可以调整音量,范围从0到100。
  • 选择语音:用户可以从系统支持的语音中选择一个。

这样,用户就可以根据自己的需要调整语音输出的各种属性。这些设置会在保存文件或者试听时被应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sagima_sdu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值