Spaces:
Runtime error
Runtime error
import gradio as gr | |
import torch | |
from audiocraft.models import MusicGen | |
import uuid | |
import os | |
import scipy.io.wavfile | |
import numpy as np | |
# Cargar el modelo MusicGen | |
print("Cargando el modelo MusicGen...") | |
model = MusicGen.get_pretrained('facebook/musicgen-small') | |
print("Modelo cargado correctamente.") | |
# Función para generar música | |
def generar_musica(descripcion): | |
try: | |
print(f"Generando música con descripción: {descripcion}") | |
# Establecer parámetros de generación | |
model.set_generation_params(duration=5) # Reducido a 5 segundos para evitar problemas de memoria | |
# Generar música | |
output = model.generate(descriptions=[descripcion]) | |
# Verificar si la salida del modelo es válida | |
if not isinstance(output, list) or len(output) == 0 or not isinstance(output[0], torch.Tensor): | |
print("Error: La salida del modelo es vacía o inválida.") | |
return "Error: No se pudo generar la música." | |
audio_tensor = output[0] | |
# Verificar si el tensor tiene datos | |
if audio_tensor.numel() == 0: | |
print("Error: El tensor generado está vacío.") | |
return "Error: No se pudo generar la música." | |
# Convertir el tensor a NumPy | |
audio_data = audio_tensor.cpu().detach().numpy() | |
# Normalizar audio para formato WAV de 16 bits | |
audio_data = np.int16(audio_data * 32767) | |
# Guardar el archivo de audio | |
output_path = f"/mnt/data/output_{uuid.uuid4().hex}.wav" | |
scipy.io.wavfile.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 al generar 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 |