DJ analyzer benchmark — September 2026
Six operator-selected recordings were imported and analyzed locally. No LLM was called and no example timestamps were injected. These are diagnostic results, not accuracy scores: there are no time-aligned listening annotations yet. The original folder remains unchanged and the main source queue stays paused.
| Recording | Duration | BPM estimate | Mean raw vocal score | Maximum 5-second vocal score |
|---|---|---|---|---|
| Dua Lipa — Don’t Start Now (VDJ JD edit) | 3:45 | 64.01 | 0.0087 | 0.0279 |
| Eric Prydz — Opus | 9:03 | 126.29 | 0.0007 | 0.0067 |
| deadmau5 — Strobe | 10:34 | 130.45 | 0.0013 | 0.0127 |
| Daft Punk — Aerodynamic | 3:32 | 70.17 | 0.0026 | 0.0270 |
| M.A.N.D.Y./Booka Shade — Body Language | 5:00 | 64.07 | 0.0052 | 0.2184 |
| Bicep — Glue | 4:29 | 86.89 | 0.0016 | 0.0203 |
Findings
The generic YAMNet classifier does not pass the vocal-detection quality gate. The known vocal reference, Don’t Start Now, has extremely low scores. Scores below 0.5 are not proof of vocal absence; the table must not be read as a calibrated vocal ratio. Glue remains an intentionally ambiguous texture/sampling case.
A separate 60–65-second Dua Lipa excerpt was checked using the original TensorFlow model and independent librosa resampling. PCM RMS was about −14.76 dBFS, and TensorFlow/ONNX score difference was below 0.000001. The low score also occurs in the reference model; ONNX conversion parity does not establish musical accuracy.
The onset estimator retains half/double-time alternatives. For the Dua Lipa edit labelled 128 BPM it chose 64.01 BPM, while retaining approximately 128.02 BPM as an alternative. Do not replace reviewed grids with these estimates automatically. A single global estimate also cannot represent an accelerating introduction correctly.
The current 5-second, 3 dB energy-change rule does not recover Opus’s build/drop structure. It selected changes at 8:40, 8:45, 8:50, 8:55 and 9:00, primarily the ending fade. This establishes a need for multifeature, multi-timescale structure analysis and annotated boundaries. The local Opus version is 9:03 and Strobe is 10:34; the operator’s shorter illustrative Opus timeline was not treated as ground truth.
Reproducibility and acceptance
All six reports are immutable MongoDB documents; the local combined summary is aidj-platform/data/benchmark-20260912.json. It records each analysis ID, model/code provenance, global features and candidate changes. Repeating the same analysis reuses its cache. The source manifest in tools/audio-analysis/benchmark-set.json records benchmark intent and version caveats. Audio and model weights are excluded from Git.
The next acceptance work is segment-level vocal annotation, a music-specific detector comparison, tempo/downbeat validation, and phrase/structure evaluation. Candidate regions remain unapproved and imported tracks remain unreviewed. Full-library processing is intentionally not enabled by this benchmark.
Implementation validation included 61 passing Rust workspace tests, opt-in real MongoDB and ONNX fixture checks, a separate scan/queue/deduplication/retry integration test, clean Clippy, UI/docs production builds, and browser checks for search, metrics, audio preview and mobile layout. These checks establish software behavior, not DJ performance quality. The container recipe includes the worker, but this iteration did not deploy or run it on the booth VM.