import gradio as gr from gtts import gTTS import io import os import time from gtts.lang import _main_langs AUDIO_DIR = 'audio_files' MAX_FILE_AGE = 24 * 60 * 60 # maximum age of audio files in seconds (24 hours) def text_to_speech(text, lang, tld): # map the language name to its corresponding code lang_codes = {lang_name: lang_code for lang_code, lang_name in _main_langs().items()} lang_code = lang_codes[lang] # create the text-to-speech audio tts = gTTS(text, lang=lang_code, tld=tld) fp = io.BytesIO() tts.write_to_fp(fp) fp.seek(0) # create the audio directory if it does not exist os.makedirs(AUDIO_DIR, exist_ok=True) # generate a unique file name for the audio file file_name = str(time.time()) + '.wav' file_path = os.path.join(AUDIO_DIR, file_name) # save the audio stream to a file with open(file_path, 'wb') as f: f.write(fp.read()) # delete old audio files delete_old_audio_files() # return the file path return file_path, f.name def delete_old_audio_files(): # delete audio files older than MAX_FILE_AGE now = time.time() for file_name in os.listdir(AUDIO_DIR): file_path = os.path.join(AUDIO_DIR, file_name) if now - os.path.getmtime(file_path) > MAX_FILE_AGE: os.remove(file_path) # list of supported TLDs tlds = [ "com", "ad", "ae", "com.af", "com.ag", "com.ai", "com.ar", "as", "at", "com.au", "az", "ba", "com.bd", "be", "bf", "bg", "bj", "br", "bs", "bt", "co.bw", "by", "com.bz", "ca", "cd", "ch", "ci", "co.ck", "cl", "cm", "cn", "com.co", "co.cr", "cv", "dj", "dm", "com.do", "dz", "com.ec", "ee", "com.eg", "es", "et", "fi", "com.fj", "fm", "fr", "ga", "ge", "gg", "com.gh", "com.gi", "gl", "gm", "gr", "com.gt", "gy", "com.hk", "hn", "ht", "hr", "hu", "co.id", "ie", "co.il", "im", "co.in", "iq", "is", "it", "iw", "je", "com.je", "jo", "co.jp", "co.ke", "com.kh", "ki", "kg", "co.kr", "com.kw", "kz", "la", "com.lb", "li", "lk", "co.ls", "lt", "lu", "lv", "com.ly", "com.ma", "md", "me", "mg", "mk", "ml", "mm", "mn", "ms", "com.mt", "mu", "mv", "mw", "com.mx", "com.my", "co.mz", "na", "ng", "ni", "ne", "nl", "no", "com.np", "nr", "nu", "co.nz", "com.om", "pa", "pe", "pg", "ph", "pk", "pl", "pn", "com.pr", "ps", "pt", "com.py", "com.qa", "ro", "ru", "rw", "com.sa", "com.sb", "sc", "se", "com.sg", "sh", "si", "sk", "com.sl", "sn", "so", "sm", "sr", "st", "com.sv", "td", "tg", "co.th", "com.tj", "tl", "tm", "tn", "to", "com.tr", "tt", "com.tw", "co.tz", "com.ua", "co.ug", "co.uk", "com,uy", "co.uz", "com.vc", "co.ve", "vg", "co.vi", "com.vn", "vu", "ws", "rs", "co.za", "co.zm", "co.zw", "cat", "com.ng" ] # create the Gradio interface iface = gr.Interface(fn=text_to_speech, inputs=[gr.inputs.Textbox(lines=10, label="Enter your text here:"), gr.inputs.Dropdown(choices=list(_main_langs().values()), label="Select language:"), gr.inputs.Dropdown(choices=[tld for tld in tlds], label="Select TLD:", default="com")], outputs=[gr.Audio(label="Audio"), gr.File(label="Audio File")], allow_flagging="never") iface.launch(enable_queue=True)