plot-dynamic-beat — beat tracking through a 90→140 BPM tempo switch

Dynamic beat tracking in the browser. A click track (5 ms decaying 1 kHz bursts, sr=22050) plays 90 BPM for 4 s, then 140 BPM for 4 s. Two trackers run on it. The static tracker takes one scalar tempo() for the whole clip, so its beats keep a single spacing and over-detect in the slow half. The dynamic tracker takes the per-frame tempo(aggregate:null) curve, feeds it to beat_track(bpm=array), and its beat spacing bends with the music — the inter-beat interval drops from ~0.667 s to ~0.429 s exactly at the switch. Prior width matters: this narrow 90–140 range needs the default std_bpm=1 (a wider std_bpm=4 suits a 30–240 span; here the wide prior would collapse 140 BPM onto its 70 BPM subharmonic). Same asserts as examples/node/plot-dynamic-beat.mjs.

red ticks (top) = static beats  |  blue ticks (bottom) = dynamic beats  |  grey dashed = tempo switch
blue line = dynamic per-frame tempo  |  red line = static scalar tempo