El reto no es la UI. Es analizar un set DJ completo (MP3, WAV, FLAC, hasta 2 GB) directamente en el navegador del usuario, sin enviarlo a ningún servidor, y sin bloquear la interfaz mientras se procesa.
El pipeline corre dentro de un Web Worker: se decodifica el audio con AudioContext, se mezcla a mono, y se ejecutan en paralelo varios análisis. Essentia.js (compilada a WebAssembly) detecta BPM y posiciones de beat con ML multifeature. Un FFT propio descompone el espectro en cuatro bandas. Un detector de onsets calcula la varianza de IOI para identificar trainwrecks (beats desincronizados durante una transición). Un motor de alertas cruza señales para detectar choques de graves, silencios muertos, fatiga auditiva y transiciones bruscas, con timestamps ajustados al beat más cercano.
Con todo eso se calcula una puntuación 0-100 con cuatro sub-métricas ponderadas (técnica, energía, flow, narrativa) y se desbloquean medallas. Y un sistema de detección automática para distinguir un mix real de un single track, para no mostrar puntuaciones a quien sube algo que no es un mix.
