Detectar dinámicamente carpeta de stems de Demucs 6stems
Browse files- 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 |
-
|
| 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 |
-
#
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
|
| 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):
|