hivecorp commited on
Commit
797d3e8
·
verified ·
1 Parent(s): 5651266

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +187 -474
app.py CHANGED
@@ -1,490 +1,203 @@
1
  import tempfile
2
-
3
  import edge_tts
4
  import gradio as gr
 
5
 
 
6
  language_dict = {
7
  "Hindi": {
8
- "Madhur": "hi-IN-MadhurNeural",
9
- "Swara": "hi-IN-SwaraNeural"
10
- },
11
- "English": {
12
- "Jenny": "en-US-JennyNeural",
13
- "Guy": "en-US-GuyNeural",
14
- "Ana": "en-US-AnaNeural",
15
- "Aria": "en-US-AriaNeural",
16
- "Brian": "en-US-BrianNeural",
17
- "Christopher": "en-US-ChristopherNeural",
18
- "Eric": "en-US-EricNeural",
19
- "Michelle": "en-US-MichelleNeural",
20
- "Roger": "en-US-RogerNeural",
21
- "Ava": "en-US-AvaMultilingualNeural",
22
- "Natasha": "en-AU-NatashaNeural",
23
- "William": "en-AU-WilliamNeural",
24
- "Clara": "en-CA-ClaraNeural",
25
- "Liam": "en-CA-LiamNeural",
26
- "Libby": "en-GB-LibbyNeural",
27
- "Maisie": "en-GB-MaisieNeural",
28
- "Ryan": "en-GB-RyanNeural",
29
- "Sonia": "en-GB-SoniaNeural",
30
- "Thomas": "en-GB-ThomasNeural",
31
- "Sam": "en-HK-SamNeural",
32
- "Yan": "en-HK-YanNeural",
33
- "Connor": "en-IE-ConnorNeural",
34
- "Emily": "en-IE-EmilyNeural",
35
- "Neerja": "en-IN-NeerjaNeural",
36
- "Prabhat": "en-IN-PrabhatNeural",
37
- "Asilia": "en-KE-AsiliaNeural",
38
- "Chilemba": "en-KE-ChilembaNeural",
39
- "Abeo": "en-NG-AbeoNeural",
40
- "Ezinne": "en-NG-EzinneNeural",
41
- "Mitchell": "en-NZ-MitchellNeural",
42
- "James": "en-PH-JamesNeural",
43
- "Rosa": "en-PH-RosaNeural",
44
- "Luna": "en-SG-LunaNeural",
45
- "Wayne": "en-SG-WayneNeural",
46
- "Elimu": "en-TZ-ElimuNeural",
47
- "Imani": "en-TZ-ImaniNeural",
48
- "Leah": "en-ZA-LeahNeural",
49
- "Luke": "en-ZA-LukeNeural"
50
- },
51
- "Spanish": {
52
- "Elena": "es-AR-ElenaNeural",
53
- "Tomas": "es-AR-TomasNeural",
54
- "Marcelo": "es-BO-MarceloNeural",
55
- "Sofia": "es-BO-SofiaNeural",
56
- "Gonzalo": "es-CO-GonzaloNeural",
57
- "Salome": "es-CO-SalomeNeural",
58
- "Juan": "es-CR-JuanNeural",
59
- "Maria": "es-CR-MariaNeural",
60
- "Belkys": "es-CU-BelkysNeural",
61
- "Emilio": "es-DO-EmilioNeural",
62
- "Ramona": "es-DO-RamonaNeural",
63
- "Andrea": "es-EC-AndreaNeural",
64
- "Luis": "es-EC-LuisNeural",
65
- "Alvaro": "es-ES-AlvaroNeural",
66
- "Elvira": "es-ES-ElviraNeural",
67
- "Teresa": "es-GQ-TeresaNeural",
68
- "Andres": "es-GT-AndresNeural",
69
- "Marta": "es-GT-MartaNeural",
70
- "Carlos": "es-HN-CarlosNeural",
71
- "Karla": "es-HN-KarlaNeural",
72
- "Federico": "es-NI-FedericoNeural",
73
- "Yolanda": "es-NI-YolandaNeural",
74
- "Margarita": "es-PA-MargaritaNeural",
75
- "Roberto": "es-PA-RobertoNeural",
76
- "Alex": "es-PE-AlexNeural",
77
- "Camila": "es-PE-CamilaNeural",
78
- "Karina": "es-PR-KarinaNeural",
79
- "Victor": "es-PR-VictorNeural",
80
- "Mario": "es-PY-MarioNeural",
81
- "Tania": "es-PY-TaniaNeural",
82
- "Lorena": "es-SV-LorenaNeural",
83
- "Rodrigo": "es-SV-RodrigoNeural",
84
- "Alonso": "es-US-AlonsoNeural",
85
- "Paloma": "es-US-PalomaNeural",
86
- "Mateo": "es-UY-MateoNeural",
87
- "Valentina": "es-UY-ValentinaNeural",
88
- "Paola": "es-VE-PaolaNeural",
89
- "Sebastian": "es-VE-SebastianNeural"
90
- },
91
- "Arabic": {
92
- "Hamed": "ar-SA-HamedNeural",
93
- "Zariyah": "ar-SA-ZariyahNeural",
94
- "Fatima": "ar-AE-FatimaNeural",
95
- "Hamdan": "ar-AE-HamdanNeural",
96
- "Ali": "ar-BH-AliNeural",
97
- "Laila": "ar-BH-LailaNeural",
98
- "Ismael": "ar-DZ-IsmaelNeural",
99
- "Salma": "ar-EG-SalmaNeural",
100
- "Shakir": "ar-EG-ShakirNeural",
101
- "Bassel": "ar-IQ-BasselNeural",
102
- "Rana": "ar-IQ-RanaNeural",
103
- "Sana": "ar-JO-SanaNeural",
104
- "Taim": "ar-JO-TaimNeural",
105
- "Fahed": "ar-KW-FahedNeural",
106
- "Noura": "ar-KW-NouraNeural",
107
- "Layla": "ar-LB-LaylaNeural",
108
- "Rami": "ar-LB-RamiNeural",
109
- "Iman": "ar-LY-ImanNeural",
110
- "Omar": "ar-LY-OmarNeural",
111
- "Jamal": "ar-MA-JamalNeural",
112
- "Mouna": "ar-MA-MounaNeural",
113
- "Abdullah": "ar-OM-AbdullahNeural",
114
- "Aysha": "ar-OM-AyshaNeural",
115
- "Amal": "ar-QA-AmalNeural",
116
- "Moaz": "ar-QA-MoazNeural",
117
- "Amany": "ar-SY-AmanyNeural",
118
- "Laith": "ar-SY-LaithNeural",
119
- "Hedi": "ar-TN-HediNeural",
120
- "Reem": "ar-TN-ReemNeural",
121
- "Maryam": "ar-YE-MaryamNeural",
122
- "Saleh": "ar-YE-SalehNeural"
123
- },
124
- "Korean": {
125
- "Sun-Hi": "ko-KR-SunHiNeural",
126
- "InJoon": "ko-KR-InJoonNeural"
127
- },
128
- "Thai": {
129
- "Premwadee": "th-TH-PremwadeeNeural",
130
- "Niwat": "th-TH-NiwatNeural"
131
- },
132
- "Vietnamese": {
133
- "HoaiMy": "vi-VN-HoaiMyNeural",
134
- "NamMinh": "vi-VN-NamMinhNeural"
135
- },
136
- "Japanese": {
137
- "Nanami": "ja-JP-NanamiNeural",
138
- "Keita": "ja-JP-KeitaNeural"
139
- },
140
- "French": {
141
- "Denise": "fr-FR-DeniseNeural",
142
- "Eloise": "fr-FR-EloiseNeural",
143
- "Henri": "fr-FR-HenriNeural",
144
- "Sylvie": "fr-CA-SylvieNeural",
145
- "Antoine": "fr-CA-AntoineNeural",
146
- "Jean": "fr-CA-JeanNeural",
147
- "Ariane": "fr-CH-ArianeNeural",
148
- "Fabrice": "fr-CH-FabriceNeural",
149
- "Charline": "fr-BE-CharlineNeural",
150
- "Gerard": "fr-BE-GerardNeural"
151
- },
152
- "Portuguese": {
153
- "Francisca": "pt-BR-FranciscaNeural",
154
- "Antonio": "pt-BR-AntonioNeural",
155
- "Duarte": "pt-PT-DuarteNeural",
156
- "Raquel": "pt-PT-RaquelNeural"
157
- },
158
- "Indonesian": {
159
- "Ardi": "id-ID-ArdiNeural",
160
- "Gadis": "id-ID-GadisNeural"
161
- },
162
- "Hebrew": {
163
- "Avri": "he-IL-AvriNeural",
164
- "Hila": "he-IL-HilaNeural"
165
- },
166
- "Italian": {
167
- "Isabella": "it-IT-IsabellaNeural",
168
- "Diego": "it-IT-DiegoNeural",
169
- "Elsa": "it-IT-ElsaNeural"
170
- },
171
- "Dutch": {
172
- "Colette": "nl-NL-ColetteNeural",
173
- "Fenna": "nl-NL-FennaNeural",
174
- "Maarten": "nl-NL-MaartenNeural",
175
- "Arnaud": "nl-BE-ArnaudNeural",
176
- "Dena": "nl-BE-DenaNeural"
177
- },
178
- "Malay": {
179
- "Osman": "ms-MY-OsmanNeural",
180
- "Yasmin": "ms-MY-YasminNeural"
181
- },
182
- "Norwegian": {
183
- "Pernille": "nb-NO-PernilleNeural",
184
- "Finn": "nb-NO-FinnNeural"
185
- },
186
- "Swedish": {
187
- "Sofie": "sv-SE-SofieNeural",
188
- "Mattias": "sv-SE-MattiasNeural"
189
- },
190
- "Greek": {
191
- "Athina": "el-GR-AthinaNeural",
192
- "Nestoras": "el-GR-NestorasNeural"
193
- },
194
- "German": {
195
- "Katja": "de-DE-KatjaNeural",
196
- "Amala": "de-DE-AmalaNeural",
197
- "Conrad": "de-DE-ConradNeural",
198
- "Killian": "de-DE-KillianNeural",
199
- "Ingrid": "de-AT-IngridNeural",
200
- "Jonas": "de-AT-JonasNeural",
201
- "Jan": "de-CH-JanNeural",
202
- "Leni": "de-CH-LeniNeural"
203
- },
204
- "Afrikaans": {
205
- "Adri": "af-ZA-AdriNeural",
206
- "Willem": "af-ZA-WillemNeural"
207
- },
208
- "Amharic": {
209
- "Ameha": "am-ET-AmehaNeural",
210
- "Mekdes": "am-ET-MekdesNeural"
211
- },
212
- "Azerbaijani": {
213
- "Babek": "az-AZ-BabekNeural",
214
- "Banu": "az-AZ-BanuNeural"
215
- },
216
- "Bulgarian": {
217
- "Borislav": "bg-BG-BorislavNeural",
218
- "Kalina": "bg-BG-KalinaNeural"
219
- },
220
- "Bengali": {
221
- "Nabanita": "bn-BD-NabanitaNeural",
222
- "Pradeep": "bn-BD-PradeepNeural",
223
- "Bashkar": "bn-IN-BashkarNeural",
224
- "Tanishaa": "bn-IN-TanishaaNeural"
225
- },
226
- "Bosnian": {
227
- "Goran": "bs-BA-GoranNeural",
228
- "Vesna": "bs-BA-VesnaNeural"
229
- },
230
- "Catalan": {
231
- "Joana": "ca-ES-JoanaNeural",
232
- "Enric": "ca-ES-EnricNeural"
233
- },
234
- "Czech": {
235
- "Antonin": "cs-CZ-AntoninNeural",
236
- "Vlasta": "cs-CZ-VlastaNeural"
237
- },
238
- "Welsh": {
239
- "Aled": "cy-GB-AledNeural",
240
- "Nia": "cy-GB-NiaNeural"
241
- },
242
- "Danish": {
243
- "Christel": "da-DK-ChristelNeural",
244
- "Jeppe": "da-DK-JeppeNeural"
245
- },
246
- "Estonian": {
247
- "Anu": "et-EE-AnuNeural",
248
- "Kert": "et-EE-KertNeural"
249
- },
250
- "Persian": {
251
- "Dilara": "fa-IR-DilaraNeural",
252
- "Farid": "fa-IR-FaridNeural"
253
- },
254
- "Finnish": {
255
- "Harri": "fi-FI-HarriNeural",
256
- "Noora": "fi-FI-NooraNeural"
257
- },
258
- "Irish": {
259
- "Colm": "ga-IE-ColmNeural",
260
- "Orla": "ga-IE-OrlaNeural"
261
- },
262
- "Galician": {
263
- "Roi": "gl-ES-RoiNeural",
264
- "Sabela": "gl-ES-SabelaNeural"
265
- },
266
- "Gujarati": {
267
- "Dhwani": "gu-IN-DhwaniNeural",
268
- "Niranjan": "gu-IN-NiranjanNeural"
269
- },
270
- "Croatian": {
271
- "Gabrijela": "hr-HR-GabrijelaNeural",
272
- "Srecko": "hr-HR-SreckoNeural"
273
- },
274
- "Hungarian": {
275
- "Noemi": "hu-HU-NoemiNeural",
276
- "Tamas": "hu-HU-TamasNeural"
277
- },
278
- "Icelandic": {
279
- "Gudrun": "is-IS-GudrunNeural",
280
- "Gunnar": "is-IS-GunnarNeural"
281
- },
282
- "Javanese": {
283
- "Dimas": "jv-ID-DimasNeural",
284
- "Siti": "jv-ID-SitiNeural"
285
- },
286
- "Georgian": {
287
- "Eka": "ka-GE-EkaNeural",
288
- "Giorgi": "ka-GE-GiorgiNeural"
289
- },
290
- "Kazakh": {
291
- "Aigul": "kk-KZ-AigulNeural",
292
- "Daulet": "kk-KZ-DauletNeural"
293
- },
294
- "Khmer": {
295
- "Piseth": "km-KH-PisethNeural",
296
- "Sreymom": "km-KH-SreymomNeural"
297
- },
298
- "Kannada": {
299
- "Gagan": "kn-IN-GaganNeural",
300
- "Sapna": "kn-IN-SapnaNeural"
301
- },
302
- "Lao": {
303
- "Chanthavong": "lo-LA-ChanthavongNeural",
304
- "Keomany": "lo-LA-KeomanyNeural"
305
- },
306
- "Lithuanian": {
307
- "Leonas": "lt-LT-LeonasNeural",
308
- "Ona": "lt-LT-OnaNeural"
309
- },
310
- "Latvian": {
311
- "Everita": "lv-LV-EveritaNeural",
312
- "Nils": "lv-LV-NilsNeural"
313
- },
314
- "Macedonian": {
315
- "Aleksandar": "mk-MK-AleksandarNeural",
316
- "Marija": "mk-MK-MarijaNeural"
317
- },
318
- "Malayalam": {
319
- "Midhun": "ml-IN-MidhunNeural",
320
- "Sobhana": "ml-IN-SobhanaNeural"
321
- },
322
- "Mongolian": {
323
- "Bataa": "mn-MN-BataaNeural",
324
- "Yesui": "mn-MN-YesuiNeural"
325
- },
326
- "Marathi": {
327
- "Aarohi": "mr-IN-AarohiNeural",
328
- "Manohar": "mr-IN-ManoharNeural"
329
- },
330
- "Maltese": {
331
- "Grace": "mt-MT-GraceNeural",
332
- "Joseph": "mt-MT-JosephNeural"
333
- },
334
- "Burmese": {
335
- "Nilar": "my-MM-NilarNeural",
336
- "Thiha": "my-MM-ThihaNeural"
337
- },
338
- "Nepali": {
339
- "Hemkala": "ne-NP-HemkalaNeural",
340
- "Sagar": "ne-NP-SagarNeural"
341
- },
342
- "Polish": {
343
- "Marek": "pl-PL-MarekNeural",
344
- "Zofia": "pl-PL-ZofiaNeural"
345
- },
346
- "Pashto": {
347
- "Gul Nawaz": "ps-AF-GulNawazNeural",
348
- "Latifa": "ps-AF-LatifaNeural"
349
- },
350
- "Romanian": {
351
- "Alina": "ro-RO-AlinaNeural",
352
- "Emil": "ro-RO-EmilNeural"
353
- },
354
- "Russian": {
355
- "Svetlana": "ru-RU-SvetlanaNeural",
356
- "Dmitry": "ru-RU-DmitryNeural"
357
- },
358
- "Sinhala": {
359
- "Sameera": "si-LK-SameeraNeural",
360
- "Thilini": "si-LK-ThiliniNeural"
361
- },
362
- "Slovak": {
363
- "Lukas": "sk-SK-LukasNeural",
364
- "Viktoria": "sk-SK-ViktoriaNeural"
365
- },
366
- "Slovenian": {
367
- "Petra": "sl-SI-PetraNeural",
368
- "Rok": "sl-SI-RokNeural"
369
- },
370
- "Somali": {
371
- "Muuse": "so-SO-MuuseNeural",
372
- "Ubax": "so-SO-UbaxNeural"
373
- },
374
- "Albanian": {
375
- "Anila": "sq-AL-AnilaNeural",
376
- "Ilir": "sq-AL-IlirNeural"
377
- },
378
- "Serbian": {
379
- "Nicholas": "sr-RS-NicholasNeural",
380
- "Sophie": "sr-RS-SophieNeural"
381
- },
382
- "Sundanese": {
383
- "Jajang": "su-ID-JajangNeural",
384
- "Tuti": "su-ID-TutiNeural"
385
- },
386
- "Swahili": {
387
- "Rafiki": "sw-KE-RafikiNeural",
388
- "Zuri": "sw-KE-ZuriNeural",
389
- "Daudi": "sw-TZ-DaudiNeural",
390
- "Rehema": "sw-TZ-RehemaNeural"
391
  },
392
- "Tamil": {
393
- "Pallavi": "ta-IN-PallaviNeural",
394
- "Valluvar": "ta-IN-ValluvarNeural",
395
- "Kumar": "ta-LK-KumarNeural",
396
- "Saranya": "ta-LK-SaranyaNeural",
397
- "Kani": "ta-MY-KaniNeural",
398
- "Surya": "ta-MY-SuryaNeural",
399
- "Anbu": "ta-SG-AnbuNeural"
400
- },
401
- "Telugu": {
402
- "Mohan": "te-IN-MohanNeural",
403
- "Shruti": "te-IN-ShrutiNeural"
404
- },
405
- "Turkish": {
406
- "Ahmet": "tr-TR-AhmetNeural",
407
- "Emel": "tr-TR-EmelNeural"
408
- },
409
- "Ukrainian": {
410
- "Ostap": "uk-UA-OstapNeural",
411
- "Polina": "uk-UA-PolinaNeural"
412
- },
413
- "Urdu": {
414
- "Gul": "ur-IN-GulNeural",
415
- "Salman": "ur-IN-SalmanNeural",
416
- "Asad": "ur-PK-AsadNeural",
417
- "Uzma": "ur-PK-UzmaNeural"
418
- },
419
- "Uzbek": {
420
- "Madina": "uz-UZ-MadinaNeural",
421
- "Sardor": "uz-UZ-SardorNeural"
422
- },
423
- "Mandarin": {
424
- "Xiaoxiao": "zh-CN-XiaoxiaoNeural",
425
- "Yunyang": "zh-CN-YunyangNeural",
426
- "Yunxi": "zh-CN-YunxiNeural",
427
- "Xiaoyi": "zh-CN-XiaoyiNeural",
428
- "Yunjian": "zh-CN-YunjianNeural",
429
- "Yunxia": "zh-CN-YunxiaNeural",
430
- "Xiaobei": "zh-CN-liaoning-XiaobeiNeural",
431
- "Xiaoni": "zh-CN-shaanxi-XiaoniNeural",
432
- "HiuMaan": "zh-HK-HiuMaanNeural",
433
- "HiuGaai": "zh-HK-HiuGaaiNeural",
434
- "WanLung": "zh-HK-WanLungNeural",
435
- "HsiaoChen": "zh-TW-HsiaoChenNeural",
436
- "HsiaoYu": "zh-TW-HsiaoYuNeural",
437
- "YunJhe": "zh-TW-YunJheNeural"
438
- },
439
- "Zulu": {
440
- "Thando": "zu-ZA-ThandoNeural",
441
- "Themba": "zu-ZA-ThembaNeural"
442
- }
443
  }
