0548e9a82b
Per plan Task 2. Adds <audio id=aud-b>; blendAudio(lo,frac) mixes the two adjacent scale soundtracks by knob fraction (element reuse across crossings so only the genuinely-new scale reloads); restAudio settles a single scale at rest. Diagnostic readout now reports whichever element is audible. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Simulator unit tests
Pure-logic JS unit tests (no browser), run with Node's built-in test runner:
node --test simulator/unit/*.test.js
scrub.test.js covers simulator/static/scrub.js — the pure altitude-scrub math
(position→segment, frac→currentTime, audio gains, integer-crossing detection).