g-TTS / app.py
alamin655's picture
Create app.py
112539c
raw
history blame
3.93 kB
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",
]
# 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)