Spaces:
Sleeping
Sleeping
| 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() |