444
 
 
 
 
 
 
445
 
446
- async def text_to_speech_edge(text, language_code, speaker, tashkeel_checkbox=False):
447
-
448
-
449
- # Get the voice for the selected language and speaker
450
- voice = language_dict[language_code][speaker]
451
- communicate = edge_tts.Communicate(text, voice)
452
- with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") as tmp_file:
453
- tmp_path = tmp_file.name
454
- await communicate.save(tmp_path)
455
-
456
- return text, tmp_path
457
 
 
 
 
458
 
459
- def get_speakers(language):
460
- print(language)
461
- speakers = list(language_dict[language].keys())
462
- return gr.Dropdown(choices=speakers, value=speakers[0], interactive=True), gr.Checkbox(visible=language == "Arabic", interactive=True)
463
-
464
-
465
- default_language = None
466
- default_speaker = None
467
- with gr.Blocks(title="Writoo AI V2") as demo:
468
- gr.HTML(" ")
469
- gr.HTML(f"<h2 style='color:Tomato;'> 🎥 **Exciting News: Long 60+ Minutes File Creation is also allowed on WritooAI !!** 🎥 </h3>")
470
 
471
- gr.Markdown("✨ Features: Convert text to speech with 60+ audio files.• Choose from 72+ languages • Its Unlimited 😍")
472
- with gr.Row():
473
- with gr.Column():
474
- input_text = gr.Textbox(lines=5, label="Input Text", placeholder="Enter text to convert to speech")
475
- language = gr.Dropdown(
476
- choices=list(language_dict.keys()), value=default_language, label="Languages", interactive=True
477
- )
478
- speaker = gr.Dropdown(choices=[], value=default_speaker, label="Speakers", interactive=False)
479
- tashkeel_checkbox = gr.Checkbox(label="Tashkeel", value=False, visible=False, interactive=False)
480
- run_btn = gr.Button(value="Generate Audio", variant="primary")
481
 
