Sergiosamyy commited on
Commit
1df7425
·
verified ·
1 Parent(s): 08d8fc7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +30 -26
app.py CHANGED
@@ -3,54 +3,57 @@ import torch
3
  from audiocraft.models import MusicGen
4
  import uuid
5
  import os
6
- import scipy.io.wavfile
7
- import numpy as np
8
 
9
- # Cargar el modelo
10
  print("Cargando el modelo MusicGen...")
11
- model = MusicGen.get_pretrained('facebook/musicgen-small')
12
- print("Modelo cargado correctamente.")
 
 
 
 
13
 
14
  # Función para generar música
15
  def generar_musica(descripcion):
16
  try:
17
- print(f"Generando música con descripción: {descripcion}")
18
 
19
- # Establecer parámetros de generación
20
- model.set_generation_params(duration=10) # Asegurar duración de 10 segundos
21
 
22
  # Generar música
23
  output = model.generate(descriptions=[descripcion])
24
 
25
- if not output or not isinstance(output, list) or len(output) == 0:
26
- print("Error: La salida del modelo es vacía o inválida.")
27
- return None
 
28
 
29
- audio_tensor = output[0] # Extraer el primer tensor de la lista
 
30
 
 
31
  if not isinstance(audio_tensor, torch.Tensor) or audio_tensor.numel() == 0:
32
- print("Error: El tensor de audio es inválido o vacío.")
33
- return None
34
 
35
- # Convertir el tensor a NumPy
36
- audio_data = audio_tensor.cpu().detach().numpy()
37
 
38
- # Verificar la forma del tensor para asegurar que tiene la dimensión correcta
39
- if len(audio_data.shape) == 1: # Asegurar que tiene al menos 2D
40
- audio_data = np.expand_dims(audio_data, axis=0)
41
-
42
- # Normalizar audio a 16 bits PCM
43
- audio_data = (audio_data * 32767).astype(np.int16)
44
 
45
  # Guardar el archivo de audio
46
  output_path = f"output_{uuid.uuid4().hex}.wav"
47
- scipy.io.wavfile.write(output_path, 32000, audio_data[0]) # Extraer el primer canal si es estéreo
48
 
49
- print(f"Música generada y guardada en {output_path}")
50
  return output_path
 
51
  except Exception as e:
52
- print(f"Error al generar música: {e}")
53
- return None
54
 
55
  # Crear interfaz con Gradio
56
  demo = gr.Interface(
@@ -61,5 +64,6 @@ demo = gr.Interface(
61
  description="Introduce una descripción y genera una pista de música."
62
  )
63
 
 
64
  if __name__ == "__main__":
65
  demo.launch()
 
3
  from audiocraft.models import MusicGen
4
  import uuid
5
  import os
6
+ import scipy.io.wavfile as wav
 
7
 
8
+ # Cargar el modelo de MusicGen
9
  print("Cargando el modelo MusicGen...")
10
+ try:
11
+ model = MusicGen.get_pretrained('facebook/musicgen-small')
12
+ print("Modelo cargado correctamente.")
13
+ except Exception as e:
14
+ print(f"Error al cargar el modelo: {e}")
15
+ exit(1)
16
 
17
  # Función para generar música
18
  def generar_musica(descripcion):
19
  try:
20
+ print(f"\nGenerando música con la descripción: {descripcion}")
21
 
22
+ # Configurar duración de la pista (5 segundos para pruebas más rápidas)
23
+ model.set_generation_params(duration=5)
24
 
25
  # Generar música
26
  output = model.generate(descriptions=[descripcion])
27
 
28
+ # Verificar si la salida es válida
29
+ if not isinstance(output, list) or len(output) == 0:
30
+ print("Error: La salida del modelo es vacía.")
31
+ return "Error: No se pudo generar la música."
32
 
33
+ # Extraer el tensor de audio
34
+ audio_tensor = output[0]
35
 
36
+ # Verificar que el tensor no esté vacío
37
  if not isinstance(audio_tensor, torch.Tensor) or audio_tensor.numel() == 0:
38
+ print("Error: El tensor de audio es inválido.")
39
+ return "Error: No se pudo generar la música."
40
 
41
+ # Convertir a NumPy (float32 para evitar distorsiones)
42
+ audio_data = audio_tensor.cpu().detach().numpy().astype("float32")
43
 
44
+ # Normalizar a 16 bits
45
+ audio_data = (audio_data * 32767).astype("int16")
 
 
 
 
46
 
47
  # Guardar el archivo de audio
48
  output_path = f"output_{uuid.uuid4().hex}.wav"
49
+ wav.write(output_path, 32000, audio_data)
50
 
51
+ print(f"Música generada y guardada en: {output_path}")
52
  return output_path
53
+
54
  except Exception as e:
55
+ print(f"Error durante la generación de música: {e}")
56
+ return "Error: No se pudo generar la música."
57
 
58
  # Crear interfaz con Gradio
59
  demo = gr.Interface(
 
64
  description="Introduce una descripción y genera una pista de música."
65
  )
66
 
67
+ # Ejecutar la aplicación
68
  if __name__ == "__main__":
69
  demo.launch()