Uhhy commited on
Commit
3853cf4
1 Parent(s): 96808c3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +8 -26
app.py CHANGED
@@ -4,40 +4,26 @@ import torchaudio
4
  from audiocraft.models import MusicGen
5
  from audiocraft.data.audio import audio_write
6
  import logging
7
- import os
8
  import uuid
9
  from torch.cuda.amp import autocast
10
  import torch
11
 
12
- # Configura el logging
13
  logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
14
 
15
- # Cargar el modelo globalmente solo una vez
16
  logging.info("Iniciando y cargando el modelo preentrenado.")
17
- model = None
18
-
19
- def cargar_modelo():
20
- global model
21
- if model is None:
22
- logging.info("Cargando MusicGen por primera vez.")
23
- model = MusicGen.get_pretrained('nateraw/musicgen-songstarter-v0.2')
24
- logging.info("Modelo cargado exitosamente.")
25
- else:
26
- logging.info("El modelo ya ha sido cargado anteriormente, reutilizando.")
27
-
28
- # Llamar a la función para cargar el modelo inmediatamente al inicio del script
29
- cargar_modelo()
30
 
31
  @spaces.GPU(queue=False)
32
  def generar_musica(descripcion, melodia_audio, duracion):
33
- # Limpiar la caché de la GPU antes de generar
34
  torch.cuda.empty_cache()
35
  torch.cuda.synchronize()
36
 
37
  with autocast():
38
  logging.info("Iniciando la generación de música.")
39
  model.set_generation_params(duration=duracion)
40
-
41
  if descripcion:
42
  descripcion = [descripcion]
43
  if melodia_audio:
@@ -51,30 +37,26 @@ def generar_musica(descripcion, melodia_audio, duracion):
51
  else:
52
  logging.info("Generando música de manera incondicional.")
53
  wav = model.generate_unconditional(1)
54
-
55
  filename = f'{str(uuid.uuid4())}.wav'
56
  logging.info(f"Guardando la música generada con el nombre: {filename}")
57
  path = audio_write(filename, wav[0].cpu().to(torch.float32), model.sample_rate, strategy="loudness", loudness_compressor=True)
58
- print("Música guardada en", path, ".")
59
- # Verifica la forma del tensor de audio generado y si fue guardado correctamente
60
  logging.info(f"La forma del tensor de audio generado: {wav[0].shape}")
61
  logging.info("Música generada y guardada con éxito.")
62
  if not os.path.exists(path):
63
  raise ValueError(f'No se pudo guardar el audio en {path}')
64
 
65
  return path
66
-
67
- # Definir la interfaz Gradio
68
  descripcion = gr.Textbox(label="Descripción", placeholder="acústico, guitarra, melodía, trap, re menor, 90 bpm")
69
  melodia_audio = gr.Audio(label="Melodía de audio (opcional)", type="filepath")
70
- duracion = gr.Slider(label="Duración (segundos)", minimum=10, maximum=600, step=10, value=30) # Máximo 10 minutos (600 segundos)
71
  output_path = gr.Audio(label="Música generada", type="filepath")
72
 
73
- # Iniciar la aplicación en el puerto 7860
74
  gr.Interface(
75
  fn=generar_musica,
76
  inputs=[descripcion, melodia_audio, duracion],
77
  outputs=output_path,
78
  title="Generador de Música",
79
  description="Genera música utilizando el modelo MusicGen.",
80
- ).launch(server_port=7860)
 
4
  from audiocraft.models import MusicGen
5
  from audiocraft.data.audio import audio_write
6
  import logging
7
+ import os
8
  import uuid
9
  from torch.cuda.amp import autocast
10
  import torch
11
 
 
12
  logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
13
 
 
14
  logging.info("Iniciando y cargando el modelo preentrenado.")
15
+ model = MusicGen.get_pretrained('nateraw/musicgen-songstarter-v0.2')
16
+ logging.info("Modelo cargado exitosamente.")
 
 
 
 
 
 
 
 
 
 
 
17
 
18
  @spaces.GPU(queue=False)
19
  def generar_musica(descripcion, melodia_audio, duracion):
 
20
  torch.cuda.empty_cache()
21
  torch.cuda.synchronize()
22
 
23
  with autocast():
24
  logging.info("Iniciando la generación de música.")
25
  model.set_generation_params(duration=duracion)
26
+
27
  if descripcion:
28
  descripcion = [descripcion]
29
  if melodia_audio:
 
37
  else:
38
  logging.info("Generando música de manera incondicional.")
39
  wav = model.generate_unconditional(1)
40
+
41
  filename = f'{str(uuid.uuid4())}.wav'
42
  logging.info(f"Guardando la música generada con el nombre: {filename}")
43
  path = audio_write(filename, wav[0].cpu().to(torch.float32), model.sample_rate, strategy="loudness", loudness_compressor=True)
 
 
44
  logging.info(f"La forma del tensor de audio generado: {wav[0].shape}")
45
  logging.info("Música generada y guardada con éxito.")
46
  if not os.path.exists(path):
47
  raise ValueError(f'No se pudo guardar el audio en {path}')
48
 
49
  return path
50
+
 
51
  descripcion = gr.Textbox(label="Descripción", placeholder="acústico, guitarra, melodía, trap, re menor, 90 bpm")
52
  melodia_audio = gr.Audio(label="Melodía de audio (opcional)", type="filepath")
53
+ duracion = gr.Slider(label="Duración (segundos)", minimum=10, maximum=600, step=10, value=30)
54
  output_path = gr.Audio(label="Música generada", type="filepath")
55
 
 
56
  gr.Interface(
57
  fn=generar_musica,
58
  inputs=[descripcion, melodia_audio, duracion],
59
  outputs=output_path,
60
  title="Generador de Música",
61
  description="Genera música utilizando el modelo MusicGen.",
62
+ ).queue(concurrency_count=10).launch(server_port=7860, server_name="0.0.0.0")