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()