thak123's picture
Create app.py
12051c8 verified
Raw
History Blame Contribute Delete
2.5 kB
import os
import tempfile
import gradio as gr
from gtts import gTTS
from pydub import AudioSegment
VOCAB_FOLDER = "vocab_files"
def get_date_choices():
files = [f for f in os.listdir(VOCAB_FOLDER) if f.endswith(".txt")]
dates = [os.path.splitext(f)[0] for f in files]
return sorted(dates)
def load_vocab(selected_date):
if not selected_date or selected_date == "datum":
return [
[], # State ostaje prazan
gr.update(choices=[], value=None),
gr.update(value="Odaberite datum da biste vidjeli riječi za taj dan.")
]
path = os.path.join(VOCAB_FOLDER, f"{selected_date}.txt")
with open(path, "r", encoding="utf-8") as f:
words = [line.strip() for line in f if line.strip()]
markdown_content = "\n".join([f"- {w}" for w in words])
return [
words,
gr.update(choices=words, value=words[0] if words else None),
gr.update(value=markdown_content)
]
def word_to_audio(word):
tts = gTTS(text=word, lang="hr")
tmp = tempfile.NamedTemporaryFile(delete=False, suffix=".mp3")
tts.save(tmp.name)
return tmp.name
def words_to_audio(words):
combined = AudioSegment.empty()
for w in words:
tts = gTTS(text=w, lang="hr")
tmp = tempfile.NamedTemporaryFile(delete=False, suffix=".mp3")
tts.save(tmp.name)
segment = AudioSegment.from_file(tmp.name, format="mp3")
combined += segment
out_tmp = tempfile.NamedTemporaryFile(delete=False, suffix=".mp3")
combined.export(out_tmp.name, format="mp3")
return out_tmp.name
with gr.Blocks() as demo:
title = gr.HTML("<h1>Vokabular Audio Tool</h1>")
date_dropdown = gr.Dropdown(choices=["datum"] + get_date_choices(), label="Odaberite datum")
words_state = gr.State(value=[])
word_dropdown = gr.Dropdown(choices=[], label="Odaberite riječ")
listen_btn = gr.Button("Slušaj")
play_all_btn = gr.Button("Slušaj sve riječi")
audio_out = gr.Audio(label="Preuzmi audio", type="filepath")
words_md = gr.Markdown(value="Odaberite datum da biste vidjeli riječi za taj dan.")
date_dropdown.change(
fn=load_vocab,
inputs=date_dropdown,
outputs=[words_state, word_dropdown, words_md]
)
listen_btn.click(
fn=word_to_audio,
inputs=word_dropdown,
outputs=audio_out
)
play_all_btn.click(
fn=words_to_audio,
inputs=words_state,
outputs=audio_out
)
demo.launch()