Spaces:
Sleeping
Sleeping
import pandas as pd | |
import gradio as gr | |
from gtts import gTTS | |
import tempfile | |
import os | |
# Step 1: Read the CSV file | |
csv_url = "https://raw.githubusercontent.com/MK316/241214/refs/heads/main/data/plural_sample.csv" | |
df = pd.read_csv(csv_url) | |
# Initialize state | |
state = {"index": 0, "completed": False} | |
# Function to generate text and audio for the current noun | |
def generate_practice(): | |
if state["completed"]: | |
return "You've completed the practice.", None | |
# Get the current noun data | |
current_noun = df.iloc[state["index"]] | |
noun_text = ( | |
f"Repeat after me: the plural form of {current_noun['Singular']} is {current_noun['Plural']}." | |
) | |
# Generate audio using gTTS | |
tts = gTTS(noun_text) | |
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") | |
tts.save(temp_file.name) | |
return noun_text, temp_file.name | |
# Function to move to the next noun | |
def next_noun(): | |
if state["index"] < len(df) - 1: | |
state["index"] += 1 | |
else: | |
state["completed"] = True | |
return generate_practice() | |
# Gradio interface | |
with gr.Blocks() as app: | |
gr.Markdown("### Noun Practice") | |
gr.Markdown("Click **Start** to begin practicing. Repeat after the audio and click **Next** to proceed to the next noun.") | |
# Start button | |
start_button = gr.Button("Start") | |
text_display = gr.Textbox(label="Practice Text", interactive=False) | |
audio_output = gr.Audio(label="Audio", interactive=False) | |
# Next button | |
next_button = gr.Button("Next") | |
# Button actions | |
start_button.click(fn=generate_practice, outputs=[text_display, audio_output]) | |
next_button.click(fn=next_noun, outputs=[text_display, audio_output]) | |
# Launch the app | |
app.launch() | |