mrbeliever commited on
Commit
ed30812
·
verified ·
1 Parent(s): e255a40

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +197 -471
app.py CHANGED
@@ -1,489 +1,215 @@
1
  import tempfile
2
-
3
  import edge_tts
4
  import gradio as gr
5
  from transformers import pipeline
6
  import pyarabic.araby as araby
7
 
8
  language_dict = {
9
- "English": {
10
- "Jenny": "en-US-JennyNeural",
11
- "Guy": "en-US-GuyNeural",
12
- "Ana": "en-US-AnaNeural",
13
- "Aria": "en-US-AriaNeural",
14
- "Christopher": "en-US-ChristopherNeural",
15
- "Eric": "en-US-EricNeural",
16
- "Michelle": "en-US-MichelleNeural",
17
- "Roger": "en-US-RogerNeural",
18
- "Natasha": "en-AU-NatashaNeural",
19
- "William": "en-AU-WilliamNeural",
20
- "Clara": "en-CA-ClaraNeural",
21
- "Liam": "en-CA-LiamNeural",
22
- "Libby": "en-GB-LibbyNeural",
23
- "Maisie": "en-GB-MaisieNeural",
24
- "Ryan": "en-GB-RyanNeural",
25
- "Sonia": "en-GB-SoniaNeural",
26
- "Thomas": "en-GB-ThomasNeural",
27
- "Sam": "en-HK-SamNeural",
28
- "Yan": "en-HK-YanNeural",
29
- "Connor": "en-IE-ConnorNeural",
30
- "Emily": "en-IE-EmilyNeural",
31
- "Neerja": "en-IN-NeerjaNeural",
32
- "Prabhat": "en-IN-PrabhatNeural",
33
- "Asilia": "en-KE-AsiliaNeural",
34
- "Chilemba": "en-KE-ChilembaNeural",
35
- "Abeo": "en-NG-AbeoNeural",
36
- "Ezinne": "en-NG-EzinneNeural",
37
- "Mitchell": "en-NZ-MitchellNeural",
38
- "James": "en-PH-JamesNeural",
39
- "Rosa": "en-PH-RosaNeural",
40
- "Luna": "en-SG-LunaNeural",
41
- "Wayne": "en-SG-WayneNeural",
42
- "Elimu": "en-TZ-ElimuNeural",
43
- "Imani": "en-TZ-ImaniNeural",
44
- "Leah": "en-ZA-LeahNeural",
45
- "Luke": "en-ZA-LukeNeural"
46
- },
47
- "Spanish": {
48
- "Elena": "es-AR-ElenaNeural",
49
- "Tomas": "es-AR-TomasNeural",
50
- "Marcelo": "es-BO-MarceloNeural",
51
- "Sofia": "es-BO-SofiaNeural",
52
- "Gonzalo": "es-CO-GonzaloNeural",
53
- "Salome": "es-CO-SalomeNeural",
54
- "Juan": "es-CR-JuanNeural",
55
- "Maria": "es-CR-MariaNeural",
56
- "Belkys": "es-CU-BelkysNeural",
57
- "Emilio": "es-DO-EmilioNeural",
58
- "Ramona": "es-DO-RamonaNeural",
59
- "Andrea": "es-EC-AndreaNeural",
60
- "Luis": "es-EC-LuisNeural",
61
- "Alvaro": "es-ES-AlvaroNeural",
62
- "Elvira": "es-ES-ElviraNeural",
63
- "Teresa": "es-GQ-TeresaNeural",
64
- "Andres": "es-GT-AndresNeural",
65
- "Marta": "es-GT-MartaNeural",
66
- "Carlos": "es-HN-CarlosNeural",
67
- "Karla": "es-HN-KarlaNeural",
68
- "Federico": "es-NI-FedericoNeural",
69
- "Yolanda": "es-NI-YolandaNeural",
70
- "Margarita": "es-PA-MargaritaNeural",
71
- "Roberto": "es-PA-RobertoNeural",
72
- "Alex": "es-PE-AlexNeural",
73
- "Camila": "es-PE-CamilaNeural",
74
- "Karina": "es-PR-KarinaNeural",
75
- "Victor": "es-PR-VictorNeural",
76
- "Mario": "es-PY-MarioNeural",
77
- "Tania": "es-PY-TaniaNeural",
78
- "Lorena": "es-SV-LorenaNeural",
79
- "Rodrigo": "es-SV-RodrigoNeural",
80
- "Alonso": "es-US-AlonsoNeural",
81
- "Paloma": "es-US-PalomaNeural",
82
- "Mateo": "es-UY-MateoNeural",
83
- "Valentina": "es-UY-ValentinaNeural",
84
- "Paola": "es-VE-PaolaNeural",
85
- "Sebastian": "es-VE-SebastianNeural"
86
- },
87
- "Arabic": {
88
- "Hamed": "ar-SA-HamedNeural",
89
- "Zariyah": "ar-SA-ZariyahNeural",
90
- "Fatima": "ar-AE-FatimaNeural",
91
- "Hamdan": "ar-AE-HamdanNeural",
92
- "Ali": "ar-BH-AliNeural",
93
- "Laila": "ar-BH-LailaNeural",
94
- "Ismael": "ar-DZ-IsmaelNeural",
95
- "Salma": "ar-EG-SalmaNeural",
96
- "Shakir": "ar-EG-ShakirNeural",
97
- "Bassel": "ar-IQ-BasselNeural",
98
- "Rana": "ar-IQ-RanaNeural",
99
- "Sana": "ar-JO-SanaNeural",
100
- "Taim": "ar-JO-TaimNeural",
101
- "Fahed": "ar-KW-FahedNeural",
102
- "Noura": "ar-KW-NouraNeural",
103
- "Layla": "ar-LB-LaylaNeural",
104
- "Rami": "ar-LB-RamiNeural",
105
- "Iman": "ar-LY-ImanNeural",
106
- "Omar": "ar-LY-OmarNeural",
107
- "Jamal": "ar-MA-JamalNeural",
108
- "Mouna": "ar-MA-MounaNeural",
109
- "Abdullah": "ar-OM-AbdullahNeural",
110
- "Aysha": "ar-OM-AyshaNeural",
111
- "Amal": "ar-QA-AmalNeural",
112
- "Moaz": "ar-QA-MoazNeural",
113
- "Amany": "ar-SY-AmanyNeural",
114
- "Laith": "ar-SY-LaithNeural",
115
- "Hedi": "ar-TN-HediNeural",
116
- "Reem": "ar-TN-ReemNeural",
117
- "Maryam": "ar-YE-MaryamNeural",
118
- "Saleh": "ar-YE-SalehNeural"
119
- },
120
- "Korean": {
121
- "Sun-Hi": "ko-KR-SunHiNeural",
122
- "InJoon": "ko-KR-InJoonNeural"
123
- },
124
- "Thai": {
125
- "Premwadee": "th-TH-PremwadeeNeural",
126
- "Niwat": "th-TH-NiwatNeural"
127
- },
128
- "Vietnamese": {
129
- "HoaiMy": "vi-VN-HoaiMyNeural",
130
- "NamMinh": "vi-VN-NamMinhNeural"
131
- },
132
- "Japanese": {
133
- "Nanami": "ja-JP-NanamiNeural",
134
- "Keita": "ja-JP-KeitaNeural"
135
- },
136
- "French": {
137
- "Denise": "fr-FR-DeniseNeural",
138
- "Eloise": "fr-FR-EloiseNeural",
139
- "Henri": "fr-FR-HenriNeural",
140
- "Sylvie": "fr-CA-SylvieNeural",
141
- "Antoine": "fr-CA-AntoineNeural",
142
- "Jean": "fr-CA-JeanNeural",
143
- "Ariane": "fr-CH-ArianeNeural",
144
- "Fabrice": "fr-CH-FabriceNeural",
145
- "Charline": "fr-BE-CharlineNeural",
146
- "Gerard": "fr-BE-GerardNeural"
147
- },
148
- "Portuguese": {
149
- "Francisca": "pt-BR-FranciscaNeural",
150
- "Antonio": "pt-BR-AntonioNeural",
151
- "Duarte": "pt-PT-DuarteNeural",
152
- "Raquel": "pt-PT-RaquelNeural"
153
- },
154
- "Indonesian": {
155
- "Ardi": "id-ID-ArdiNeural",
156
- "Gadis": "id-ID-GadisNeural"
157
- },
158
- "Hebrew": {
159
- "Avri": "he-IL-AvriNeural",
160
- "Hila": "he-IL-HilaNeural"
161
- },
162
- "Italian": {
163
- "Isabella": "it-IT-IsabellaNeural",
164
- "Diego": "it-IT-DiegoNeural",
165
- "Elsa": "it-IT-ElsaNeural"
166
- },
167
- "Dutch": {
168
- "Colette": "nl-NL-ColetteNeural",
169
- "Fenna": "nl-NL-FennaNeural",
170
- "Maarten": "nl-NL-MaartenNeural",
171
- "Arnaud": "nl-BE-ArnaudNeural",
172
- "Dena": "nl-BE-DenaNeural"
173
- },
174
- "Malay": {
175
- "Osman": "ms-MY-OsmanNeural",
176
- "Yasmin": "ms-MY-YasminNeural"
177
- },
178
- "Norwegian": {
179
- "Pernille": "nb-NO-PernilleNeural",
180
- "Finn": "nb-NO-FinnNeural"
181
- },
182
- "Swedish": {
183
- "Sofie": "sv-SE-SofieNeural",
184
- "Mattias": "sv-SE-MattiasNeural"
185
- },
186
- "Greek": {
187
- "Athina": "el-GR-AthinaNeural",
188
- "Nestoras": "el-GR-NestorasNeural"
189
- },
190
- "German": {
191
- "Katja": "de-DE-KatjaNeural",
192
- "Amala": "de-DE-AmalaNeural",
193
- "Conrad": "de-DE-ConradNeural",
194
- "Killian": "de-DE-KillianNeural",
195
- "Ingrid": "de-AT-IngridNeural",
196
- "Jonas": "de-AT-JonasNeural",
197
- "Jan": "de-CH-JanNeural",
198
- "Leni": "de-CH-LeniNeural"
199
- },
200
- "Afrikaans": {
201
- "Adri": "af-ZA-AdriNeural",
202
- "Willem": "af-ZA-WillemNeural"
203
- },
204
- "Amharic": {
205
- "Ameha": "am-ET-AmehaNeural",
206
- "Mekdes": "am-ET-MekdesNeural"
207
- },
208
- "Azerbaijani": {
209
- "Babek": "az-AZ-BabekNeural",
210
- "Banu": "az-AZ-BanuNeural"
211
- },
212
- "Bulgarian": {
213
- "Borislav": "bg-BG-BorislavNeural",
214
- "Kalina": "bg-BG-KalinaNeural"
215
- },
216
- "Bengali": {
217
- "Nabanita": "bn-BD-NabanitaNeural",
218
- "Pradeep": "bn-BD-PradeepNeural",
219
- "Bashkar": "bn-IN-BashkarNeural",
220
- "Tanishaa": "bn-IN-TanishaaNeural"
221
- },
222
- "Bosnian": {
223
- "Goran": "bs-BA-GoranNeural",
224
- "Vesna": "bs-BA-VesnaNeural"
225
- },
226
- "Catalan": {
227
- "Joana": "ca-ES-JoanaNeural",
228
- "Enric": "ca-ES-EnricNeural"
229
- },
230
- "Czech": {
231
- "Antonin": "cs-CZ-AntoninNeural",
232
- "Vlasta": "cs-CZ-VlastaNeural"
233
- },
234
- "Welsh": {
235
- "Aled": "cy-GB-AledNeural",
236
- "Nia": "cy-GB-NiaNeural"
237
- },
238
- "Danish": {
239
- "Christel": "da-DK-ChristelNeural",
240
- "Jeppe": "da-DK-JeppeNeural"
241
- },
242
- "Estonian": {
243
- "Anu": "et-EE-AnuNeural",
244
- "Kert": "et-EE-KertNeural"
245
- },
246
- "Persian": {
247
- "Dilara": "fa-IR-DilaraNeural",
248
- "Farid": "fa-IR-FaridNeural"
249
- },
250
- "Finnish": {
251
- "Harri": "fi-FI-HarriNeural",
252
- "Noora": "fi-FI-NooraNeural"
253
- },
254
- "Irish": {
255
- "Colm": "ga-IE-ColmNeural",
256
- "Orla": "ga-IE-OrlaNeural"
257
- },
258
- "Galician": {
259
- "Roi": "gl-ES-RoiNeural",
260
- "Sabela": "gl-ES-SabelaNeural"
261
- },
262
- "Gujarati": {
263
- "Dhwani": "gu-IN-DhwaniNeural",
264
- "Niranjan": "gu-IN-NiranjanNeural"
265
- },
266
- "Hindi": {
267
- "Madhur": "hi-IN-MadhurNeural",
268
- "Swara": "hi-IN-SwaraNeural"
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
- pipe = pipeline("text2text-generation", model="mush42/fine-tashkeel")
446
-
 
 
 
447
 
448
- def detect_arabic(text):
449
- return any(araby.is_arabicrange(char) for char in text)
 
450
 
451
- async def synthesize_edge_tts(text, voice, output_file):
452
- communicate = edge_tts.Communicate(text, voice)
453
- await communicate.save(output_file)
 
 
454
 
455
- def tts(text, language, voice):
456
- arabic_detected = detect_arabic(text)
457
-
458
- with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") as temp_audio_file:
459
- temp_audio_path = temp_audio_file.name
460
-
461
- if arabic_detected and language == "Arabic":
462
- audio = pipe(text, return_tensors=True)
463
- with open(temp_audio_path, "wb") as f:
464
- f.write(audio["audio"].numpy())
465
- else:
466
- voice_id = language_dict[language][voice]
467
- await synthesize_edge_tts(text, voice_id, temp_audio_path)
468
-
469
- return temp_audio_path
470
 
471
- def get_voices(language):
472
- return list(language_dict.get(language, {}).keys())
473
 
474
- language = gr.inputs.Dropdown(choices=list(language_dict.keys()), label="Language")
475
- voice = gr.inputs.Dropdown(choices=[], label="Voice", type="value")
476
- text = gr.inputs.Textbox(label="Text", lines=5)
477
- output = gr.outputs.Audio(type="file", label="Generated Speech")
478
 
479
- def update_voices(language):
480
- voices = get_voices(language)
481
- return gr.Dropdown.update(choices=voices)
482
 
483
- iface = gr.Interface(
484
- fn=tts,
485
- inputs=[text, language, voice],
486
- outputs=output
487
- )
488
 
489
- iface.launch()
 
1
  import tempfile
 
2
  import edge_tts
3
  import gradio as gr
4
  from transformers import pipeline
5
  import pyarabic.araby as araby
6
 
7
  language_dict = {
8
+ "English": {
9
+ "Jenny": "en-US-JennyNeural",
10
+ "Guy": "en-US-GuyNeural",
11
+ "Ana": "en-US-AnaNeural",
12
+ "Aria": "en-US-AriaNeural",
13
+ "Christopher": "en-US-ChristopherNeural",
14
+ "Eric": "en-US-EricNeural",
15
+ "Michelle": "en-US-MichelleNeural",
16
+ "Roger": "en-US-RogerNeural",
17
+ "Natasha": "en-AU-NatashaNeural",
18
+ "William": "en-AU-WilliamNeural",
19
+ "Clara": "en-CA-ClaraNeural",
20
+ "Liam": "en-CA-LiamNeural",
21
+ "Libby": "en-GB-LibbyNeural",
22
+ "Maisie": "en-GB-MaisieNeural",
23
+ "Ryan": "en-GB-RyanNeural",
24
+ "Sonia": "en-GB-SoniaNeural",
25
+ "Thomas": "en-GB-ThomasNeural",
26
+ "Sam": "en-HK-SamNeural",
27
+ "Yan": "en-HK-YanNeural",
28
+ "Connor": "en-IE-ConnorNeural",
29
+ "Emily": "en-IE-EmilyNeural",
30
+ "Neerja": "en-IN-NeerjaNeural",
31
+ "Prabhat": "en-IN-PrabhatNeural",
32
+ "Asilia": "en-KE-AsiliaNeural",
33
+ "Chilemba": "en-KE-ChilembaNeural",
34
+ "Abeo": "en-NG-AbeoNeural",
35
+ "Ezinne": "en-NG-EzinneNeural",
36
+ "Mitchell": "en-NZ-MitchellNeural",
37
+ "James": "en-PH-JamesNeural",
38
+ "Rosa": "en-PH-RosaNeural",
39
+ "Luna": "en-SG-LunaNeural",
40
+ "Wayne": "en-SG-WayneNeural",
41
+ "Elimu": "en-TZ-ElimuNeural",
42
+ "Imani": "en-TZ-ImaniNeural",
43
+ "Leah": "en-ZA-LeahNeural",
44
+ "Luke": "en-ZA-LukeNeural"
45
+ },
46
+ "Spanish": {
47
+ "Elena": "es-AR-ElenaNeural",
48
+ "Tomas": "es-AR-TomasNeural",
49
+ "Marcelo": "es-BO-MarceloNeural",
50
+ "Sofia": "es-BO-SofiaNeural",
51
+ "Gonzalo": "es-CO-GonzaloNeural",
52
+ "Salome": "es-CO-SalomeNeural",
53
+ "Juan": "es-CR-JuanNeural",
54
+ "Maria": "es-CR-MariaNeural",
55
+ "Belkys": "es-CU-BelkysNeural",
56
+ "Emilio": "es-DO-EmilioNeural",
57
+ "Ramona": "es-DO-RamonaNeural",
58
+ "Andrea": "es-EC-AndreaNeural",
59
+ "Luis": "es-EC-LuisNeural",
60
+ "Alvaro": "es-ES-AlvaroNeural",
61
+ "Elvira": "es-ES-ElviraNeural",
62
+ "Teresa": "es-GQ-TeresaNeural",
63
+ "Andres": "es-GT-AndresNeural",
64
+ "Marta": "es-GT-MartaNeural",
65
+ "Carlos": "es-HN-CarlosNeural",
66
+ "Karla": "es-HN-KarlaNeural",
67
+ "Federico": "es-NI-FedericoNeural",
68
+ "Yolanda": "es-NI-YolandaNeural",
69
+ "Margarita": "es-PA-MargaritaNeural",
70
+ "Roberto": "es-PA-RobertoNeural",
71
+ "Alex": "es-PE-AlexNeural",
72
+ "Camila": "es-PE-CamilaNeural",
73
+ "Karina": "es-PR-KarinaNeural",
74
+ "Victor": "es-PR-VictorNeural",
75
+ "Mario": "es-PY-MarioNeural",
76
+ "Tania": "es-PY-TaniaNeural",
77
+ "Lorena": "es-SV-LorenaNeural",
78
+ "Rodrigo": "es-SV-RodrigoNeural",
79
+ "Alonso": "es-US-AlonsoNeural",
80
+ "Paloma": "es-US-PalomaNeural",
81
+ "Mateo": "es-UY-MateoNeural",
82
+ "Valentina": "es-UY-ValentinaNeural",
83
+ "Paola": "es-VE-PaolaNeural",
84
+ "Sebastian": "es-VE-SebastianNeural"
85
+ },
86
+ "Arabic": {
87
+ "Hamed": "ar-SA-HamedNeural",
88
+ "Zariyah": "ar-SA-ZariyahNeural",
89
+ "Fatima": "ar-AE-FatimaNeural",
90
+ "Hamdan": "ar-AE-HamdanNeural",
91
+ "Ali": "ar-BH-AliNeural",
92
+ "Laila": "ar-BH-LailaNeural",
93
+ "Ismael": "ar-DZ-IsmaelNeural",
94
+ "Salma": "ar-EG-SalmaNeural",
95
+ "Shakir": "ar-EG-ShakirNeural",
96
+ "Bassel": "ar-IQ-BasselNeural",
97
+ "Rana": "ar-IQ-RanaNeural",
98
+ "Sana": "ar-JO-SanaNeural",
99
+ "Taim": "ar-JO-TaimNeural",
100
+ "Fahed": "ar-KW-FahedNeural",
101
+ "Noura": "ar-KW-NouraNeural",
102
+ "Layla": "ar-LB-LaylaNeural",
103
+ "Rami": "ar-LB-RamiNeural",
104
+ "Iman": "ar-LY-ImanNeural",
105
+ "Omar": "ar-LY-OmarNeural",
106
+ "Jamal": "ar-MA-JamalNeural",
107
+ "Mouna": "ar-MA-MounaNeural",
108
+ "Abdullah": "ar-OM-AbdullahNeural",
109
+ "Aysha": "ar-OM-AyshaNeural",
110
+ "Amal": "ar-QA-AmalNeural",
111
+ "Moaz": "ar-QA-MoazNeural",
112
+ "Amany": "ar-SY-AmanyNeural",
113
+ "Laith": "ar-SY-LaithNeural",
114
+ "Hedi": "ar-TN-HediNeural",
115
+ "Reem": "ar-TN-ReemNeural",
116
+ "Maryam": "ar-YE-MaryamNeural",
117
+ "Saleh": "ar-YE-SalehNeural"
118
+ },
119
+ "Korean": {
120
+ "Sun-Hi": "ko-KR-SunHiNeural",
121
+ "InJoon": "ko-KR-InJoonNeural"
122
+ },
123
+ "Thai": {
124
+ "Premwadee": "th-TH-PremwadeeNeural",
125
+ "Niwat": "th-TH-NiwatNeural"
126
+ },
127
+ "Vietnamese": {
128
+ "HoaiMy": "vi-VN-HoaiMyNeural",
129
+ "NamMinh": "vi-VN-NamMinhNeural"
130
+ },
131
+ "Japanese": {
132
+ "Nanami": "ja-JP-NanamiNeural",
133
+ "Keita": "ja-JP-KeitaNeural"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
134
  },
135
+ "French": {
136
+ "Denise": "fr-FR-DeniseNeural",
137
+ "Eloise": "fr-FR-EloiseNeural",
138
+ "Henri": "fr-FR-HenriNeural",
139
+ "Sylvie": "fr-CA-SylvieNeural",
140
+ "Antoine": "fr-CA-AntoineNeural",
141
+ "Jean": "fr-CA-JeanNeural",
142
+ "Ariane": "fr-CH-ArianeNeural",
143
+ "Fabrice": "fr-CH-FabriceNeural",
144
+ "Charline": "fr-BE-CharlineNeural",
145
+ "Gerard": "fr-BE-GerardNeural"
146
+ },
147
+ "Portuguese": {
148
+ "Francisca": "pt-BR-FranciscaNeural",
149
+ "Antonio": "pt-BR-AntonioNeural",
150
+ "Duarte": "pt-PT-DuarteNeural",
151
+ "Raquel": "pt-PT-RaquelNeural"
152
+ },
153
+ "Indonesian": {
154
+ "Ardi": "id-ID-ArdiNeural",
155
+ "Gadis": "id-ID-GadisNeural"
156
+ },
157
+ "Italian": {
158
+ "Caterina": "it-IT-CaterinaNeural",
159
+ "Lucia": "it-IT-LuciaNeural"
160
+ },
161
+ "Dutch": {
162
+ "Fenna": "nl-NL-FennaNeural",
163
+ "Merel": "nl-NL-MerelNeural"
164
+ },
165
+ "German": {
166
+ "Amelie": "de-DE-AmelieNeural",
167
+ "Yannick": "de-DE-YannickNeural",
168
+ "Klaus": "de-AT-KlausNeural",
169
+ "Sarah": "de-AT-SarahNeural",
170
+ "Felicitas": "de-CH-FelicitasNeural",
171
+ "Jan": "de-CH-JanNeural",
172
+ "Paula": "de-LU-PaulaNeural",
173
+ "Timo": "de-LU-TimoNeural"
174
+ },
175
+ "Mandarin": {
176
+ "Hanhan": "cmn-CN-HanhanNeural",
177
+ "Huihui": "cmn-CN-HuihuiNeural"
178
+ }
 
 
 
 
 
 
 
179
  }
180
 
181
+ def tts(text, lang, speaker):
182
+ try:
183
+ model_name = language_dict[lang][speaker]
184
+ except KeyError:
185
+ raise ValueError(f"No speaker '{speaker}' found for language '{lang}'.")
186
 
187
+ tts_model = edge_tts.TextToSpeech(model_name)
188
+ audio = tts_model(text)
189
+ return audio
190
 
191
+ def translate(text, src_lang, dest_lang):
192
+ translator = pipeline("translation", model="Helsinki-NLP/opus-mt")
193
+ translation = translator(text, src=src_lang, tgt=dest_lang)
194
+ translated_text = translation[0]['translation_text']
195
+ return translated_text
196
 
197
+ def text_to_speech(text, lang, speaker):
198
+ if lang == 'Arabic':
199
+ text = araby.strip_tashkeel(text)
 
 
 
 
 
 
 
 
 
 
 
 
200
 
201
+ audio = tts(text, lang, speaker)
202
+ return audio
203
 
204
+ def main(text_input, language, speaker):
205
+ if language == "Arabic":
206
+ text_input = araby.strip_tashkeel(text_input)
 
207
 
208
+ audio_output = tts(text_input, language, speaker)
209
+ return audio_output
 
210
 
211
+ def launch():
212
+ interface = gr.Interface(fn=main, inputs=["text", "dropdown", gr.inputs.Radio(language_dict)], outputs="audio")
213
+ interface.launch()
 
 
214
 
215
+ launch()