You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
2.9 KiB
Plaintext
137 lines
2.9 KiB
Plaintext
b = Buffer.read(s, "/home/lcoogan/snd/live/2025-04-26.Basic_City_Brewery/trax/01-Cantor_Samual_Malavsky_Shomea_Kol_Bichios.wav");
|
|
b = Buffer.read(s, "/home/lcoogan/snd/live/2025-04-26.Basic_City_Brewery/trax/06-Cantor_Zevulun_Zavel_Kwartin_sings_Tiher.wav");
|
|
|
|
(
|
|
SynthDef(\layer0_struct0, {
|
|
arg bufnum, fftSize = 1024, amp = 2,
|
|
wipeFreq = 0.1, wipeDepth = 0.4,
|
|
trigFreq = 2.0, threshold = 0.3, smoothAmt = 0.2,
|
|
mix = 1.0, crf_1, rs_1, crf_2, rs_2, foldLo = -0.8, foldHi = 0.8,
|
|
combDelay = 0.2, combDecay = 2.0,
|
|
verbMix = 0.5, verbSize = 1.0,
|
|
splayWidth = 1.0;
|
|
|
|
|
|
|
|
|
|
var in, dry, sig, chain;
|
|
var wipe, trig;
|
|
|
|
var ir = Buffer.read(s, "/home/lcoogan/snd/ir/ForestScaleModel/ForestScaleModel/IR_ScaleModel/S1R1_ScaleModel.wav"); // Load an impulse response file
|
|
|
|
|
|
in = PlayBuf.ar(1, bufnum, BufRateScale.kr(bufnum), loop: 1);
|
|
dry = in;
|
|
|
|
// FFT
|
|
chain = FFT(LocalBuf(fftSize), in);
|
|
|
|
// Modulated parameters
|
|
wipe = LFSaw.kr(wipeFreq).range(wipeDepth, 0.9);
|
|
trig = Impulse.kr(trigFreq);
|
|
|
|
// Processing chain
|
|
/*chain = PV_RandComb(chain, wipe, trig);
|
|
chain = PV_MagAbove(chain, threshold);
|
|
chain = PV_MagSmooth(chain, smoothAmt);
|
|
chain = PV_BrickWall(chain);*/
|
|
|
|
|
|
chain = PV_RandComb(chain, wipe, trig);
|
|
chain = PV_BinShift(chain);
|
|
|
|
|
|
sig = IFFT(chain);
|
|
|
|
|
|
// Filtering
|
|
// sig = RLPF.ar(sig, crf, res);
|
|
sig = RHPF.ar(sig, crf_1, rs_1);
|
|
sig = BLowShelf.ar(sig, crf_2, rs_2);
|
|
|
|
sig = GlitchBPF.ar(sig, 440);
|
|
|
|
|
|
// Effects
|
|
// Inside signal chain
|
|
sig = Fold.ar(sig, foldLo, foldHi);
|
|
sig = CombL.ar(sig, combDelay, combDelay, combDecay);
|
|
sig = Splay.ar(sig, spread: splayWidth);
|
|
sig = XFade2.ar(sig, Convolution2.ar(sig, ir, 512), verbMix); // Mix dry and wet
|
|
|
|
|
|
|
|
// Mix dry/wet
|
|
sig = XFade2.ar(dry, sig, mix.linlin(0, 1, -1, 1));
|
|
|
|
Out.ar(0, sig.dup * amp);
|
|
}).add;
|
|
)
|
|
|
|
|
|
(
|
|
~midiControlMap = (
|
|
|
|
// Group 1
|
|
|
|
// Mixing
|
|
00: \amp,
|
|
01: \mix,
|
|
|
|
// Filtering
|
|
04: \crf_1,
|
|
05: \rs_1,
|
|
06: \crf_2,
|
|
07: \rs_2,
|
|
|
|
// Modulation
|
|
08: \wipeFreq,
|
|
09: \wipeDepth,
|
|
10: \trigFreq,
|
|
11: \threshold,
|
|
|
|
// Modulation ext
|
|
12: \smoothAmt,
|
|
|
|
|
|
|
|
// Group 2 — FX Modulation
|
|
|
|
// Fold
|
|
16: \fold, // enable/fade
|
|
17: \foldLo, // lower bound
|
|
18: \foldHi, // upper bound
|
|
// 19:
|
|
|
|
// Comb
|
|
20: \comb, // enable/fade
|
|
21: \combDelay, // delay time
|
|
22: \combDecay, // decay time4
|
|
// 23:
|
|
|
|
// Verb
|
|
24: \verb, // enable/fade
|
|
25: \verbMix, // wet/dry
|
|
26: \verbSize, // scale IR/dry level
|
|
// 27
|
|
|
|
// Splay
|
|
28: \splay, // enable/fade
|
|
29: \splayWidth // stereo spread
|
|
);
|
|
|
|
// Replace this with your actual Synth instance
|
|
~layer0 = Synth(\layer0_struct0, [\bufnum, b]);
|
|
|
|
// Connect MIDI CCs on channel 2
|
|
~midiControlMap.keysValuesDo { |cc, param|
|
|
MIDIFunc.cc({ |val, num, chan, src|
|
|
if (chan == 2) { // Channel 2 (zero-indexed)
|
|
var mappedVal = val.linlin(0, 127, 0.0, 1.0);
|
|
~layer0.set(param, mappedVal);
|
|
("CC" ++ cc ++ " (" ++ param ++ ") → " ++ mappedVal).postln;
|
|
}
|
|
}, cc);
|
|
};
|
|
)
|