程序效果图
转换后的声音效果
- 英文腔调
- 中文腔调
在本教程中,我们将使用 Python 和一些流行的库来创建一个简单的文本转语音应用程序。这个应用程序将允许用户输入文本,并将其转换为语音,然后可以预览和保存生成的语音文件。
准备工作
在开始之前,请确保你已经安装了以下库:
tkinter
:Python 的标准 GUI 库,用于创建应用程序的用户界面。gtts
:Google Text-to-Speech,用于将文本转换为语音。pygame
:用于播放音频文件。os
:用于文件操作。datetime
:用于生成时间戳。
你可以使用 pip
来安装这些库:
pip install gtts pygame
创建应用程序
我们将创建一个包含以下功能的应用程序:
- 文本输入框供用户输入要转换的文本。
- 单选按钮选择要转换的语言。
- “预览声音”按钮用于播放最近生成的语音文件。
- “另存为”按钮用于将最近生成的语音文件另存为用户指定的位置。
下面是完整的代码:
import tkinter as tk
from tkinter import filedialog
from gtts import gTTS
import pygame
import os
from datetime import datetime
class TextToSpeechApp:
def __init__(self, root):
self.root = root
self.root.title("Text to Speech App")
self.root.geometry("500x350")
self.label_text = tk.Label(root, text="请输入要转换为语音的文本:")
self.label_text.grid(row=0, column=0, sticky="w", padx=10, pady=10)
self.text_entry = tk.Text(root, width=60, height=10, wrap="word")
self.text_entry.grid(row=1, column=0, padx=10, pady=(0, 10))
self.language_var = tk.StringVar()
self.language_var.set("en")
self.languages = [("英文", "en"), ("中文", "zh"), ("法文", "fr"), ("德文", "de")]
self.language_label = tk.Label(root, text="选择语言:")
self.language_label.grid(row=2, column=0, sticky="w", padx=10, pady=(0, 5))
self.language_frame = tk.Frame(root)
self.language_frame.grid(row=3, column=0, padx=10, pady=5, sticky="w")
for i, (lang_name, lang_code) in enumerate(self.languages):
rb = tk.Radiobutton(self.language_frame, text=lang_name, variable=self.language_var, value=lang_code)
rb.grid(row=0, column=i, padx=(0, 10))
self.file_label = tk.Label(root, text="")
self.file_label.grid(row=4, column=0, padx=10, pady=(10, 5), sticky="w")
self.file_counter = 1
self.recent_files = []
self.text_entry.bind("<FocusOut>", self.convert_to_speech)
self.language_var.trace_add("write", self.convert_to_speech)
self.button_preview = tk.Button(root, text="预览声音", command=self.preview_sound)
self.button_preview.grid(row=5, column=0, padx=10, pady=5)
self.button_save_as = tk.Button(root, text="另存为", command=self.save_as)
self.button_save_as.grid(row=6, column=0, padx=10, pady=5)
def convert_to_speech(self, *args):
text = self.text_entry.get("1.0", "end-1c")
lang = self.language_var.get()
if text:
tts = gTTS(text=text, lang=lang)
timestamp = datetime.now().strftime("%Y%m%d%H%M%S")
filename = f"output-{timestamp}-{lang}-{self.file_counter}.mp3"
tts.save(filename)
self.recent_files.append(filename)
if len(self.recent_files) > 3:
os.remove(self.recent_files.pop(0)) # 删除最旧的文件
self.file_label.config(text=f"音频文件已生成:{filename}")
self.file_counter += 1
else:
self.file_label.config(text="请输入要转换的文本!")
def preview_sound(self):
if self.recent_files:
pygame.init()
pygame.mixer.init()
pygame.mixer.music.load(os.path.abspath(self.recent_files[-1]))
pygame.mixer.music.play()
else:
self.file_label.config(text="没有可预览的音频文件!")
def save_as(self):
if hasattr(self, 'filename'):
save_path = filedialog.asksaveasfilename(defaultextension=".mp3")
if save_path:
import shutil
shutil.copy(self.filename, save_path)
self.file_label.config(text=f"音频文件已保存为:{save_path}")
else:
self.file_label.config(text="保存取消!")
else:
self.file_label.config(text="请先生成音频文件!")
def main():
root = tk.Tk()
app = TextToSpeechApp(root)
root.mainloop()
if __name__ == "__main__":
main()
运行应用程序
保存上述代码为 text_to_speech.py
文件,然后在终端中运行它:
python text_to_speech.py
这将打开一个图形用户界面,你可以在其中输入文本,选择语言,预览声音,并将声音另存为 MP3 文件。
现在,你已经学会了如何使用 Python 创建一个简单的文本转语音应用程序!