tts-api commited on
Commit
dd9be87
·
verified ·
1 Parent(s): 45da436

Update edge-tts.py

Browse files
Files changed (1) hide show
  1. edge-tts.py +98 -96
edge-tts.py CHANGED
@@ -1,97 +1,99 @@
1
- import tkinter as tk
2
- from tkinter import messagebox, ttk
3
- import threading
4
- import os
5
- import asyncio
6
- import edge_tts
7
- from playsound3 import playsound
8
-
9
- os.makedirs("tts_outputs", exist_ok=True)
10
-
11
- VOICE_DATA = {
12
- "Arabic (Egypt) - Salma": "ar-EG-SalmaNeural",
13
- "Arabic (Egypt) - Shakir": "ar-EG-ShakirNeural",
14
- "Arabic (Saudi) - Zariyah": "ar-SA-ZariyahNeural",
15
- "English (US) - Guy": "en-US-GuyNeural",
16
- "English (US) - Ava": "en-US-AvaNeural",
17
- "English (UK) - Sonia": "en-GB-SoniaNeural"
18
- }
19
-
20
- class EdgeTTSApp:
21
- def __init__(self, root):
22
- self.root = root
23
- self.root.title("Advanced Edge TTS - Professional")
24
- self.root.geometry("650x650")
25
- self.root.configure(bg="#f2f4f7")
26
- self.root.resizable(False, False)
27
- self.setup_ui()
28
-
29
- def setup_ui(self):
30
- title_label = tk.Label(
31
- self.root, text="Edge-TTS Voice Generator",
32
- font=("Arial", 20, "bold"), fg="#1A73E8", bg="#f2f4f7"
33
- )
34
- title_label.pack(pady=20)
35
-
36
- tk.Label(self.root, text="Enter your text below:", font=("Arial", 11, "bold"), bg="#f2f4f7").pack(anchor="w", padx=40)
37
- self.text_input = tk.Text(self.root, height=10, width=70, font=("Arial", 11), relief="solid", bd=1)
38
- self.text_input.pack(pady=10, padx=40)
39
-
40
- settings_frame = tk.Frame(self.root, bg="#f2f4f7")
41
- settings_frame.pack(pady=10, fill="x", padx=40)
42
-
43
- tk.Label(settings_frame, text="Select Voice:", font=("Arial", 10, "bold"), bg="#f2f4f7").grid(row=0, column=0, sticky="w")
44
- self.voice_var = tk.StringVar(value="Arabic (Egypt) - Salma")
45
- self.voice_menu = ttk.Combobox(settings_frame, textvariable=self.voice_var, values=list(VOICE_DATA.keys()), state="readonly", width=30)
46
- self.voice_menu.grid(row=1, column=0, pady=5, padx=(0, 20))
47
-
48
- tk.Label(settings_frame, text="Speed (Rate):", font=("Arial", 10, "bold"), bg="#f2f4f7").grid(row=0, column=1, sticky="w")
49
- self.speed_var = tk.StringVar(value="+0%")
50
- self.speed_menu = ttk.Combobox(settings_frame, textvariable=self.speed_var, values=["-50%", "-25%", "+0%", "+25%", "+50%"], state="readonly", width=10)
51
- self.speed_menu.grid(row=1, column=1, pady=5)
52
-
53
- self.convert_button = tk.Button(
54
- self.root, text="Generate & Play Speech",
55
- command=self.start_conversion,
56
- font=("Arial", 13, "bold"), bg="#4CAF50", fg="white",
57
- padx=30, pady=12, relief="raised", cursor="hand2"
58
- )
59
- self.convert_button.pack(pady=30)
60
-
61
- footer = tk.Label(
62
- self.root, text="Free Unlimited Neural TTS | No API Key Required",
63
- font=("Arial", 9, "italic"), fg="#777", bg="#f2f4f7"
64
- )
65
- footer.pack(side="bottom", pady=20)
66
-
67
- async def _generate_audio_task(self, text, voice, rate, output_path):
68
- communicate = edge_tts.Communicate(text, voice, rate=rate)
69
- await communicate.save(output_path)
70
-
71
- def process_conversion(self):
72
- text = self.text_input.get("1.0", tk.END).strip()
73
- if not text:
74
- messagebox.showwarning("Warning", "Please enter some text first!")
75
- return
76
-
77
- selected_voice_name = self.voice_var.get()
78
- voice_id = VOICE_DATA[selected_voice_name]
79
- speed = self.speed_var.get()
80
-
81
- output_path = os.path.join("tts_outputs", "final_output.mp3")
82
-
83
- try:
84
- asyncio.run(self._generate_audio_task(text, voice_id, speed, output_path))
85
- playsound(output_path)
86
- messagebox.showinfo("Success", f"Audio generated successfully using {selected_voice_name}!")
87
-
88
- except Exception as e:
89
- messagebox.showerror("Error", f"An error occurred: {str(e)}")
90
-
91
- def start_conversion(self):
92
- threading.Thread(target=self.process_conversion, daemon=True).start()
93
-
94
- if __name__ == "__main__":
95
- root = tk.Tk()
96
- app = EdgeTTSApp(root)
 
 
97
  root.mainloop()
 
