scripts/xa-audioio.js — synthesize → analyze → play (chirp proof)

tone(440) at sr=8000 for 0.5 s must contain exactly 2·440·0.5 = 440 zero crossings. The 200→2000 Hz chirp() below, split into quarters, must show a strictly increasing zero-crossing count (frequency-ramp proof). muExpand(muCompress(x)) must round-trip to maxErr < 1e-6. The Play button routes the chirp through the module's own load()/play() Web Audio path — the half Node can't prove (numeric halves node-verified 2026-07-02: ZC=440, mu err 1.2e-7).