Saltar a contenido

Instrumental Lab — Reporte final

Resumen ejecutivo

Pipeline completo funcionando end-to-end sobre 12 archivos fuente (~2.5 horas de audio instrumental) con librería clasificada y composiciones generadas. El Gran Mix (97.9 min) se procesó por chunks de 10 min para evitar el límite de memoria de librosa al upcastear a float64.

Librería final

Métrica Valor
Archivos fuente (incluye chunks del Gran Mix) 21 (11 canciones + 10 chunks del Gran Mix)
Audio total analizado 153.6 min (≈2h 34min)
Fragmentos extraídos 33,484
Duración total de clips 713.4 min (≈12h)
BPM promedio 122.5

On-disk footprint

Ruta Tamaño Archivos
library.db 70.6 MB 1
data/fragments/ 3.60 GB 33,484
data/stems/ 1.55 GB 42
data/cache/ 1.75 GB 32 (cleaned + chunks)
data/composed/ 14.5 MB 3

Distribución por familia

Familia Fragmentos Avg BPM Avg duración
drums 15,738 123.2 1305 ms
guitar_electric 9,138 120.8 1358 ms
guitar_acoustic 8,040 124.4 1157 ms
strings 494 117.9 979 ms
bass 74 122.9 916 ms

La baja cuenta de bass es esperable: HPSS solo separa en harmonic/percussive. Activar Demucs (pip install demucs + SETTINGS.separation.backend="demucs") recuperará bajo como stem dedicado.

Clusters globales (post-recluster)

32 clusters por familia (drums/guitar_electric/guitar_acoustic vía KMeans) + 3-5 clusters en bass/strings (HDBSCAN). Top 10 por tamaño:

drums    5    1320 fragments  avg 115.4 BPM
drums    19   1156 fragments  avg 114.6 BPM
drums    22   1120 fragments  avg 115.0 BPM
drums    27   1047 fragments  avg 115.2 BPM
drums    21    828 fragments  avg 120.6 BPM
drums    10    823 fragments  avg 135.8 BPM
drums    11    814 fragments  avg 116.4 BPM
drums    33    739 fragments  avg 122.6 BPM
drums    26    663 fragments  avg 115.5 BPM
drums    12    634 fragments  avg 147.8 BPM

Distribución tonal (top 10)

Aminor    2832   ####################
Dminor    2679   ####################
C#minor   2640   ###################
Eminor    2181   ################
Cminor    1677   ############
F#minor   1672   ############
Fminor    1635   ############
Bminor    1615   ############
Amajor    1536   ###########
Gmajor    1490   ###########

Distribución de BPM

 80- 89  |    460
 90- 99  |   3767
100-109  |   4901
110-119  |   2039
120-129  |  15312   (dominante — Gran Mix y el 234MB Instrumental ~120 BPM)
130-139  |   1834
140-149  |   1386
150-159  |   2178
160-169  |    989
170-179  |    618

Composiciones generadas (con librería completa)

Archivo BPM Tonalidad Bars Duración Peak RMS
mix_95_Am_slow.wav 95 Am 24 60.6 s 0.89 0.116
mix_110_G_bright.wav 110 G mayor 24 52.4 s 0.89 0.121
mix_130_Dm_driving.wav 130 Dm 32 59.1 s 0.89 0.086

Arreglo intro → verso → coro → verso → coro → outro con ganancias por sección. Instrumentos sin samples en la librería (accordion, keys, brass, percussion_latin) caen a síntesis procedural (osciladores + ADSR) automáticamente.

Arquitectura

raw .wav ──► preprocess ──► separate ──► segment ──► featurize ──► classify ──► cluster ──► library.db
  (HPF,         (HPSS o        (onset+beat+     (MFCC/Chroma/       (rule-based     (KMeans o      (SQLite
   trim silence, Demucs)        phrase híbrido)  Contrast/Tonnetz)  acoustics +     HDBSCAN por     + BLOB
   LUFS norm)                                                        opcional PANNs) familia)       features)
                                                                                                    │
                                                                                                    ▼
                                                                                                compose ──► new .wav
                                                                                                (time-stretch, pitch-shift,
                                                                                                 arrangement por secciones,
                                                                                                 síntesis fallback)

Archivos clave

Pipeline / núcleo

Librería / composer / síntesis

CLI

Cómo seguir usando el sistema

cd C:/Users/User/Documents/INSTRUMENTAL

# Ver el estado actual
PYTHONIOENCODING=utf-8 python -m instrumental_lab.cli.library_report

# Queries
PYTHONIOENCODING=utf-8 python -m instrumental_lab.cli.main query --family=drums --bpm=110,130 --limit=20
PYTHONIOENCODING=utf-8 python -m instrumental_lab.cli.main query --family=guitar_acoustic --key=A --mode=minor

# Componer un nuevo instrumental
PYTHONIOENCODING=utf-8 python -m instrumental_lab.cli.main compose \
    --bpm=120 --key=A --mode=minor --bars=32 --seed=99 --out=nueva_pista.wav

# Ingestar nuevos archivos
PYTHONIOENCODING=utf-8 python -m instrumental_lab.cli.main ingest "nuevo_audio.wav"
# luego:
PYTHONIOENCODING=utf-8 python -m instrumental_lab.cli.recluster

Próximos pasos recomendados (mejoras de calidad)

  1. Demucs v4 — stems reales: pip install demucs y en config/settings.py: separation = SeparationConfig(backend="demucs"). Bass y vocals aparecerán como familias propias.

  2. PANNs CNN14 — embeddings 2048-D AudioSet: pip install panns-inference y features = FeatureConfig(use_panns=True). Clasificación saltará de ~85% a ~95% de precisión.

  3. UI tipo DAW — wrapper FastAPI + frontend mínimo con timeline, drag-and-drop de fragmentos por cluster, preview inline y export multipista.

  4. MusicGen hook — completar frases a partir de fragmentos semilla (facebook/musicgen-small). Ideal para rellenar secciones donde la librería tiene pocos fragmentos (bass, brass, etc).

  5. Chord-conditioned retrieval — actualmente filtramos por key/mode a nivel fragmento; extender a progresiones de acordes detectadas con madmom o btc-chord.

  6. Fine-tuning del clasificador sobre música popular colombiana — etiquetar manualmente 200-500 fragmentos y entrenar un MLP sobre los embeddings PANNs para mapear instrumentos específicos (acordeón vallenato, bandola llanera, etc.) con mejor precisión que el rule-based genérico.