ghostai1 commited on
Commit
22d2fd3
·
verified ·
1 Parent(s): 30533c7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +35 -20
app.py CHANGED
@@ -1,42 +1,57 @@
1
  import tempfile
2
  from gtts import gTTS
3
- from googletrans import Translator
4
  import gradio as gr
5
 
6
- translator = Translator()
7
-
8
- def translate_and_speak(text: str, target: str):
9
  if not text.strip():
10
- return "", None
11
 
12
- # 1️⃣ translate text
13
  dest = "es" if target == "Spanish" else "en"
14
- translated = translator.translate(text, dest=dest).text
15
 
16
- # 2️⃣ speak translated text
17
  tts = gTTS(translated, lang=dest)
18
  tmp = tempfile.NamedTemporaryFile(suffix=".mp3", delete=False)
19
  tts.write_to_fp(tmp)
20
  tmp.flush()
21
 
22
- return translated, tmp.name
 
 
 
 
23
 
24
- with gr.Blocks(title="🌐💬 Translate & Speak") as demo:
25
  gr.Markdown(
26
- "# 🗣️ Translate & Speak\n"
27
- "Type text below, choose your target language, and hear it spoken!"
28
  )
29
 
30
- text_in = gr.Textbox(lines=3, placeholder="Enter text here…")
31
- lang_sel = gr.Radio(["Spanish", "English"], value="Spanish", label="Translate to")
32
- btn = gr.Button("Translate & Speak 🔈", variant="primary")
33
- txt_out = gr.Textbox(label="Translated text", interactive=False)
 
 
34
  audio_out = gr.Audio(label="Speech output", type="filepath")
 
 
 
 
 
 
 
 
 
 
35
 
36
- btn.click(
37
- fn=translate_and_speak,
38
- inputs=[text_in, lang_sel],
39
- outputs=[txt_out, audio_out]
 
40
  )
41
 
42
  if __name__ == "__main__":
 
1
  import tempfile
2
  from gtts import gTTS
3
+ from deep_translator import GoogleTranslator
4
  import gradio as gr
5
 
6
+ def translate_and_speak(text: str, target: str, log: list):
 
 
7
  if not text.strip():
8
+ return "", None, log
9
 
10
+ # Translate
11
  dest = "es" if target == "Spanish" else "en"
12
+ translated = GoogleTranslator(source='auto', target=dest).translate(text)
13
 
14
+ # Text-to-speech
15
  tts = gTTS(translated, lang=dest)
16
  tmp = tempfile.NamedTemporaryFile(suffix=".mp3", delete=False)
17
  tts.write_to_fp(tmp)
18
  tmp.flush()
19
 
20
+ # Update session log
21
+ log_entry = [text, target, translated]
22
+ log = log + [log_entry]
23
+
24
+ return translated, tmp.name, log
25
 
26
+ with gr.Blocks(title="🌐💬 Translate & Speak with Logs") as demo:
27
  gr.Markdown(
28
+ "# 🗣️ Translate & Speak + Session Log\n"
29
+ "Type text, choose language, click **Go**, and see your session history."
30
  )
31
 
32
+ with gr.Row():
33
+ text_in = gr.Textbox(lines=3, placeholder="Enter text here…")
34
+ lang_sel = gr.Radio(["Spanish", "English"], value="Spanish", label="Translate to")
35
+ go_btn = gr.Button("Go 🔄", variant="primary")
36
+
37
+ translated_out = gr.Textbox(label="Translated text", interactive=False)
38
  audio_out = gr.Audio(label="Speech output", type="filepath")
39
+ session_log = gr.Dataframe(
40
+ headers=["Input Text", "Target Language", "Translated Text"],
41
+ datatype=["str", "str", "str"],
42
+ wrap=True,
43
+ interactive=False,
44
+ label="Session Log"
45
+ )
46
+
47
+ # Hidden state for accumulating log entries
48
+ log_state = gr.State([])
49
 
50
+ go_btn.click(
51
+ translate_and_speak,
52
+ inputs=[text_in, lang_sel, log_state],
53
+ outputs=[translated_out, audio_out, session_log],
54
+ _js="(x)=>{return x;}" # ensure state passes through
55
  )
56
 
57
  if __name__ == "__main__":