A track that jumps from 100 to 140 BPM should show up as two clean tempo
bands over time — that is exactly what this heatmap draws, with the
detected tempo ridge tracked in white dots. Press play to hear the jump
the analysis is looking at. Technically: 8 s of 100 BPM clicks then 8 s
of 140 BPM clicks (sr 22050, hop 512) go through the canonical
onset_strength → tempogram() (win_length 192 ≈
4.5 s, linear-ramp padding, per-column inf-norm — the exact math the
fixture-gated canonical tempo() consumes). The per-frame
argmax ridge (a log-normal tempo prior, start 120 BPM) must sit in the
lag bin bracketing 100 BPM for t ∈ [1, 6] s and the bin bracketing
140 BPM for t ∈ [10, 15] s; estimate_tempo on each half must
land in the same brackets. Regression badge: plain 120 BPM clicks
estimate inside the 120 BPM lag bracket — the pre-repair raw argmax
returned the 60.09 BPM subharmonic, and fourier_tempogram
collapsed a 690-frame envelope to a single column (now 257 × 691 at
hop=1). All numeric asserts were node-verified against dist before this
page was written (ridge 99.38 / 143.55, estimate_tempo 99.38 / 143.55,
120-click regression 117.45). tempogram_ratio is an honest
not-implemented throw and stays off the curated surface.
computing…