JamPilot 1.1.1 — a timeline that holds still under fire
A timeline that holds still under fire.
1.1.0 made committed chords immutable. 1.1.1 makes sure they also keep their
distance — and it was validated in the rehearsal room the same day: the
display stays stable through fast changes. Every number below is measured;
the scripts are in the repo (tests/reference/messung_event_abstand.py).
Events keep a minimum spacing
The publish-once channel could commit chords a few hundredths of a second
apart — five chips in one second, cutting each other off into unreadable
fragments. The model never produces segments shorter than 0.25 s; the
density arose afterwards in the live path (boundary refinement with a
0.05 s floor, and the late-boundary correction landing 0.02 s behind an
event that had just been committed).
The EventLedger now guarantees a minimum gap of 0.25 s: within one
hop the later entry wins (the model's more recent judgement), against an
already published event the newcomer moves up to the minimum gap instead
of colliding — and an entry that merely repeats its predecessor (same
chord, same bass) is no event.
Track (reference set, --delay 5) |
Events closer than 0.25 s | Root accuracy vs. ground truth |
|---|---|---|
| Let It Be | 44 of 184 → 0 of 165 | 84.2 % → 83.4 % |
| Something | 44 of 151 → 0 of 139 | 74.8 % → 75.0 % |
The big chord no longer turns grey on every change
The change animation faded the chord name in from 40 % opacity — on black
that read as a grey chord for almost half a second, right when you want to
read it. It also fired whenever anything in the header changed (scale
degree arriving, spelling flipping, bass moving up). Now: a size-only
nudge, and only on an actual change of the chord.
Feature extraction 3× cheaper, bit-identical
librosa rebuilt the CQT filterbank on every call — ~50 ms of fixed cost
per hop. It is now built once per process: feature extraction per hop
70 → 21 ms (48 kHz, 10 s window), output bit-identical, covered by
tests. An incremental CQT (a further 21 → 12 ms) was measured end-to-end
and deliberately left out: identical features, but its hop-stable frame
grid yields ~7 % more committed events — the wandering grid of the full
recomputation acts as a dither the debounce relies on.
Also
- README brought in line with the product: rehearsal rooms are a core use
case (everyone hears JamPilot's output, the delay is invisible), fretboard
and keyboard diagrams exist, the key pin and the inverted scale-degree
view are documented, all screenshots are current.
Binaries: Linux x86_64, macOS Apple Silicon and Windows x86_64 below.
Intel Mac: ./run.sh from a fresh clone is the whole setup.
Warning
The binaries of this release were broken and have been removed. Download
1.2.0 instead.