关注「索引目录」公众号,获取更多干货。
你是否曾经想过直接在电脑上将文本转换成自然流畅的语音?有了 Python,这一切变得前所未有的简单!通过结合 Microsoft Edge 的神经语音(通过edge-tts库)和 Python 内置的tkinterGUI 框架,我们可以创建一个简单而强大的文本转语音 (TTS) 应用程序。
这个项目允许您输入文本(或上传文件),选择语音,调整语速,并将输出保存为 MP3 音频文件。
✨ 特点
- 🎤 多种语音选项
支持多种神经语音,例如美式英语、英式英语、澳大利亚英语、加拿大英语、西班牙语等。 - ⚡ 可自定义语速
使用滑块将语速从 -50%(减慢)调整到 +50%(加快)。 - 📝 灵活的文本输入方式:
直接输入文本或上传文本文件。 - 💾 导出为 MP3
将生成的语音保存到您喜欢的位置。 - 🖥️ 简洁的图形用户
界面 tkinter,提供简单易用的界面。
依赖关系
请确保您的系统已安装 Python 3.7 或更高版本。然后,安装该edge-tts模块:
pip install edge-tts
📦 安装
-
克隆仓库:
git clone https://github.com/smoothcoode/edge-tts-gui
cd edge-tts-gui
-
安装依赖项:
pip install edge-tts
-
运行应用程序:
python main.py
🗣️列出可用语音
要查看所有可用的神经语音,请运行:
python -m edge_tts --list-voices
你会发现有很多种声音可以尝试。
🧑💻 源代码
以下是驱动该应用程序的完整 Python 脚本:
import edge_tts
import tkinter as tk
from tkinter import ttk, messagebox, filedialog
import asyncio
async def generate_audio(text, voice, rate, output_file):
communicate = edge_tts.Communicate(text=text, voice=voice, rate=rate)
await communicate.save(output_file)
messagebox.showinfo("Success", "File saved successfully: " + output_file)
# Initialize main window
root = tk.Tk()
root.title("Text to Speech")
root.geometry("600x400")
# Voice selection
VOICES = [
"en-US-AndrewNeural", "en-US-AriaNeural", "en-US-AshTurboMultilingualNeural",
"en-US-AshleyNeural", "en-US-AvaMultilingualNeural", "en-US-AvaNeural"
]
ttk.Label(root, text="Select a Voice:").grid(column=0, row=0, padx=10, pady=10, sticky="w")
voice_var = tk.StringVar(value=VOICES[0])
voice_dropdown = ttk.Combobox(root, values=VOICES, textvariable=voice_var, state="readonly")
voice_dropdown.grid(row=0, column=1, padx=10, pady=10, sticky="ew")
root.columnconfigure(1, weight=3)
# Speed slider
ttk.Label(root, text="Select a speed Rate").grid(row=1, column=0, padx=10, pady=10, sticky="w")
speed_var = tk.IntVar(value=0)
speed_slider = ttk.Scale(root, from_=-50, to=50, orient="horizontal", variable=speed_var)
speed_slider.grid(row=1, column=1, padx=10, pady=10, sticky="ew")
# Text input
ttk.Label(root, text="Enter a text").grid(row=2, column=0, padx=10, pady=10, sticky="w")
text_box = tk.Text(root, wrap="word")
text_box.grid(row=2, column=1, padx=10, pady=10, sticky="nsew")
root.rowconfigure(2, weight=1)
# Upload file button
def on_upload():
file_path = filedialog.askopenfilename(filetypes=[("Text File", "*.txt")])
if file_path:
with open(file_path, "r") as f:
content = f.read()
text_box.delete("1.0", tk.END)
text_box.insert("1.0", content)
upload_button = ttk.Button(root, text="Upload a text", command=on_upload)
upload_button.grid(row=3, column=1, padx=10, pady=10, sticky="e")
# Generate audio
def on_generate_audio():
voice = voice_var.get()
rate = speed_var.get()
rate_str = f"+{rate}%" if rate >= 0 else f"{rate}%"
text = text_box.get("1.0", tk.END).strip()
if not text:
messagebox.showwarning("Warning", "No text Provided")
return
output_file = filedialog.asksaveasfilename(defaultextension=".mp3", filetypes=[("MP3", "*.mp3")])
if not output_file:
return
asyncio.run(generate_audio(text=text, voice=voice, rate=rate_str, output_file=output_file))
generate_button = ttk.Button(root, text="Generate Audio", command=on_generate_audio)
generate_button.grid(row=4, column=1, padx=10, pady=10)
# Run the GUI
root.mainloop()
🚀 结论
对于任何想要探索 Python 文本转语音应用的人来说,这个项目都是一个很好的起点。通过利用 `TextToSpeech`edge-tts和`TextToSpeech` tkinter,你可以创建一个功能齐全的 GUI 工具,让文本以自然流畅的语音形式呈现。
无论您是想为文章配音、构建辅助功能工具,还是想尝试语音合成,这个 Python TTS GUI 都是一个实用且有趣的尝试项目。
关注「索引目录」公众号,获取更多干货。

