asagasad's picture
Update app.py
ccf06cc verified
import gradio as gr
from gtts import gTTS
import tempfile
import os
import docx
from pydub import AudioSegment
# Function to extract text from docx
def extract_text_from_docx(file):
doc = docx.Document(file.name)
return [para.text.strip() for para in doc.paragraphs if para.text.strip()]
# Function to convert Urdu text to speech
def urdu_tts(text, speed):
tts = gTTS(text=text, lang='ur')
with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") as tmp:
tts.save(tmp.name)
audio_path = tmp.name
# Change speed using pydub
sound = AudioSegment.from_file(audio_path)
sound = sound.speedup(playback_speed=speed)
final_path = audio_path.replace(".mp3", f"_x{speed}.mp3")
sound.export(final_path, format="mp3")
return final_path
# Gradio stateful interface
def start_reader(file, speed):
lines = extract_text_from_docx(file)
return lines, f"کل {len(lines)} لائنیں ملی ہیں۔", 0
def read_line(lines, line_idx, speed):
if line_idx < len(lines):
audio_file = urdu_tts(lines[line_idx], speed)
return lines[line_idx], audio_file, line_idx + 1
else:
return "📘 تمام لائنیں پڑھ لی گئیں!", None, line_idx
# Gradio UI
with gr.Blocks() as demo:
gr.Markdown("## 📖 اردو لائن بائی لائن ریڈر")
with gr.Row():
file_input = gr.File(label="📁 .docx فائل اپ لوڈ کریں", file_types=['.docx'])
speed_slider = gr.Slider(0.5, 2.0, 1.0, step=0.1, label="🔊 رفتار")
start_button = gr.Button("🚀 فائل پڑھنا شروع کریں")
status = gr.Textbox(label="🔹 اسٹیٹس")
lines_state = gr.State()
index_state = gr.State()
current_line = gr.Textbox(label="📌 موجودہ لائن", lines=2)
audio_output = gr.Audio(label="🎧 آڈیو")
next_button = gr.Button("▶️ اگلی لائن پڑھیں")
start_button.click(fn=start_reader, inputs=[file_input, speed_slider],
outputs=[lines_state, status, index_state])
next_button.click(fn=read_line, inputs=[lines_state, index_state, speed_slider],
outputs=[current_line, audio_output, index_state])
demo.launch()