aqua-feel: headless feel meter + gate; fix PRC SYNTH1 clipping and thruster low-rpm hiss #8
Loading…
Reference in a new issue
No description provided.
Delete branch "aqua/aqua-feel"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What
tools/aqua-feel, a headless feel meter.node feel.mjs runrenders 81 items offline (every playground patch, the thruster at rpm 300/600/1200/4800, everyDingCatalogevent on every instrument), measures them, writesreport.json+ a static gallery, and gates againstthresholds.json(exit 1 on failure). Metrics: onset latency, attack (first-peak 10-90%) and slope, crest, sample/true peak and over-1.0 count, BS.1770 integrated loudness, spectral centroid and flux over time, noise-to-tone ratio (flat and A-weighted, tone = temporally smooth spectral lines), low-motion flag (the song-swarm collapse shape).Nothing was heard. Metrics are evidence for a listener to check, not verdicts. The README and the gallery banner say so.
Reuses
tools/aqua-trial/analyze.mjs(mean,spearman,permutationP) andlogic.jsinfeel.mjs correlate, which asks the trial's own question of each metric once listener exports exist. Render path is the playground's faustwasm, not the daemon's native one (README says so).Fixes made with it (numbers in
docs/renders/aqua-feel-2026-11-05.md)prc-synth1-calibrated: sample peak 2.10 -> 0.67, 18,633 overs -> 0, patch gain 1.4 -> 0.45 (pure gain; crest/centroid unchanged). The parity probe inDx7ReferenceParityTestsbuilds its own script at 1.4 and is untouched.thruster.dsplow rpm: A-weighted noise-to-tone 20.7/23.0/20.1 dB -> 13.1/5.0/12.7 at rpm 300/600/1200 (rpm 4800 10.3 -> 9.7). Rattle idle floor 0.1 -> 0.015, rasp floor 0.3 -> 0.05 (same value at full load), rumble low-pass opens at low load. Centroid drops (rpm 300: 2388 -> 752 Hz): darker as well as less noisy; whether that reads as "more tone" or "muffled" is unheard.thruster-trial.dspmirrored so its identity test holds; its sweep is now narrower (README note).Also
AquaLower --dingslowers the four Ding instruments + events (tools/aqua-feel/lowered-dings/).sfxr-classic-classic-sfxr-abstract-golf(+0.9 dBTP, -5.3 LUFS, held noise),sfxr-explosion(3 s without decay).Tests
node tools/aqua-feel/test.mjs: 20 checks on synthetic signals with known answers (BS.1770 level, true peak, clipping, onset/attack, tone-vs-noise incl. a noise-excited resonance, low motion, gate/waiver bookkeeping, WAV header, gallery).node tools/aqua-trial/test.mjs: 15 pass.node tools/aqua-playground/test.mjs: all pass.dotnet test --filter "FullyQualifiedName!~PackageBoundaryTests": 229 pass, 2 skip, 2 fail (Zyn pinned-source and CultMesh leased workers), the known baseline.node tools/aqua-feel/feel.mjs run: gate PASS (81 items, 4 waived, 1 warning).Not done: browser view of the gallery (HTML is static and unviewed), no CI runner exists to call the gate, the native-path render was not diffed against the faustwasm one.
🤖 Generated with Claude Code