import gradio as gr from tts import generate_tts, LANGUAGES from audio_analysis import compare_both, reset_all from llm import generate_sentences def gen_sentences_and_audio(topic, n): n = max(1, min(int(n), 3)) sentences = generate_sentences(topic, n) sentences_no_quotes = [s.strip().strip('"') for s in sentences] text = "\n".join(sentences_no_quotes) audio = generate_tts(text, LANGUAGES["English (US)"]) return text, audio with gr.Blocks() as app: gr.Markdown("## Listen, Record, and Compare Your Pronunciation (in English)") with gr.Row(): topic_in = gr.Textbox(label="Enter a Topic", value="", interactive=True) n_sentences_in = gr.Number(label="Number of Sentences", value=1, precision=0, minimum=1, maximum=3,interactive=True) gen_text_btn = gr.Button("Generate Sentence(s) and Reference Audio") text_in = gr.Textbox(label="Generated Sentence(s) for Reference Audio", interactive=False) tts_audio = gr.Audio(label="Reference Audio (gTTS)", interactive=False, type="filepath") gr.Markdown("**Step 2: Record your version after listening to the reference.**") user_audio = gr.Audio(sources=["microphone"], label="Your Recorded Audio", type="filepath") compare_btn = gr.Button("Compare") reset_btn = gr.Button("Restart / Reset") table_out = gr.Dataframe(label="Word-by-Word Comparison", visible=True) plot_out = gr.Plot(label="Waveform Comparison Plot") gen_text_btn.click( fn=gen_sentences_and_audio, inputs=[topic_in, n_sentences_in], outputs=[text_in, tts_audio] ) compare_btn.click( fn=compare_both, inputs=[tts_audio, user_audio], outputs=[plot_out, table_out] ) reset_btn.click( fn=reset_all, inputs=[], outputs=[topic_in, text_in, tts_audio, user_audio, plot_out, table_out] ) if __name__ == "__main__": app.launch()