gelpi01 commited on
Commit
bf44ef0
·
1 Parent(s): 0cd3307

Detectar dinámicamente carpeta de stems de Demucs 6stems

Browse files
Files changed (1) hide show
  1. audio_pipeline.py +11 -16
audio_pipeline.py CHANGED
@@ -86,32 +86,29 @@ def reducir_ruido(input_file, output_file, noise_duration=0.5):
86
  import os
87
  import subprocess
88
  import sys
89
- import warnings
90
  import torch
91
-
92
  import librosa
93
  import numpy as np
94
  import soundfile as sf
95
  import noisereduce as nr
96
 
97
- # Suprime warnings de runtime (p.ej. invalid value encountered in divide)
98
  warnings.filterwarnings("ignore", category=RuntimeWarning)
99
 
100
- # Directorio base donde guardaremos todos los stems
101
  BASE_STEMS_DIR = "data/stems"
102
 
103
  def separar_audio_demucs_6stems(input_file, model="htdemucs_6s"):
104
  """
105
  Separa 6 stems con Demucs (vocals, drums, bass, guitar, piano, other),
106
- los guarda en data/stems/<model>/<track_folder>/ y devuelve la ruta de ese folder.
107
  """
 
108
  out_root = os.path.join(BASE_STEMS_DIR, model)
109
  os.makedirs(out_root, exist_ok=True)
110
 
111
  device = "cuda" if torch.cuda.is_available() else "cpu"
112
  cmd = [
113
- sys.executable,
114
- "-m", "demucs",
115
  "-n", model,
116
  "--out", out_root,
117
  "--device", device,
@@ -119,17 +116,15 @@ def separar_audio_demucs_6stems(input_file, model="htdemucs_6s"):
119
  ]
120
  subprocess.run(cmd, check=True)
121
 
122
- # Demucs crea un subdirectorio con el nombre de la pista dentro de out_root
123
- # Encuentra el primer subdirectorio que contenga archivos .wav
124
- for entry in os.listdir(out_root):
125
- candidate = os.path.join(out_root, entry)
126
- if os.path.isdir(candidate):
127
- # Verifica que tenga stems
128
- wavs = [f for f in os.listdir(candidate) if f.endswith('.wav')]
129
- if wavs:
130
- return candidate
131
  raise FileNotFoundError(f"No se encontró el folder de stems en {out_root}")
132
 
 
133
  def limpiar_stems(stems_dir):
134
  """Aplica reducción de ruido a cada stem (_cleaned.wav)."""
135
  for archivo in os.listdir(stems_dir):
 
86
  import os
87
  import subprocess
88
  import sys
 
89
  import torch
90
+ import warnings
91
  import librosa
92
  import numpy as np
93
  import soundfile as sf
94
  import noisereduce as nr
95
 
 
96
  warnings.filterwarnings("ignore", category=RuntimeWarning)
97
 
 
98
  BASE_STEMS_DIR = "data/stems"
99
 
100
  def separar_audio_demucs_6stems(input_file, model="htdemucs_6s"):
101
  """
102
  Separa 6 stems con Demucs (vocals, drums, bass, guitar, piano, other),
103
+ busca recursivamente la carpeta con .wav y la devuelve.
104
  """
105
+ base = os.path.splitext(os.path.basename(input_file))[0]
106
  out_root = os.path.join(BASE_STEMS_DIR, model)
107
  os.makedirs(out_root, exist_ok=True)
108
 
109
  device = "cuda" if torch.cuda.is_available() else "cpu"
110
  cmd = [
111
+ sys.executable, "-m", "demucs",
 
112
  "-n", model,
113
  "--out", out_root,
114
  "--device", device,
 
116
  ]
117
  subprocess.run(cmd, check=True)
118
 
119
+ # Ahora buscamos recursivamente el primer directorio que contenga .wav
120
+ for root, dirs, files in os.walk(out_root):
121
+ if any(f.endswith(".wav") for f in files):
122
+ return root
123
+
124
+ # Si no aparece ninguno, error
 
 
 
125
  raise FileNotFoundError(f"No se encontró el folder de stems en {out_root}")
126
 
127
+
128
  def limpiar_stems(stems_dir):
129
  """Aplica reducción de ruido a cada stem (_cleaned.wav)."""
130
  for archivo in os.listdir(stems_dir):