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 | |
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=10) # Asegurar duración de 10 segundos | |
# Generar música | |
output = model.generate(descriptions=[descripcion]) | |
if not output or not isinstance(output, list) or len(output) == 0: | |
print("Error: La salida del modelo es vacía o inválida.") | |
return None | |
audio_tensor = output[0] # Extraer el primer tensor de la lista | |
if not isinstance(audio_tensor, torch.Tensor) or audio_tensor.numel() == 0: | |
print("Error: El tensor de audio es inválido o vacío.") | |
return None | |
# Convertir el tensor a NumPy | |
audio_data = audio_tensor.cpu().detach().numpy() | |
# Verificar la forma del tensor para asegurar que tiene la dimensión correcta | |
if len(audio_data.shape) == 1: # Asegurar que tiene al menos 2D | |
audio_data = np.expand_dims(audio_data, axis=0) | |
# Normalizar audio a 16 bits PCM | |
audio_data = (audio_data * 32767).astype(np.int16) | |
# Guardar el archivo de audio | |
output_path = f"output_{uuid.uuid4().hex}.wav" | |
scipy.io.wavfile.write(output_path, 32000, audio_data[0]) # Extraer el primer canal si es estéreo | |
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 None | |
# 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." | |
) | |
if __name__ == "__main__": | |
demo.launch() |