Spaces:
Sleeping
Sleeping
File size: 1,985 Bytes
2c7bd07 22d2fd3 c0f9fa0 22d2fd3 57fc41b e94cef8 dafe604 e94cef8 dafe604 22d2fd3 dafe604 e94cef8 dafe604 2c7bd07 dafe604 e94cef8 22d2fd3 e94cef8 22d2fd3 e94cef8 dafe604 e94cef8 dafe604 22d2fd3 e94cef8 dafe604 22d2fd3 e94cef8 22d2fd3 e94cef8 22d2fd3 e94cef8 dafe604 22d2fd3 e94cef8 dafe604 41bdec3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
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")
|