Spaces:
Runtime error
Runtime error
import gradio as gr | |
import torch | |
from audiocraft.models import MusicGen | |
import uuid | |
import os | |
import scipy.io.wavfile as wav | |
# Cargar el modelo de MusicGen | |
print("Cargando el modelo MusicGen...") | |
try: | |
model = MusicGen.get_pretrained('facebook/musicgen-small') | |
print("Modelo cargado correctamente.") | |
except Exception as e: | |
print(f"Error al cargar el modelo: {e}") | |
exit(1) | |
# Función para generar música | |
def generar_musica(descripcion): | |
try: | |
print(f"\nGenerando música con la descripción: {descripcion}") | |
# Configurar duración de la pista (5 segundos para pruebas más rápidas) | |
model.set_generation_params(duration=5) | |
# Generar música | |
output = model.generate(descriptions=[descripcion]) | |
# Verificar si la salida es válida | |
if not isinstance(output, list) or len(output) == 0: | |
print("Error: La salida del modelo es vacía.") | |
return "Error: No se pudo generar la música." | |
# Extraer el tensor de audio | |
audio_tensor = output[0] | |
# Verificar que el tensor no esté vacío | |
if not isinstance(audio_tensor, torch.Tensor) or audio_tensor.numel() == 0: | |
print("Error: El tensor de audio es inválido.") | |
return "Error: No se pudo generar la música." | |
# Convertir a NumPy (float32 para evitar distorsiones) | |
audio_data = audio_tensor.cpu().detach().numpy().astype("float32") | |
# Normalizar a 16 bits | |
audio_data = (audio_data * 32767).astype("int16") | |
# Guardar el archivo de audio | |
output_path = f"output_{uuid.uuid4().hex}.wav" | |
wav.write(output_path, 32000, audio_data) | |
print(f"Música generada y guardada en: {output_path}") | |
return output_path | |
except Exception as e: | |
print(f"Error durante la generación de música: {e}") | |
return "Error: No se pudo generar la música." | |
# Crear interfaz con Gradio | |
demo = gr.Interface( | |
fn=generar_musica, | |
inputs=gr.Textbox(label="Descripción de la música"), | |
outputs=gr.Audio(label="Música Generada"), | |
title="Generador de Música AI", | |
description="Introduce una descripción y genera una pista de música." | |
) | |
# Ejecutar la aplicación | |
if __name__ == "__main__": | |
demo.launch() |