import gradio as gr import csv import os from pydub import AudioSegment from pydub.playback import play from rapidfuzz import process DATASET = "dataset.csv" def cargar_dataset(): with open(DATASET, newline='', encoding='utf-8') as f: reader = csv.DictReader(f) return [{"path": row["path"], "text": row["text"].lower().strip()} for row in reader] dataset = cargar_dataset() def buscar_audio(texto): texto = texto.lower().strip() frases = [d["text"] for d in dataset] match = process.extractOne(texto, frases, score_cutoff=30) if not match: return None, "❌ No encontré coincidencias en tus clips grabados." mejor_texto = match[0] ruta = next((d["path"] for d in dataset if d["text"] == mejor_texto), None) if ruta and os.path.exists(ruta): return ruta, f"🎧 Clip encontrado: {ruta}" else: return None, "⚠️ Algo falló encontrando el archivo de audio." def demo_func(texto): ruta, mensaje = buscar_audio(texto) return (ruta if ruta else None), mensaje demo = gr.Interface( fn=demo_func, inputs=gr.Textbox(label="Escribe una frase similar a una grabada"), outputs=[gr.Audio(label="Clip de voz"), gr.Textbox(label="Resultado")], title="🐽 Voz Kuchiyuya Real", description="Este demo busca y reproduce tu grabación más parecida al texto ingresado." ) if __name__ == "__main__": demo.launch()