thruster: lower hull-mode Q and soft-limit the rattle so high rpm is louder than low rpm

Hull modes Q 40/35/30/25 -> 20/18/16/14; tanh on the rattle alone; drive floor 0.1 -> 0.35.
Linux render, 48 kHz, 512-frame blocks: rpm 4800 steady RMS 0.1252 > rpm 600 0.0850; peaks 0.216/0.354/0.325.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Aqua 2026-10-31 20:48:55 +00:00
commit 882b7203f5

View file

@ -19,10 +19,10 @@ rumble = (os.sawtooth(f0) + 0.7 * os.square(f0 * 0.5)) : fi.lowpass(3, 60 + 2.5
chop = 0.5 + 0.5 * os.osc(f0 * 3) ^ 2;
rasp = no.noise : fi.resonbp(700 + rpm * 0.6, 1.5, 1) : *(chop);
// brittle hull: high-Q modes rattled by noise, louder with load
// brittle hull: high-Q modes rattled by noise, louder with load; tanh on the rattle alone keeps ring-up spikes from setting the peak
mode(f, q) = no.noise : fi.resonbp(f, q, 1);
rattle = (mode(173, 40) * (0.3 + 0.7 * load) + 0.8 * mode(311, 35) + 0.6 * mode(467, 30) + 0.4 * mode(1130, 25)) * (0.1 + 0.9 * load ^ 2) * 3;
rattle = (mode(173, 20) * (0.3 + 0.7 * load) + 0.8 * mode(311, 18) + 0.6 * mode(467, 16) + 0.4 * mode(1130, 14)) * (0.1 + 0.9 * load ^ 2) * 3 : *(4) : ma.tanh : /(4);
mix = rumble * (0.5 + 0.5 * load) + rasp * (0.3 + 1.5 * load) + rattle;
// drive falls with load so the tanh stage stays out of saturation at high rpm; rasp and hull modes carry the strain
process = mix * (0.4 + 0.6 * load) * max(0.1, 0.9 - 1.0 * load) : ma.tanh : *(0.5);
// drive falls only gently with load so tanh stays out of saturation while high rpm still ends up louder than low rpm
process = mix * (0.4 + 0.6 * load) * max(0.35, 0.9 - 1.0 * load) : ma.tanh : *(0.5);