Skip to content

Instantly share code, notes, and snippets.

@catfact
Created April 26, 2025 17:53
Show Gist options
  • Save catfact/41d410be573861c6f2c96720727ac239 to your computer and use it in GitHub Desktop.
Save catfact/41d410be573861c6f2c96720727ac239 to your computer and use it in GitHub Desktop.
bmt freezer
~out = 4;
~nfftpoints = 8192;
~nfftbands = (~nfftpoints / 2) + 1;
s = Server.default;
s.waitForBoot {
SynthDef.new(\freeze_smear_magbands_stereo, {
var input = In.ar(\in.kr, 2);
var chain = FFT(LocalBuf(~nfftpoints.dup, 1), input);
var frozen = PV_MagFreeze(chain, \freeze.kr(0));
var smeared = PV_MagSmear(frozen, \smear.kr(0));
var shifted = PV_MagShift(smeared, \stretch.kr(1), \shift.kr(0));
var threshold = \threshold.kr(0.5);
var above = PV_MagAbove(PV_Copy(shifted, LocalBuf(~nfftpoints.dup, 1)), threshold);
var below = PV_MagBelow(PV_Copy(shifted, LocalBuf(~nfftpoints.dup, 1)), threshold);
var output = XFade2.ar(IFFT.ar(below), IFFT.ar(above), \magBalance.kr(0.5));
output = [
Pan2.ar(output[0], \pos_l.kr(-1), \amp_l.kr(0.25)),
Pan2.ar(output[1], \pos_r.kr(1), \amp_r.kr(0.25)),
];
Out.ar(\out.kr(0), output * \amp.kr(1));
}).send(s);
~b_in = Bus.audio(s, 2);
{ ~b_in.scope; }.defer;
~z_in = { Out.ar(~b_in.index, SoundIn.ar([0, 1])) }.play(s);
s.sync;
z = List.new;
z.add(
Synth.new(\freeze_smear_magbands_stereo,
[
\in, ~b_in.index,
\out, ~out,
],
target: ~z_in,
addAction: \addAfter
);
);
z.add(
Synth.new(\freeze_smear_magbands_stereo,
[
\in, ~b_in.index,
\out, ~out,
\pos_l, 1,
\pos_r, -1
],
target: ~z_in,
addAction: \addAfter
);
);
z.add(
Synth.new(\freeze_smear_magbands_stereo,
[
\in, ~b_in.index,
\out, ~out,
],
target: ~z_in,
addAction: \addAfter
);
);
z.add(
Synth.new(\freeze_smear_magbands_stereo,
[
\in, ~b_in.index,
\out, ~out,
\pos_l, 1,
\pos_r, -1
],
target: ~z_in,
addAction: \addAfter
);
);
};
/*
z[0].set(\freeze, 1);
z[0].set(\freeze, 0);
z[1].set(\freeze, 1);
z[1].set(\freeze, 0);
z[1].set(\pos_l, 1);
z[1].set(\pos_r, -1);
*/
MIDIClient.init;
MIDIIn.connectAll;
~cc = MIDIFunc.cc({arg ...args;
// args.postln;
var nn = args[1];
var vv = args[0];
if (nn < 4, {
z[nn].set(\smear, vv.linlin(0, 127, 0, 1).postln);
}, {
if (nn < 8, {
z[nn-4].set(\stretch, if(vv == 64, {0}, {vv.linlin(0, 127, -1, 1)}).postln);
}, {
if (nn < 12, {
z[nn-8].set(\shift, if(vv == 64, {0}, {vv.linlin(0, 127, -1*(~nfftbands/128), ~nfftbands/128).postln}))
}
, {
if (nn < 16, {
z[nn-12].set(\threshold, (vv.linlin(0, 127, -90, 0).dbamp * ~nfftbands / 16).postln)
})
}
)
})
});
});
~noteon = MIDIFunc.noteOn({arg ...args; args.postln;
if (args[1] == 0, { z[0].set(\freeze, 0); });
if (args[1] == 1, { z[1].set(\freeze, 0); });
if (args[1] == 2, { z[2].set(\freeze, 0); });
if (args[1] == 3, { z[3].set(\freeze, 0); });
});
~noteoff = MIDIFunc.noteOff({arg ...args; args.postln;
if (args[1] == 0, { z[0].set(\freeze, 1); });
if (args[1] == 1, { z[1].set(\freeze, 1); });
if (args[1] == 2, { z[2].set(\freeze, 1); });
if (args[1] == 3, { z[3].set(\freeze, 1); });
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment