File size: 2,283 Bytes
65f6ccd
 
c89bd94
65f6ccd
 
1df7425
65f6ccd
1df7425
65f6ccd
1df7425
 
 
 
 
 
65f6ccd
b8e52fb
65f6ccd
 
1df7425
65f6ccd
1df7425
 
65f6ccd
 
08d8fc7
65f6ccd
1df7425
 
 
 
08d8fc7
1df7425
 
08d8fc7
1df7425
08d8fc7
1df7425
 
65f6ccd
1df7425
 
08d8fc7
1df7425
 
e359ea8
08d8fc7
65f6ccd
1df7425
65f6ccd
1df7425
65f6ccd
1df7425
65f6ccd
1df7425
 
65f6ccd
 
 
c89bd94
 
65f6ccd
 
0f19188
 
228dc63
1df7425
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
66
67
68
69
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()