赞
踩
项目中需要一个语言模块,之前用微软的TTS其实挺好用的,但是不开源,离线也不好整,打算找个轻量化的,然后发现,Python里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界面
为了实现一个具有图形用户界面的程序,其中使用 pyttsx3 库来将文本转化为语音并保存为 MP3 文件,我们可以使用 Python 的 Tkinter 库来构建 GUI。以下是一个简单的示例程序,展示了如何实现这样的功能:
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()
这个程序包含了以下功能:
这样,用户就可以根据自己的需要调整语音输出的各种属性。这些设置会在保存文件或者试听时被应用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。