diff --git a/sound_algo/data_only/engine.scd b/sound_algo/data_only/engine.scd index 6d0d682..41480ff 100644 --- a/sound_algo/data_only/engine.scd +++ b/sound_algo/data_only/engine.scd @@ -21,6 +21,7 @@ // -- Reset Synths d'une eventuelle relance ------------------------- ~doRev !? { ~doRev.free }; +~doFilter !? { ~doFilter.free }; ~doMaster !? { ~doMaster.free }; ~doMasterGroup !? { ~doMasterGroup.free }; @@ -37,6 +38,19 @@ s.waitForBoot { Out.ar(out, dry + (wet * mix)); }).add; + SynthDef(\do_master_filter, { |out=0, cutoff=20000, width=1.0, drive=1.0| + var sig, mid, side; // all vars first (sclang rule) + sig = In.ar(out, 2); + sig = RLPF.ar(sig, cutoff.clip(80, 20000).lag(0.08), 0.7); + sig = (sig * drive.clip(1, 4).lag(0.05)).tanh; + // stereo width via mid/side + mid = (sig[0] + sig[1]) * 0.5; + side = (sig[0] - sig[1]) * 0.5 * width.clip(0, 1).lag(0.08); + sig = [mid + side, mid - side]; + sig = LeakDC.ar(sig); + ReplaceOut.ar(out, sig); + }).add; + SynthDef(\do_master, { |out=0, gain=1.0, ceil=0.95| var sig = In.ar(out, 2); // Compression douce sur le bus master @@ -55,6 +69,7 @@ s.waitForBoot { // -- Lance le rack FX -- ~doRev = Synth.tail(~doMasterGroup, \do_reverb, [\in, ~doReverbBus, \out, 0, \mix, 0.4]); + ~doFilter = Synth.tail(~doMasterGroup, \do_master_filter, [\out, 0]); ~doMaster = Synth.tail(~doMasterGroup, \do_master, [\out, 0, \gain, 1.0]);