speechtranslate / app.py
ghostai1's picture
Update app.py
22d2fd3 verified
raw
history blame
1.86 kB
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 "", None, log
# Translate
dest = "es" if target == "Spanish" else "en"
translated = GoogleTranslator(source='auto', target=dest).translate(text)
# Text-to-speech
tts = gTTS(translated, lang=dest)
tmp = tempfile.NamedTemporaryFile(suffix=".mp3", delete=False)
tts.write_to_fp(tmp)
tmp.flush()
# Update session log
log_entry = [text, target, translated]
log = log + [log_entry]
return translated, tmp.name, log
with gr.Blocks(title="πŸŒπŸ’¬ Translate & Speak with Logs") as demo:
gr.Markdown(
"# πŸ—£οΈ Translate & Speak + Session Log\n"
"Type text, choose language, click **Go**, and see 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"
)
# Hidden state for accumulating log entries
log_state = gr.State([])
go_btn.click(
translate_and_speak,
inputs=[text_in, lang_sel, log_state],
outputs=[translated_out, audio_out, session_log],
_js="(x)=>{return x;}" # ensure state passes through
)
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0")