Spaces:
Runtime error
Runtime error
File size: 2,231 Bytes
65f6ccd c89bd94 65f6ccd e359ea8 08d8fc7 65f6ccd 08d8fc7 65f6ccd b8e52fb 65f6ccd 08d8fc7 65f6ccd 08d8fc7 65f6ccd 08d8fc7 65f6ccd 08d8fc7 65f6ccd e359ea8 08d8fc7 dddefb6 08d8fc7 e359ea8 08d8fc7 65f6ccd 08d8fc7 65f6ccd 08d8fc7 65f6ccd c89bd94 65f6ccd 0f19188 228dc63 65f6ccd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
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() |