import gradio as gr from transformers import pipeline from datasets import load_dataset import torchaudio import torch # Cargar el modelo de traducción translator = pipeline("translation", model="Helsinki-NLP/opus-mt-es-en") synthesiser = pipeline("text-to-speech", "microsoft/speecht5_tts") # Cargar voces preentrenadas embeddings_dataset = load_dataset("Matthijs/cmu-arctic-xvectors", split="validation") # Función principal def translate_and_speak(text): # Traducir de español a inglés translated = translator(text, src_lang="es", tgt_lang="en")[0]["translation_text"] # Usar una voz preentrenada speaker_embeddings = torch.tensor(embeddings_dataset[7306]["xvector"]).unsqueeze(0) # Generar audio speech = synthesiser(translated, forward_params={"speaker_embeddings": speaker_embeddings}) # Extraer waveform y sampling_rate del resultado waveform = torch.tensor(speech["audio"]) # Convertir a tensor de PyTorch sampling_rate = speech["sampling_rate"] # Guardar el audio temporalmente output_path = "output.wav" torchaudio.save(output_path, waveform.unsqueeze(0), sample_rate=sampling_rate) # Unsqueeze para añadir batch dimension return translated, output_path # Crear la interfaz interface = gr.Interface( fn=translate_and_speak, inputs=gr.Textbox(label="Texto en Español"), outputs=[ gr.Textbox(label="Texto Traducido (Inglés)"), gr.Audio(label="Audio Generado (Inglés)") ], title="Traductor y Generador de Voz", description="Escribe un texto en español y este será traducido al inglés y leído en voz alta usando IA." ) # Lanzar la aplicación if __name__ == "__main__": interface.launch()