sfxr explosion + abstract golf: patch repeat no longer cuts the envelope; waivers removed #36

Merged
aqua merged 2 commits from aqua/sfxr-explosion-golf into main 2026-11-11 07:30:59 +00:00
10 changed files with 12 additions and 45 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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()

View file

@ -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

View file

@ -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 |

View file

@ -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": {

View file

@ -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": []
}

View file

@ -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);

View file

@ -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));