Classic tape-machine loop moves — half-speed, double-speed, reverse, close
the gap — done as pure math on audio buffers you can immediately hear. The
waveforms below are drawn at a FIXED samples-per-pixel scale, so the
half-speed-stretched loop region (tinted) is visibly twice as wide as the
original's, and the audition buttons rebuild the ops with
ctx.createBuffer injected as the factory — proving the ops
produce genuine AudioBuffers when a browser caller asks for them. Badges
run the same asserts as examples/node/playback-ops.mjs
(node-verified, 8/8): a 1 s 440 Hz sine with loop {0.25, 0.5} through
halfSpeedLoop / doubleSpeedQuantzLoop /
reverseSection / detectGap /
closeGapLeft, plus the invalid-loop throw.