speechtranslate / app.py
ghostai1's picture
Update app.py
e94cef8 verified
import tempfile
from gtts import gTTS
from deep_translator import GoogleTranslator
import gradio as gr
def translate_and_speak(text: str, target: str, log: list):
if not text.strip():
# return empty outputs and keep log untouched
return "", None, log, log
# 1️⃣ translate
dest = "es" if target == "Spanish" else "en"
translated = GoogleTranslator(source='auto', target=dest).translate(text)
# 2️⃣ speak
tts = gTTS(translated, lang=dest)
tmp = tempfile.NamedTemporaryFile(suffix=".mp3", delete=False)
tts.write_to_fp(tmp)
tmp.flush()
# 3️⃣ update log
log_entry = [text, target, translated]
new_log = log + [log_entry]
# outputs: translated text, audio filepath, session table rows, updated state
return translated, tmp.name, new_log, new_log
with gr.Blocks(title="🌐💬 Translate & Speak + Session Log") as demo:
gr.Markdown(
"# 🗣️ Translate & Speak + Session Log\n"
"Type text, choose language, click **Go**, and watch your session history."
)
with gr.Row():
text_in = gr.Textbox(lines=3, placeholder="Enter text here…")
lang_sel = gr.Radio(["Spanish", "English"], value="Spanish", label="Translate to")
go_btn = gr.Button("Go 🔄", variant="primary")
translated_out = gr.Textbox(label="Translated text", interactive=False)
audio_out = gr.Audio(label="Speech output", type="filepath")
session_log = gr.Dataframe(
headers=["Input Text", "Target Language", "Translated Text"],
datatype=["str", "str", "str"],
wrap=True,
interactive=False,
label="Session Log"
)
log_state = gr.State([]) # holds list of [input, lang, translation]
go_btn.click(
translate_and_speak,
inputs=[text_in, lang_sel, log_state],
outputs=[translated_out, audio_out, session_log, log_state]
)
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0")