How accurate is the analyzer? Measured, published
Every key and BPM tool gets asked how accurate it is, and almost every one answers with a marketing number. This page is the other kind of answer: what we measured, on which data, with the method published, the failure modes named, and the numbers the analyzer's own confidence meters are calibrated against.
The eval set
The ground-truth ledger holds 644 entries. 604 are the public GiantSteps key annotations, whose upstream preview audio has been dead since 2026-08-05: they wait in the set as metadata until a re-sourced audio drop, and none of them are counted in any number on this page. The measured set is the other 41: 40 synthetic tracks whose key and tempo are true by construction (we synthesized them, so the ground truth cannot be wrong) plus real music that exposed a live bug, committed as a fixture the day it was found. Hard cases are tagged on purpose: 432 Hz tuning, half-time feels, mid-track tempo changes, tonally weak material.
The numbers (essentia.js@2.1-beta6-dev, recorded 2026-08-05, n=41)
| Metric | Measured | Meaning |
|---|---|---|
| Key, exact match | 35 of 35 | Detected key equals the ground-truth key and mode. |
| BPM, strict | 36 of 37 | Displayed BPM within tolerance of ground truth at the true octave. |
| BPM, answer or shown alternate | 37 of 37 | The truth is always on screen: the answer or its half/double alternate. |
| Tempo changes flagged | 4 of 4 | Every variable-tempo track in the set raised its flag. |
| Off-A440 tuning flagged | 3 of 3 | Every 432 Hz track in the set raised its flag. |
| False tempo flags on steady tracks | 0 of 24 | No steady track was accused of changing tempo. |
| High-confidence key results correct | 35 of 35 | When the meter reads high, the measured bin held 100%. |
| High-confidence BPM results correct | 24 of 24 | Same claim, tempo side. |
| Medium-confidence BPM results correct | 12 of 13 | Measured 92%; the bin's calibration target is 70%. |
| Tonally weak tracks kept out of high confidence | 5 of 5 | Percussive, near-atonal material must not claim certainty. |
What these numbers do not claim
The recorded set is synthetic-dominant, so read every figure above as a ceiling, not a real-world promise. Synthetic tracks have unambiguous tonality and steady production; the wild catalog does not. Across real-world material, chromagram-based key detection — ours and everyone else's — lands on the exact truth roughly three times out of four, which is precisely why every result the analyzer shows carries a confidence rating and the likely alternates instead of a bare answer. The honest product claim is not "we are always right." It is: when the meter reads high, the measured bin behind it held its target, and when the answer is uncertain, the display says so.
The two bugs the eval caught before launch
The strongest argument for measuring is what measuring found. First: an onset-density heuristic meant to catch half-time feels was doubling the reported tempo of merely busy tracks; the eval's strict BPM score sat at 25 of 36 until the heuristic was replaced with a rule the data supported, which took the same fixtures to 35 of 36 (the set has since grown to the 36 of 37 above). Second: when analysis windows disagreed about tempo, their readings were being averaged into a phantom tempo that belonged to no part of the song; disagreement now resolves by majority at the canonical octave, never by averaging. Both fixes are pinned by CI floors: any engine or presentation change that drops key accuracy below 95% or strict BPM below 90% on the committed fixtures fails the build.
A real-world knife edge, committed as a fixture
Days after launch, the same build read the same 92 BPM track as 91.8 on one machine and 183.8 on another. The cause: when analysis windows tied between a tempo and its double, the tie was broken by decoder confidence, which is noise at exactly that moment. Ties now resolve to the canonical octave deterministically, a doubled display requires a window majority, and that track joined the eval set as its first real-music fixture, tagged octave-knife-edge, so the case can never quietly regress.
How the confidence meters are calibrated
The high and medium confidence bins are not vibes: their thresholds are swept against the recorded fixtures and set at the widest coverage whose measured accuracy stays above target (95% for high, 70% for medium), and the measured accuracies ship in the same generated file the analyzer reads, so a displayed bin is a claim the fixtures back. The policy is tighten-only while the recorded set is synthetic-dominant: easy data is never allowed to loosen real-music honesty. Recalibration is a ritual, not an edit: regenerate audio, re-record fixtures through the pinned engine, recalibrate, and let the floor test judge the result.
Run it yourself
The key & BPM analyzer is free and runs in your browser; nothing uploads, so testing it against tracks you know is the fastest audit. When it is wrong, the per-row correction flag feeds the eval set's next round of hard cases. The by-ear method is the second opinion that costs nothing, and the Camelot wheel explains why a relative-key disagreement often does not matter in the mix. Comparing tools? The honest Tunebat comparison applies these same standards to both sides.
Part of Rotation · the daily momentum chart