From 1f1c5728978ac8a319d11e2099183dd2dcf84e98 Mon Sep 17 00:00:00 2001 From: Aqua Date: Wed, 11 Nov 2026 06:29:39 +0000 Subject: [PATCH 1/2] sfxr explosion and abstract golf: stop patch repeat from cutting the envelope; golf gain 0.5 The lowering wraps the whole voice age at the patch repeat interval, so an interval shorter than sustain+decay never reaches the release: explosion (0.175 s vs 0.485 s) rendered 3 s of steady noise, and golf inherited it (last repeat 0.113 s wins) with 7 voices summed to 0.99 peak. Explosion preset and script drop repeat; golf drops both repeats and sets patch gain 0.5. Waivers for aqua-body/sfxr-explosion-static and sfxr-golf-hot removed: the gate passes 81/81 with none. Co-Authored-By: Claude Sonnet 5.5 --- .../classic/classic-sfxr-abstract-golf.aqua | 3 +- patches/sfxr/explosion.aqua | 1 - src/AquaSynth.Core/BuiltInScripts.cs | 4 +-- src/AquaSynth.Core/SfxrParams.cs | 3 +- tools/aqua-feel/SHELF.md | 4 +-- tools/aqua-feel/shelf.json | 4 +-- tools/aqua-feel/thresholds.json | 29 +------------------ ...fxr-classic-classic-sfxr-abstract-golf.dsp | 4 +-- .../lowered/sfxr-explosion.dsp | 2 +- 9 files changed, 11 insertions(+), 43 deletions(-) diff --git a/patches/sfxr/classic/classic-sfxr-abstract-golf.aqua b/patches/sfxr/classic/classic-sfxr-abstract-golf.aqua index c340ec7..39c7e15 100644 --- a/patches/sfxr/classic/classic-sfxr-abstract-golf.aqua +++ b/patches/sfxr/classic/classic-sfxr-abstract-golf.aqua @@ -31,7 +31,7 @@ voice phaser=0.0001458 phaser_ramp=-0.000504 -patch repeat=0.174744 +patch gain=0.5 voice use=Noise freq=20 @@ -48,7 +48,6 @@ voice tremolo=0.0264 tremolo_hz=13.04 -patch repeat=0.11315 voice wave=sine freq=57.5946 diff --git a/patches/sfxr/explosion.aqua b/patches/sfxr/explosion.aqua index 97dacf6..fcb60c3 100644 --- a/patches/sfxr/explosion.aqua +++ b/patches/sfxr/explosion.aqua @@ -3,7 +3,6 @@ # Source: BuiltInScripts.ReferenceScripts # Notes: Stock reference patch exported from the in-code catalog. -patch repeat=0.174744 voice wave=noise freq=20 diff --git a/src/AquaSynth.Core/BuiltInScripts.cs b/src/AquaSynth.Core/BuiltInScripts.cs index a8f4396..fb339f3 100644 --- a/src/AquaSynth.Core/BuiltInScripts.cs +++ b/src/AquaSynth.Core/BuiltInScripts.cs @@ -89,7 +89,6 @@ public static class BuiltInScripts drive=0.12 """), ("explosion", """ - patch repeat=0.174744 voice wave=noise freq=20 @@ -188,7 +187,7 @@ public static class BuiltInScripts phaser=0.0001458 phaser_ramp=-0.000504 - patch repeat=0.174744 + patch gain=0.5 voice use=Noise freq=20 @@ -205,7 +204,6 @@ public static class BuiltInScripts tremolo=0.0264 tremolo_hz=13.04 - patch repeat=0.11315 voice wave=sine freq=57.5946 diff --git a/src/AquaSynth.Core/SfxrParams.cs b/src/AquaSynth.Core/SfxrParams.cs index 24069aa..1aa08aa 100644 --- a/src/AquaSynth.Core/SfxrParams.cs +++ b/src/AquaSynth.Core/SfxrParams.cs @@ -61,8 +61,7 @@ public sealed record SfxrParams PhaOffset = -0.22f, PhaRamp = -0.1f, VibStrength = 0.22f, - VibSpeed = 0.28f, - RepeatSpeed = 0.42f + VibSpeed = 0.28f }; public static SfxrParams Powerup() => new() diff --git a/tools/aqua-feel/SHELF.md b/tools/aqua-feel/SHELF.md index 3f423bc..1727e78 100644 --- a/tools/aqua-feel/SHELF.md +++ b/tools/aqua-feel/SHELF.md @@ -102,8 +102,8 @@ Sustained patches such as the thruster keep sounding until stopped; the render c | `patch/fm-bell-coin` | start | none | decays | 3 s | unheard | | `patch/fm-bell-gong` | start | none | decays | 3 s | unheard | | `patch/sfxr-blip` | start | none | decays | 3 s | unheard | -| `patch/sfxr-classic-classic-sfxr-abstract-golf` | start | none | sustained | 3 s | unheard | -| `patch/sfxr-explosion` | start | none | sustained | 3 s | unheard | +| `patch/sfxr-classic-classic-sfxr-abstract-golf` | start | none | decays | 3 s | unheard | +| `patch/sfxr-explosion` | start | none | decays | 3 s | unheard | | `patch/sfxr-hit` | start | none | decays | 3 s | unheard | | `patch/sfxr-jump` | start | none | decays | 3 s | unheard | | `patch/sfxr-laser` | start | none | decays | 3 s | unheard | diff --git a/tools/aqua-feel/shelf.json b/tools/aqua-feel/shelf.json index fbbac7e..c6e9e7e 100644 --- a/tools/aqua-feel/shelf.json +++ b/tools/aqua-feel/shelf.json @@ -1415,7 +1415,7 @@ "kind": "start", "detail": "plays from the moment it is started; no gate, trigger or audio-feature input. Sliders, where listed, are live while it plays." }, - "behaviour": "sustained: still sounding at the end of the render window, runs until stopped", + "behaviour": "decays: dies away inside the render window", "duration_s": 3, "duration_note": "the render window, not the effect's length", "render": { @@ -1440,7 +1440,7 @@ "kind": "start", "detail": "plays from the moment it is started; no gate, trigger or audio-feature input. Sliders, where listed, are live while it plays." }, - "behaviour": "sustained: still sounding at the end of the render window, runs until stopped", + "behaviour": "decays: dies away inside the render window", "duration_s": 3, "duration_note": "the render window, not the effect's length", "render": { diff --git a/tools/aqua-feel/thresholds.json b/tools/aqua-feel/thresholds.json index 239e8d7..aa66923 100644 --- a/tools/aqua-feel/thresholds.json +++ b/tools/aqua-feel/thresholds.json @@ -123,32 +123,5 @@ "why": "PRC SYNTH1 peaked at 2.10 before the 2026-11-05 gain trim to 0.67; this holds it under 0.9" } ], - "waivers": [ - { - "id": "sfxr-classic-classic-sfxr-abstract-golf", - "metric": "truePeakDb", - "reason": "renders 0.99 sample peak and +0.9 dBTP inter-sample", - "followUp": "aqua-body:follow_up:sfxr-golf-hot", - "max": 1.0 - }, - { - "id": "sfxr-classic-classic-sfxr-abstract-golf", - "metric": "loudnessLufs", - "reason": "-5.3 LUFS integrated over the 3 s render", - "followUp": "aqua-body:follow_up:sfxr-golf-hot", - "max": -5.0 - }, - { - "id": "sfxr-classic-classic-sfxr-abstract-golf", - "metric": "lowMotion", - "reason": "3 s of steady bright noise, 4 dB level range; may be longer than the render window", - "followUp": "aqua-body:follow_up:sfxr-golf-hot" - }, - { - "id": "sfxr-explosion", - "metric": "lowMotion", - "reason": "3 s of steady noise, 1 dB level range, no decay inside the render window; an explosion that does not decay is worth a listener's check", - "followUp": "aqua-body:follow_up:sfxr-explosion-static" - } - ] + "waivers": [] } diff --git a/tools/aqua-playground/lowered/sfxr-classic-classic-sfxr-abstract-golf.dsp b/tools/aqua-playground/lowered/sfxr-classic-classic-sfxr-abstract-golf.dsp index 5677485..9c5c4e5 100644 --- a/tools/aqua-playground/lowered/sfxr-classic-classic-sfxr-abstract-golf.dsp +++ b/tools/aqua-playground/lowered/sfxr-classic-classic-sfxr-abstract-golf.dsp @@ -3,7 +3,7 @@ declare name "sfxr-classic-classic-sfxr-abstract-golf"; declare options "[nvoices:1]"; time = ba.time / ma.SR; -age = time - floor(time / 0.11315) * 0.11315; +age = time; clip01(x) = min(1.0, max(0.0, x)); wrap01(x) = x - floor(x); slew(rate,x) = x : *(1.0 - exp((0.0 - max(0.0001, rate)) / ma.SR)) : + ~ *(exp((0.0 - max(0.0001, rate)) / ma.SR)); @@ -117,4 +117,4 @@ voice_6_phased = voice_6_filtered; voice_6_formants = voice_6_phased; voice_6 = ((voice_6_phased * (1.0 - clip01(0 + patch_mod_formant_mix + 0.0)) + voice_6_formants * clip01(0 + patch_mod_formant_mix + 0.0)) * oneshot_adsr_at(voice_6_age, 0, 0, 1, 0.01451247, 0.03832199) * max(0.0, 1.0 + patch_mod_gain + 0.0) * 0.22); -process = softclip((voice_0 + voice_1 + voice_2 + voice_3 + voice_4 + voice_5 + voice_6) * 1); +process = softclip((voice_0 + voice_1 + voice_2 + voice_3 + voice_4 + voice_5 + voice_6) * 0.5); diff --git a/tools/aqua-playground/lowered/sfxr-explosion.dsp b/tools/aqua-playground/lowered/sfxr-explosion.dsp index 3df35ab..55c395b 100644 --- a/tools/aqua-playground/lowered/sfxr-explosion.dsp +++ b/tools/aqua-playground/lowered/sfxr-explosion.dsp @@ -3,7 +3,7 @@ declare name "sfxr-explosion"; declare options "[nvoices:1]"; time = ba.time / ma.SR; -age = time - floor(time / 0.174744) * 0.174744; +age = time; clip01(x) = min(1.0, max(0.0, x)); wrap01(x) = x - floor(x); slew(rate,x) = x : *(1.0 - exp((0.0 - max(0.0001, rate)) / ma.SR)) : + ~ *(exp((0.0 - max(0.0001, rate)) / ma.SR)); -- 2.47.3 From b71095ef6518725f7e45a3c5a33e04b76ddc4367 Mon Sep 17 00:00:00 2001 From: Aqua Date: Wed, 11 Nov 2026 07:30:58 +0000 Subject: [PATCH 2/2] aqua-feel README: no waivers remain Co-Authored-By: Claude Sonnet 5.5 --- tools/aqua-feel/README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tools/aqua-feel/README.md b/tools/aqua-feel/README.md index fa0e04a..61790b8 100644 --- a/tools/aqua-feel/README.md +++ b/tools/aqua-feel/README.md @@ -61,8 +61,7 @@ failing rule, and a rule with an `id` that matches no item (a renamed or dropped are deleted when the thing they excuse is fixed and a rename cannot silently disarm a cap. A missing metric fails its rule. The numbers were chosen after looking at the shipped renders. They are tripwires, not taste. -Current waivers: `sfxr-classic-classic-sfxr-abstract-golf` (+0.9 dBTP, -5.3 LUFS, held noise) and `sfxr-explosion` (3 s of -steady noise without decay). Nobody has listened to either to see if the number is the sound. +Current waivers: none. (The golf and explosion waivers were removed when `patch repeat` stopped cutting their envelopes; nobody has listened to either to see if the numbers are the sound.) ## Effects shelf -- 2.47.3