1
+ import tkinter as tk
2
+ from tkinter import messagebox, ttk
3
+ import threading
4
+ import os
5
+ import asyncio
6
+ import edge_tts
7
+ from playsound3 import playsound
8
+
9
+ os.makedirs("tts_outputs", exist_ok=True)
10
+
11
+ VOICE_DATA = {
12
+ "Arabic (Egypt) - Salma": "ar-EG-SalmaNeural",
13
+ "Arabic (Egypt) - Shakir": "ar-EG-ShakirNeural",
14
+ "Arabic (Saudi) - Zariyah": "ar-SA-ZariyahNeural",
15
+ "Arabic (Saudi) - Hamed": "ar-SA-HamedNeural",
16
+ "English (US) - Guy": "en-US-GuyNeural",
17
+ "English (US) - Ava": "en-US-AvaNeural",
18
+ "English (UK) - Sonia": "en-GB-SoniaNeural",
19
+ "English (UK) - Ryan": "en-GB-RyanNeural",
20
+ }
21
+
22
+ class EdgeTTSApp:
23
+ def __init__(self, root):
24
+ self.root = root
25
+ self.root.title("Advanced Edge TTS - Professional")
26
+ self.root.geometry("650x650")
27
+ self.root.configure(bg="#f2f4f7")
28
+ self.root.resizable(False, False)
29
+ self.setup_ui()
30
+
31
+ def setup_ui(self):
32
+ title_label = tk.Label(
33
+ self.root, text="Edge-TTS Voice Generator",
34
+ font=("Arial", 20, "bold"), fg="#1A73E8", bg="#f2f4f7"
35
+ )
36
+ title_label.pack(pady=20)
37
+
38
+ tk.Label(self.root, text="Enter your text below:", font=("Arial", 11, "bold"), bg="#f2f4f7").pack(anchor="w", padx=40)
39
+ self.text_input = tk.Text(self.root, height=10, width=70, font=("Arial", 11), relief="solid", bd=1)
40
+ self.text_input.pack(pady=10, padx=40)
41
+
42
+ settings_frame = tk.Frame(self.root, bg="#f2f4f7")
43
+ settings_frame.pack(pady=10, fill="x", padx=40)
44
+
45
+ tk.Label(settings_frame, text="Select Voice:", font=("Arial", 10, "bold"), bg="#f2f4f7").grid(row=0, column=0, sticky="w")
46
+ self.voice_var = tk.StringVar(value="Arabic (Egypt) - Salma")
47
+ self.voice_menu = ttk.Combobox(settings_frame, textvariable=self.voice_var, values=list(VOICE_DATA.keys()), state="readonly", width=30)
48
+ self.voice_menu.grid(row=1, column=0, pady=5, padx=(0, 20))
49
+
50
+ tk.Label(settings_frame, text="Speed (Rate):", font=("Arial", 10, "bold"), bg="#f2f4f7").grid(row=0, column=1, sticky="w")
51
+ self.speed_var = tk.StringVar(value="+0%")
52
+ self.speed_menu = ttk.Combobox(settings_frame, textvariable=self.speed_var, values=["-50%", "-25%", "+0%", "+25%", "+50%"], state="readonly", width=10)
53
+ self.speed_menu.grid(row=1, column=1, pady=5)
54
+
55
+ self.convert_button = tk.Button(
56
+ self.root, text="Generate & Play Speech",
57
+ command=self.start_conversion,
58
+ font=("Arial", 13, "bold"), bg="#4CAF50", fg="white",
59
+ padx=30, pady=12, relief="raised", cursor="hand2"
60
+ )
61
+ self.convert_button.pack(pady=30)
62
+
63
+ footer = tk.Label(
64
+ self.root, text="Free Unlimited Neural TTS | No API Key Required",
65
+ font=("Arial", 9, "italic"), fg="#777", bg="#f2f4f7"
66
+ )
67
+ footer.pack(side="bottom", pady=20)
68
+
69
+ async def _generate_audio_task(self, text, voice, rate, output_path):
70
+ communicate = edge_tts.Communicate(text, voice, rate=rate)
71
+ await communicate.save(output_path)
72
+
73
+ def process_conversion(self):
74
+ text = self.text_input.get("1.0", tk.END).strip()
75
+ if not text:
76
+ messagebox.showwarning("Warning", "Please enter some text first!")
77
+ return
78
+
79
+ selected_voice_name = self.voice_var.get()
80
+ voice_id = VOICE_DATA[selected_voice_name]
81
+ speed = self.speed_var.get()
82
+
83
+ output_path = os.path.join("tts_outputs", "final_output.mp3")
84
+
85
+ try:
86
+ asyncio.run(self._generate_audio_task(text, voice_id, speed, output_path))
87
+ playsound(output_path)
88
+ messagebox.showinfo("Success", f"Audio generated successfully using {selected_voice_name}!")
89
+
90
+ except Exception as e:
91
+ messagebox.showerror("Error", f"An error occurred: {str(e)}")
92
+
93
+ def start_conversion(self):
94
+ threading.Thread(target=self.process_conversion, daemon=True).start()
95
+
96
+ if __name__ == "__main__":
97
+ root = tk.Tk()
98
+ app = EdgeTTSApp(root)
99
  root.mainloop()