Spaces:
Paused
Paused
| import tempfile | |
| import edge_tts | |
| import gradio as gr | |
| language_dict = { | |
| "Hindi": { | |
| "Madhur": "hi-IN-MadhurNeural", | |
| "Swara": "hi-IN-SwaraNeural", | |
| "Arav": "hi-IN-AaravNeural" | |
| }, | |
| "English": { | |
| "Jenny": "en-US-JennyNeural", | |
| "Guy": "en-US-GuyNeural", | |
| "Ana": "en-US-AnaNeural", | |
| "Aria": "en-US-AriaNeural", | |
| "Brian": "en-US-BrianNeural", | |
| "Christopher": "en-US-ChristopherNeural", | |
| "Eric": "en-US-EricNeural", | |
| "Michelle": "en-US-MichelleNeural", | |
| "Roger": "en-US-RogerNeural", | |
| "Natasha": "en-AU-NatashaNeural", | |
| "William": "en-AU-WilliamNeural", | |
| "Clara": "en-CA-ClaraNeural", | |
| "Liam": "en-CA-LiamNeural", | |
| "Libby": "en-GB-LibbyNeural", | |
| "Maisie": "en-GB-MaisieNeural", | |
| "Ryan": "en-GB-RyanNeural", | |
| "Sonia": "en-GB-SoniaNeural", | |
| "Thomas": "en-GB-ThomasNeural", | |
| "Sam": "en-HK-SamNeural", | |
| "Yan": "en-HK-YanNeural", | |
| "Connor": "en-IE-ConnorNeural", | |
| "Emily": "en-IE-EmilyNeural", | |
| "Neerja": "en-IN-NeerjaNeural", | |
| "Prabhat": "en-IN-PrabhatNeural", | |
| "Asilia": "en-KE-AsiliaNeural", | |
| "Chilemba": "en-KE-ChilembaNeural", | |
| "Abeo": "en-NG-AbeoNeural", | |
| "Ezinne": "en-NG-EzinneNeural", | |
| "Mitchell": "en-NZ-MitchellNeural", | |
| "James": "en-PH-JamesNeural", | |
| "Rosa": "en-PH-RosaNeural", | |
| "Luna": "en-SG-LunaNeural", | |
| "Wayne": "en-SG-WayneNeural", | |
| "Elimu": "en-TZ-ElimuNeural", | |
| "Imani": "en-TZ-ImaniNeural", | |
| "Leah": "en-ZA-LeahNeural", | |
| "Luke": "en-ZA-LukeNeural" | |
| }, | |
| "Spanish": { | |
| "Elena": "es-AR-ElenaNeural", | |
| "Tomas": "es-AR-TomasNeural", | |
| "Marcelo": "es-BO-MarceloNeural", | |
| "Sofia": "es-BO-SofiaNeural", | |
| "Gonzalo": "es-CO-GonzaloNeural", | |
| "Salome": "es-CO-SalomeNeural", | |
| "Juan": "es-CR-JuanNeural", | |
| "Maria": "es-CR-MariaNeural", | |
| "Belkys": "es-CU-BelkysNeural", | |
| "Emilio": "es-DO-EmilioNeural", | |
| "Ramona": "es-DO-RamonaNeural", | |
| "Andrea": "es-EC-AndreaNeural", | |
| "Luis": "es-EC-LuisNeural", | |
| "Alvaro": "es-ES-AlvaroNeural", | |
| "Elvira": "es-ES-ElviraNeural", | |
| "Teresa": "es-GQ-TeresaNeural", | |
| "Andres": "es-GT-AndresNeural", | |
| "Marta": "es-GT-MartaNeural", | |
| "Carlos": "es-HN-CarlosNeural", | |
| "Karla": "es-HN-KarlaNeural", | |
| "Federico": "es-NI-FedericoNeural", | |
| "Yolanda": "es-NI-YolandaNeural", | |
| "Margarita": "es-PA-MargaritaNeural", | |
| "Roberto": "es-PA-RobertoNeural", | |
| "Alex": "es-PE-AlexNeural", | |
| "Camila": "es-PE-CamilaNeural", | |
| "Karina": "es-PR-KarinaNeural", | |
| "Victor": "es-PR-VictorNeural", | |
| "Mario": "es-PY-MarioNeural", | |
| "Tania": "es-PY-TaniaNeural", | |
| "Lorena": "es-SV-LorenaNeural", | |
| "Rodrigo": "es-SV-RodrigoNeural", | |
| "Alonso": "es-US-AlonsoNeural", | |
| "Paloma": "es-US-PalomaNeural", | |
| "Mateo": "es-UY-MateoNeural", | |
| "Valentina": "es-UY-ValentinaNeural", | |
| "Paola": "es-VE-PaolaNeural", | |
| "Sebastian": "es-VE-SebastianNeural" | |
| }, | |
| "Arabic": { | |
| "Hamed": "ar-SA-HamedNeural", | |
| "Zariyah": "ar-SA-ZariyahNeural", | |
| "Fatima": "ar-AE-FatimaNeural", | |
| "Hamdan": "ar-AE-HamdanNeural", | |
| "Ali": "ar-BH-AliNeural", | |
| "Laila": "ar-BH-LailaNeural", | |
| "Ismael": "ar-DZ-IsmaelNeural", | |
| "Salma": "ar-EG-SalmaNeural", | |
| "Shakir": "ar-EG-ShakirNeural", | |
| "Bassel": "ar-IQ-BasselNeural", | |
| "Rana": "ar-IQ-RanaNeural", | |
| "Sana": "ar-JO-SanaNeural", | |
| "Taim": "ar-JO-TaimNeural", | |
| "Fahed": "ar-KW-FahedNeural", | |
| "Noura": "ar-KW-NouraNeural", | |
| "Layla": "ar-LB-LaylaNeural", | |
| "Rami": "ar-LB-RamiNeural", | |
| "Iman": "ar-LY-ImanNeural", | |
| "Omar": "ar-LY-OmarNeural", | |
| "Jamal": "ar-MA-JamalNeural", | |
| "Mouna": "ar-MA-MounaNeural", | |
| "Abdullah": "ar-OM-AbdullahNeural", | |
| "Aysha": "ar-OM-AyshaNeural", | |
| "Amal": "ar-QA-AmalNeural", | |
| "Moaz": "ar-QA-MoazNeural", | |
| "Amany": "ar-SY-AmanyNeural", | |
| "Laith": "ar-SY-LaithNeural", | |
| "Hedi": "ar-TN-HediNeural", | |
| "Reem": "ar-TN-ReemNeural", | |
| "Maryam": "ar-YE-MaryamNeural", | |
| "Saleh": "ar-YE-SalehNeural" | |
| }, | |
| "Korean": { | |
| "Sun-Hi": "ko-KR-SunHiNeural", | |
| "InJoon": "ko-KR-InJoonNeural" | |
| }, | |
| "Thai": { | |
| "Premwadee": "th-TH-PremwadeeNeural", | |
| "Niwat": "th-TH-NiwatNeural" | |
| }, | |
| "Vietnamese": { | |
| "HoaiMy": "vi-VN-HoaiMyNeural", | |
| "NamMinh": "vi-VN-NamMinhNeural" | |
| }, | |
| "Japanese": { | |
| "Nanami": "ja-JP-NanamiNeural", | |
| "Keita": "ja-JP-KeitaNeural" | |
| }, | |
| "French": { | |
| "Denise": "fr-FR-DeniseNeural", | |
| "Eloise": "fr-FR-EloiseNeural", | |
| "Henri": "fr-FR-HenriNeural", | |
| "Sylvie": "fr-CA-SylvieNeural", | |
| "Antoine": "fr-CA-AntoineNeural", | |
| "Jean": "fr-CA-JeanNeural", | |
| "Ariane": "fr-CH-ArianeNeural", | |
| "Fabrice": "fr-CH-FabriceNeural", | |
| "Charline": "fr-BE-CharlineNeural", | |
| "Gerard": "fr-BE-GerardNeural" | |
| }, | |
| "Portuguese": { | |
| "Francisca": "pt-BR-FranciscaNeural", | |
| "Antonio": "pt-BR-AntonioNeural", | |
| "Duarte": "pt-PT-DuarteNeural", | |
| "Raquel": "pt-PT-RaquelNeural" | |
| }, | |
| "Indonesian": { | |
| "Ardi": "id-ID-ArdiNeural", | |
| "Gadis": "id-ID-GadisNeural" | |
| }, | |
| "Hebrew": { | |
| "Avri": "he-IL-AvriNeural", | |
| "Hila": "he-IL-HilaNeural" | |
| }, | |
| "Italian": { | |
| "Isabella": "it-IT-IsabellaNeural", | |
| "Diego": "it-IT-DiegoNeural", | |
| "Elsa": "it-IT-ElsaNeural" | |
| }, | |
| "Dutch": { | |
| "Colette": "nl-NL-ColetteNeural", | |
| "Fenna": "nl-NL-FennaNeural", | |
| "Maarten": "nl-NL-MaartenNeural", | |
| "Arnaud": "nl-BE-ArnaudNeural", | |
| "Dena": "nl-BE-DenaNeural" | |
| }, | |
| "Malay": { | |
| "Osman": "ms-MY-OsmanNeural", | |
| "Yasmin": "ms-MY-YasminNeural" | |
| }, | |
| "Norwegian": { | |
| "Pernille": "nb-NO-PernilleNeural", | |
| "Finn": "nb-NO-FinnNeural" | |
| }, | |
| "Swedish": { | |
| "Sofie": "sv-SE-SofieNeural", | |
| "Mattias": "sv-SE-MattiasNeural" | |
| }, | |
| "Greek": { | |
| "Athina": "el-GR-AthinaNeural", | |
| "Nestoras": "el-GR-NestorasNeural" | |
| }, | |
| "German": { | |
| "Katja": "de-DE-KatjaNeural", | |
| "Amala": "de-DE-AmalaNeural", | |
| "Conrad": "de-DE-ConradNeural", | |
| "Killian": "de-DE-KillianNeural", | |
| "Ingrid": "de-AT-IngridNeural", | |
| "Jonas": "de-AT-JonasNeural", | |
| "Jan": "de-CH-JanNeural", | |
| "Leni": "de-CH-LeniNeural" | |
| }, | |
| "Afrikaans": { | |
| "Adri": "af-ZA-AdriNeural", | |
| "Willem": "af-ZA-WillemNeural" | |
| }, | |
| "Amharic": { | |
| "Ameha": "am-ET-AmehaNeural", | |
| "Mekdes": "am-ET-MekdesNeural" | |
| }, | |
| "Azerbaijani": { | |
| "Babek": "az-AZ-BabekNeural", | |
| "Banu": "az-AZ-BanuNeural" | |
| }, | |
| "Bulgarian": { | |
| "Borislav": "bg-BG-BorislavNeural", | |
| "Kalina": "bg-BG-KalinaNeural" | |
| }, | |
| "Bengali": { | |
| "Nabanita": "bn-BD-NabanitaNeural", | |
| "Pradeep": "bn-BD-PradeepNeural", | |
| "Bashkar": "bn-IN-BashkarNeural", | |
| "Tanishaa": "bn-IN-TanishaaNeural" | |
| }, | |
| "Bosnian": { | |
| "Goran": "bs-BA-GoranNeural", | |
| "Vesna": "bs-BA-VesnaNeural" | |
| }, | |
| "Catalan": { | |
| "Joana": "ca-ES-JoanaNeural", | |
| "Enric": "ca-ES-EnricNeural" | |
| }, | |
| "Czech": { | |
| "Antonin": "cs-CZ-AntoninNeural", | |
| "Vlasta": "cs-CZ-VlastaNeural" | |
| }, | |
| "Welsh": { | |
| "Aled": "cy-GB-AledNeural", | |
| "Nia": "cy-GB-NiaNeural" | |
| }, | |
| "Danish": { | |
| "Christel": "da-DK-ChristelNeural", | |
| "Jeppe": "da-DK-JeppeNeural" | |
| }, | |
| "Estonian": { | |
| "Anu": "et-EE-AnuNeural", | |
| "Kert": "et-EE-KertNeural" | |
| }, | |
| "Persian": { | |
| "Dilara": "fa-IR-DilaraNeural", | |
| "Farid": "fa-IR-FaridNeural" | |
| }, | |
| "Finnish": { | |
| "Harri": "fi-FI-HarriNeural", | |
| "Noora": "fi-FI-NooraNeural" | |
| }, | |
| "Irish": { | |
| "Colm": "ga-IE-ColmNeural", | |
| "Orla": "ga-IE-OrlaNeural" | |
| }, | |
| "Galician": { | |
| "Roi": "gl-ES-RoiNeural", | |
| "Sabela": "gl-ES-SabelaNeural" | |
| }, | |
| "Gujarati": { | |
| "Dhwani": "gu-IN-DhwaniNeural", | |
| "Niranjan": "gu-IN-NiranjanNeural" | |
| }, | |
| "Croatian": { | |
| "Gabrijela": "hr-HR-GabrijelaNeural", | |
| "Srecko": "hr-HR-SreckoNeural" | |
| }, | |
| "Hungarian": { | |
| "Noemi": "hu-HU-NoemiNeural", | |
| "Tamas": "hu-HU-TamasNeural" | |
| }, | |
| "Icelandic": { | |
| "Gudrun": "is-IS-GudrunNeural", | |
| "Gunnar": "is-IS-GunnarNeural" | |
| }, | |
| "Javanese": { | |
| "Dimas": "jv-ID-DimasNeural", | |
| "Siti": "jv-ID-SitiNeural" | |
| }, | |
| "Georgian": { | |
| "Eka": "ka-GE-EkaNeural", | |
| "Giorgi": "ka-GE-GiorgiNeural" | |
| }, | |
| "Kazakh": { | |
| "Aigul": "kk-KZ-AigulNeural", | |
| "Daulet": "kk-KZ-DauletNeural" | |
| }, | |
| "Khmer": { | |
| "Piseth": "km-KH-PisethNeural", | |
| "Sreymom": "km-KH-SreymomNeural" | |
| }, | |
| "Kannada": { | |
| "Gagan": "kn-IN-GaganNeural", | |
| "Sapna": "kn-IN-SapnaNeural" | |
| }, | |
| "Lao": { | |
| "Chanthavong": "lo-LA-ChanthavongNeural", | |
| "Keomany": "lo-LA-KeomanyNeural" | |
| }, | |
| "Lithuanian": { | |
| "Leonas": "lt-LT-LeonasNeural", | |
| "Ona": "lt-LT-OnaNeural" | |
| }, | |
| "Latvian": { | |
| "Everita": "lv-LV-EveritaNeural", | |
| "Nils": "lv-LV-NilsNeural" | |
| }, | |
| "Macedonian": { | |
| "Aleksandar": "mk-MK-AleksandarNeural", | |
| "Marija": "mk-MK-MarijaNeural" | |
| }, | |
| "Malayalam": { | |
| "Midhun": "ml-IN-MidhunNeural", | |
| "Sobhana": "ml-IN-SobhanaNeural" | |
| }, | |
| "Mongolian": { | |
| "Bataa": "mn-MN-BataaNeural", | |
| "Yesui": "mn-MN-YesuiNeural" | |
| }, | |
| "Marathi": { | |
| "Aarohi": "mr-IN-AarohiNeural", | |
| "Manohar": "mr-IN-ManoharNeural" | |
| }, | |
| "Maltese": { | |
| "Grace": "mt-MT-GraceNeural", | |
| "Joseph": "mt-MT-JosephNeural" | |
| }, | |
| "Burmese": { | |
| "Nilar": "my-MM-NilarNeural", | |
| "Thiha": "my-MM-ThihaNeural" | |
| }, | |
| "Nepali": { | |
| "Hemkala": "ne-NP-HemkalaNeural", | |
| "Sagar": "ne-NP-SagarNeural" | |
| }, | |
| "Polish": { | |
| "Marek": "pl-PL-MarekNeural", | |
| "Zofia": "pl-PL-ZofiaNeural" | |
| }, | |
| "Pashto": { | |
| "Gul Nawaz": "ps-AF-GulNawazNeural", | |
| "Latifa": "ps-AF-LatifaNeural" | |
| }, | |
| "Romanian": { | |
| "Alina": "ro-RO-AlinaNeural", | |
| "Emil": "ro-RO-EmilNeural" | |
| }, | |
| "Russian": { | |
| "Svetlana": "ru-RU-SvetlanaNeural", | |
| "Dmitry": "ru-RU-DmitryNeural" | |
| }, | |
| "Sinhala": { | |
| "Sameera": "si-LK-SameeraNeural", | |
| "Thilini": "si-LK-ThiliniNeural" | |
| }, | |
| "Slovak": { | |
| "Lukas": "sk-SK-LukasNeural", | |
| "Viktoria": "sk-SK-ViktoriaNeural" | |
| }, | |
| "Slovenian": { | |
| "Petra": "sl-SI-PetraNeural", | |
| "Rok": "sl-SI-RokNeural" | |
| }, | |
| "Somali": { | |
| "Muuse": "so-SO-MuuseNeural", | |
| "Ubax": "so-SO-UbaxNeural" | |
| }, | |
| "Albanian": { | |
| "Anila": "sq-AL-AnilaNeural", | |
| "Ilir": "sq-AL-IlirNeural" | |
| }, | |
| "Serbian": { | |
| "Nicholas": "sr-RS-NicholasNeural", | |
| "Sophie": "sr-RS-SophieNeural" | |
| }, | |
| "Sundanese": { | |
| "Jajang": "su-ID-JajangNeural", | |
| "Tuti": "su-ID-TutiNeural" | |
| }, | |
| "Swahili": { | |
| "Rafiki": "sw-KE-RafikiNeural", | |
| "Zuri": "sw-KE-ZuriNeural", | |
| "Daudi": "sw-TZ-DaudiNeural", | |
| "Rehema": "sw-TZ-RehemaNeural" | |
| }, | |
| "Tamil": { | |
| "Pallavi": "ta-IN-PallaviNeural", | |
| "Valluvar": "ta-IN-ValluvarNeural", | |
| "Kumar": "ta-LK-KumarNeural", | |
| "Saranya": "ta-LK-SaranyaNeural", | |
| "Kani": "ta-MY-KaniNeural", | |
| "Surya": "ta-MY-SuryaNeural", | |
| "Anbu": "ta-SG-AnbuNeural" | |
| }, | |
| "Telugu": { | |
| "Mohan": "te-IN-MohanNeural", | |
| "Shruti": "te-IN-ShrutiNeural" | |
| }, | |
| "Turkish": { | |
| "Ahmet": "tr-TR-AhmetNeural", | |
| "Emel": "tr-TR-EmelNeural" | |
| }, | |
| "Ukrainian": { | |
| "Ostap": "uk-UA-OstapNeural", | |
| "Polina": "uk-UA-PolinaNeural" | |
| }, | |
| "Urdu": { | |
| "Gul": "ur-IN-GulNeural", | |
| "Salman": "ur-IN-SalmanNeural", | |
| "Asad": "ur-PK-AsadNeural", | |
| "Uzma": "ur-PK-UzmaNeural" | |
| }, | |
| "Uzbek": { | |
| "Madina": "uz-UZ-MadinaNeural", | |
| "Sardor": "uz-UZ-SardorNeural" | |
| }, | |
| "Mandarin": { | |
| "Xiaoxiao": "zh-CN-XiaoxiaoNeural", | |
| "Yunyang": "zh-CN-YunyangNeural", | |
| "Yunxi": "zh-CN-YunxiNeural", | |
| "Xiaoyi": "zh-CN-XiaoyiNeural", | |
| "Yunjian": "zh-CN-YunjianNeural", | |
| "Yunxia": "zh-CN-YunxiaNeural", | |
| "Xiaobei": "zh-CN-liaoning-XiaobeiNeural", | |
| "Xiaoni": "zh-CN-shaanxi-XiaoniNeural", | |
| "HiuMaan": "zh-HK-HiuMaanNeural", | |
| "HiuGaai": "zh-HK-HiuGaaiNeural", | |
| "WanLung": "zh-HK-WanLungNeural", | |
| "HsiaoChen": "zh-TW-HsiaoChenNeural", | |
| "HsiaoYu": "zh-TW-HsiaoYuNeural", | |
| "YunJhe": "zh-TW-YunJheNeural" | |
| }, | |
| "Zulu": { | |
| "Thando": "zu-ZA-ThandoNeural", | |
| "Themba": "zu-ZA-ThembaNeural" | |
| } | |
| } | |
| async def text_to_speech_edge(text, language_code, speaker, tashkeel_checkbox=False): | |
| # Define the character limit | |
| char_limit = 10000 | |
| if len(text) > char_limit: | |
| return f"Error: The input text exceeds the character limit of {char_limit} characters.", None | |
| # Get the voice for the selected language and speaker | |
| voice = language_dict[language_code][speaker] | |
| communicate = edge_tts.Communicate(text, voice) | |
| with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") as tmp_file: | |
| tmp_path = tmp_file.name | |
| await communicate.save(tmp_path) | |
| return text, tmp_path | |
| def get_speakers(language): | |
| print(language) | |
| speakers = list(language_dict[language].keys()) | |
| return gr.Dropdown(choices=speakers, value=speakers[0], interactive=True), gr.Checkbox(visible=language == "Arabic", interactive=True) | |
| default_language = None | |
| default_speaker = None | |
| with gr.Blocks(title="Writoo AI V2") as demo: | |
| gr.HTML(" ") | |
| gr.HTML(f"<h2 style='color:Tomato;'> 🎥 **Exciting News: 60+ Minutes File Creation is also Free !!** 🎥 </h3>") | |
| gr.Markdown("✨ Features: • Convert text to speech with 60+ audio files.• Choose from 72+ languages • Its Free 😍") | |
| with gr.Row(): | |
| with gr.Column(): | |
| input_text = gr.Textbox(lines=5, label="Input Text", placeholder="Enter text to convert to speech") | |
| language = gr.Dropdown( | |
| choices=list(language_dict.keys()), value=default_language, label="Languages", interactive=True | |
| ) | |
| speaker = gr.Dropdown(choices=[], value=default_speaker, label="Speakers", interactive=False) | |
| tashkeel_checkbox = gr.Checkbox(label="Tashkeel", value=False, visible=False, interactive=False) | |
| run_btn = gr.Button(value="Generate Audio", variant="primary") | |
| with gr.Column(): | |
| output_text = gr.Textbox(label="Output Text") | |
| output_audio = gr.Audio(type="filepath", label="Audio Output") | |
| language.change(get_speakers, inputs=[language], outputs=[speaker, tashkeel_checkbox]) | |
| run_btn.click(text_to_speech_edge, inputs=[input_text, language, speaker, tashkeel_checkbox], outputs=[output_text, output_audio]) | |
| if __name__ == "__main__": | |
| demo.queue().launch(share=False) | |