Spaces:
Runtime error
Runtime error
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) |