perf(audio): the rig was reading samples off disk while playing
Went looking for latency to shave in the PipeWire quantum. The quantum was not the problem. preload.scd did not exist on this box. start_and_midi.scd:259 tests for it with File.exists and silently takes the other branch -- 'no preload.scd, lazy-loading samples on demand.' Driving rose_rouge headlessly for three minutes logged 46 'reading soundfile as needed' lines, one every 5-12s, each a disk read landing on the audio thread; the SuperCollider node's pw-top W/Q hit 1.300 at the stock 1024 and 1.390 at 512, i.e. missing its deadline regardless of buffer size. check-preload.sh named it exactly: '60 bank(s) would be read from DISK on first play (crackle, mid-transition)' -- the same sentence its own header attributes to a crackle that debuted at a venue. Generated with check-preload.sh --fix (60 banks, 16 tracks) and verified at the next boot: 'PRELOAD: 60/61 banks OK in 2.6 s'. The mechanism was never broken; gig-up.sh already regenerates the plan and the checker already exits non-zero. gig-up.sh had simply never been run on this box. Re-running the identical load after the fix left 29 lazy reads, ALL of them the rose bank -- because rose_rouge is not in setlist_opal2026.txt. Zero of the 60 preloaded banks lazy-loaded, so the plan works; it warms the OPAL set while the track this box actually plays sits outside it. Logged, with two more findings from the same boot: preload's own COUNT MISMATCH banner firing on a sixty-second-old plan, and three global mi-UGens FX synthdefs failing to load at every boot while rig-doctor's mi-ugens check stays green. Adds tools/latency-lens.py, which implements the documented quantum method (lowest quantum holding zero xrun delta and max W/Q under 0.75) against pw-top, sets clock.force-quantum at runtime and restores it, and never edits a config. It refuses to run unless the default sink is muted and re-checks that every second for the whole run: a valid quantum test needs the real hardware device driving the graph but does not need the speakers.
Showing
tools/latency-lens.py
0 → 100755
Please
register
or
sign in
to comment