利用Python的Pyttsx3库实现离线文字转语音(TTS)功能 您所在的位置:网站首页 python的视频转音频的库比较 利用Python的Pyttsx3库实现离线文字转语音(TTS)功能

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

2024-06-10 04:04| 来源: 网络整理| 查看: 265

项目中需要一个语言模块,之前用微软的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。以下是一个简单的示例程序,展示了如何实现这样的功能:

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

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

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" 按钮则可试听文本的语音输出。注意,pyttsx3 的 save_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。选择语音:用户可以从系统支持的语音中选择一个。

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有