Spaces:
Sleeping
Sleeping
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", | |
"gr", | |
"fr" | |
] | |
# create the Gradio interface | |
iface = gr.Interface(fn=text_to_speech, | |
inputs=[gr.Textbox(lines=10, label="Enter your text here:"), | |
gr.Dropdown(choices=list(_main_langs().values()), label="Select language:"), | |
gr.Dropdown(choices=[tld for tld in tlds], label="Select TLD:")], | |
outputs=[gr.Audio(label="Audio"), gr.File(label="Audio File")], | |
allow_flagging="never") | |
iface.launch() |