482
- with gr.Column():
483
- output_text = gr.Textbox(label="Output Text")
484
- output_audio = gr.Audio(type="filepath", label="Audio Output")
 
 
 
485
 
486
- language.change(get_speakers, inputs=[language], outputs=[speaker, tashkeel_checkbox])
487
- run_btn.click(text_to_speech_edge, inputs=[input_text, language, speaker, tashkeel_checkbox], outputs=[output_text, output_audio])
 
 
 
 
 
 
 
 
488
 
489
- if __name__ == "__main__":
490
- demo.queue().launch(share=False)
 
1
  import tempfile
 
2
  import edge_tts
3
  import gradio as gr
4
+ from concurrent.futures import ThreadPoolExecutor
5
 
6
+ # Language dictionary remains the same
7
  language_dict = {
8
  "Hindi": {
9
+ "Madhur": "hi-IN-MadhurNeural",
10
+ "Swara": "hi-IN-SwaraNeural"
11
+ },
12
+ "English": {
13
+ "Jenny": "en-US-JennyNeural",
14
+ "Guy": "en-US-GuyNeural",
15
+ "Ana": "en-US-AnaNeural",
16
+ "Aria": "en-US-AriaNeural",
17
+ "Brian": "en-US-BrianNeural",
18
+ "Christopher": "en-US-ChristopherNeural",
19
+ "Eric": "en-US-EricNeural",
20
+ "Michelle": "en-US-MichelleNeural",
21
+ "Roger": "en-US-RogerNeural",
22
+ "Ava": "en-US-AvaMultilingualNeural",
23
+ "Natasha": "en-AU-NatashaNeural",
24
+ "William": "en-AU-WilliamNeural",
25
+ "Clara": "en-CA-ClaraNeural",
26
+ "Liam": "en-CA-LiamNeural",
27
+ "Libby": "en-GB-LibbyNeural",
28
+ "Maisie": "en-GB-MaisieNeural",
29
+ "Ryan": "en-GB-RyanNeural",
30
+ "Sonia": "en-GB-SoniaNeural",
31
+ "Thomas": "en-GB-ThomasNeural",
32
+ "Sam": "en-HK-SamNeural",
33
+ "Yan": "en-HK-YanNeural",
34
+ "Connor": "en-IE-ConnorNeural",
35
+ "Emily": "en-IE-EmilyNeural",
36
+ "Neerja": "en-IN-NeerjaNeural",
37
+ "Prabhat": "en-IN-PrabhatNeural",
38
+ "Asilia": "en-KE-AsiliaNeural",
39
+ "Chilemba": "en-KE-ChilembaNeural",
40
+ "Abeo": "en-NG-AbeoNeural",
41
+ "Ezinne": "en-NG-EzinneNeural",
42
+ "Mitchell": "en-NZ-MitchellNeural",
43
+ "James": "en-PH-JamesNeural",
44
+ "Rosa": "en-PH-RosaNeural",
45
+ "Luna": "en-SG-LunaNeural",
46
+ "Wayne": "en-SG-WayneNeural",
47
+ "Elimu": "en-TZ-ElimuNeural",
48
+ "Imani": "en-TZ-ImaniNeural",
49
+ "Leah": "en-ZA-LeahNeural",
50
+ "Luke": "en-ZA-LukeNeural"
51
+ },
52
+ "Spanish": {
53
+ "Elena": "es-AR-ElenaNeural",
54
+ "Tomas": "es-AR-TomasNeural",
55
+ "Marcelo": "es-BO-MarceloNeural",
56
+ "Sofia": "es-BO-SofiaNeural",
57
+ "Gonzalo": "es-CO-GonzaloNeural",
58
+ "Salome": "es-CO-SalomeNeural",
59
+ "Juan": "es-CR-JuanNeural",
60
+ "Maria": "es-CR-MariaNeural",
61
+ "Belkys": "es-CU-BelkysNeural",
62
+ "Emilio": "es-DO-EmilioNeural",
63
+ "Ramona": "es-DO-RamonaNeural",
64
+ "Andrea": "es-EC-AndreaNeural",
65
+ "Luis": "es-EC-LuisNeural",
66
+ "Alvaro": "es-ES-AlvaroNeural",
67
+ "Elvira": "es-ES-ElviraNeural",
68
+ "Teresa": "es-GQ-TeresaNeural",
69
+ "Andres": "es-GT-AndresNeural",
70
+ "Marta": "es-GT-MartaNeural",
71
+ "Carlos": "es-HN-CarlosNeural",
72
+ "Karla": "es-HN-KarlaNeural",
73
+ "Federico": "es-NI-FedericoNeural",
74
+ "Yolanda": "es-NI-YolandaNeural",
75
+ "Margarita": "es-PA-MargaritaNeural",
76
+ "Roberto": "es-PA-RobertoNeural",
77
+ "Alex": "es-PE-AlexNeural",
78
+ "Camila": "es-PE-CamilaNeural",
79
+ "Karina": "es-PR-KarinaNeural",
80
+ "Victor": "es-PR-VictorNeural",
81
+ "Mario": "es-PY-MarioNeural",
82
+ "Tania": "es-PY-TaniaNeural",
83
+ "Lorena": "es-SV-LorenaNeural",
84
+ "Rodrigo": "es-SV-RodrigoNeural",
85
+ "Alonso": "es-US-AlonsoNeural",
86
+ "Paloma": "es-US-PalomaNeural",
87
+ "Mateo": "es-UY-MateoNeural",
88
+ "Valentina": "es-UY-ValentinaNeural",
89
+ "Paola": "es-VE-PaolaNeural",
90
+ "Sebastian": "es-VE-SebastianNeural"
91
+ },
92
+ "Arabic": {
93
+ "Hamed": "ar-SA-HamedNeural",
94
+ "Zariyah": "ar-SA-ZariyahNeural",
95
+ "Fatima": "ar-AE-FatimaNeural",
96
+ "Hamdan": "ar-AE-HamdanNeural",
97
+ "Ali": "ar-BH-AliNeural",
98
+ "Laila": "ar-BH-LailaNeural",
99
+ "Ismael": "ar-DZ-IsmaelNeural",
100
+ "Salma": "ar-EG-SalmaNeural",
101
+ "Shakir": "ar-EG-ShakirNeural",
102
+ "Bassel": "ar-IQ-BasselNeural",
103
+ "Rana": "ar-IQ-RanaNeural",
104
+ "Sana": "ar-JO-SanaNeural",
105
+ "Taim": "ar-JO-TaimNeural",
106
+ "Fahed": "ar-KW-FahedNeural",
107
+ "Noura": "ar-KW-NouraNeural",
108
+ "Layla": "ar-LB-LaylaNeural",
109
+ "Rami": "ar-LB-RamiNeural",
110
+ "Iman": "ar-LY-ImanNeural",
111
+ "Omar": "ar-LY-OmarNeural",
112
+ "Jamal": "ar-MA-JamalNeural",
113
+ "Mouna": "ar-MA-MounaNeural",
114
+ "Abdullah": "ar-OM-AbdullahNeural",
115
+ "Aysha": "ar-OM-AyshaNeural",
116
+ "Amal": "ar-QA-AmalNeural",
117
+ "Moaz": "ar-QA-MoazNeural",
118
+ "Amany": "ar-SY-AmanyNeural",
119
+ "Laith": "ar-SY-LaithNeural",
120
+ "Hedi": "ar-TN-HediNeural",
121
+ "Reem": "ar-TN-ReemNeural",
122
+ "Maryam": "ar-YE-MaryamNeural",
123
+ "Saleh": "ar-YE-SalehNeural"
124
+ },
125
+ "Korean": {
126
+ "Sun-Hi": "ko-KR-SunHiNeural",
127
+ "InJoon": "ko-KR-InJoonNeural"
128
+ },
129
+ "Thai": {
130
+ "Premwadee": "th-TH-PremwadeeNeural",
131
+ "Niwat": "th-TH-NiwatNeural"
132
+ },
133
+ "Vietnamese": {
134
+ "HoaiMy": "vi-VN-HoaiMyNeural",
135
+ "NamMinh": "vi-VN-NamMinhNeural"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
136
  },
137
+ "Japanese": {
138
+ "Nanami": "ja-JP-NanamiNeural",
139
+ "Keita": "ja-JP-KeitaNeural"
140
+ },
141
+ "French": {
142
+ "Denise": "fr-FR-DeniseNeural",
143
+ "Eloise": "fr-FR-EloiseNeural",
144
+ "Henri": "fr-FR-HenriNeural",
145
+ "Sylvie": "fr-CA-SylvieNeural",
146
+ "Antoine": "fr-CA-AntoineNeural",
147
+ "Jean": "fr-CA-JeanNeural",
148
+ "Ariane": "fr-CH-ArianeNeural",
149
+ "Fabrice": "fr-CH-FabriceNeural",
150
+ "Charline": "fr-BE-CharlineNeural",
151
+ "Gerard": "fr-BE-GerardNeural"
152
+ },
153
+ "Portuguese": {
154
+ "Francisca": "pt-BR-FranciscaNeural",
155
+ "Antonio": "pt-BR-AntonioNeural",
156
+ "Duarte": "pt-PT-DuarteNeural",
157
+ "Raquel": "pt-PT-RaquelNeural"
158
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
159
  }
160
 
161
+ # Define the TTS function
162
+ def speak_text_to_speech(text, language, voice_type):
163
+ voice = language_dict[language].get(voice_type)
164
+ if not voice:
165
+ return "Invalid voice type selected."
166
 
167
+ # Create TTS instance and speak
168
+ tts = edge_tts.Communicate(text, voice)
169
+ return tts.run()
 
 
 
 
 
 
 
 
170
 
171
+ # Splitting the text into smaller chunks for parallel processing
172
+ def split_text(text, chunk_size=5000):
173
+ return [text[i:i+chunk_size] for i in range(0, len(text), chunk_size)]
174
 
175
+ def process_text_in_parallel(text, language, voice_type):
176
+ chunks = split_text(text)
177
+
178
+ # Use ThreadPoolExecutor to process text chunks concurrently
179
+ with ThreadPoolExecutor() as executor:
180
+ futures = [executor.submit(speak_text_to_speech, chunk, language, voice_type) for chunk in chunks]
181
+ results = [future.result() for future in futures]
 
 
 
 
182
 
183
+ return "".join(results) # Join all chunks back into one audio file or string
 
 
 
 
 
 
 
 
 
184
 
185
+ # Gradio interface function
186
+ def generate_audio(text, language, voice_type):
187
+ try:
188
+ return process_text_in_parallel(text, language, voice_type)
189
+ except Exception as e:
190
+ return f"An error occurred: {e}"
191
 
192
+ # Gradio UI
193
+ iface = gr.Interface(
194
+ fn=generate_audio,
195
+ inputs=[
196
+ gr.Textbox(label="Text", lines=5),
197
+ gr.Dropdown(choices=["Hindi", "English", "Spanish", "Arabic", "Korean", "Thai", "Vietnamese", "Japanese", "French", "Portuguese"], label="Language"),
198
+ gr.Dropdown(choices=["Madhur", "Swara", "Jenny", "Guy", "Ana", "Aria", "Brian", "Christopher", "Eric", "Michelle", "Roger", "Ava", "Natasha", "William", "Clara", "Liam", "Libby", "Maisie", "Ryan", "Sonia", "Thomas", "Sam", "Yan", "Connor", "Emily", "Neerja", "Prabhat", "Asilia", "Chilemba", "Abeo", "Ezinne", "Mitchell", "James", "Rosa", "Luna", "Wayne", "Elimu", "Imani", "Leah", "Luke"], label="Voice Type")
199
+ ],
200
+ outputs="audio",
201
+ )
202
 
203
+ iface.launch()