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.
202 lines
5.2 KiB
Plaintext
202 lines
5.2 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");
|
|
|
|
|
|
|
|
(
|
|
// PV_BrickWall (CC 0-3)
|
|
SynthDef(\pv_brickwall, { |amp = 0.5, mod1 = 10, mod2 = 0.1, mod3 = 0|
|
|
var sig = PlayBuf.ar(1, b, BufRateScale.kr(b), loop: 1);
|
|
var chain = FFT(LocalBuf(2048), sig);
|
|
chain = PV_BrickWall(chain, SinOsc.ar(mod1) + SinOsc.kr(mod2));
|
|
sig = IFFT(chain.dup);
|
|
sig = Splay.ar(sig, mod3);
|
|
sig = CombL.ar(sig, mod3, mod3, mod3);
|
|
Out.ar(0, sig * amp);
|
|
}).add;
|
|
)
|
|
|
|
(
|
|
// PV_RectComb (CC 20-23)
|
|
SynthDef(\pv_rectcomb, { |amp = 0.5, mod1 = 0, mod2 = 0, mod3 = 0.2|
|
|
var sig = PlayBuf.ar(1, b, BufRateScale.kr(b), loop: 1);
|
|
var chain = FFT(LocalBuf(2048), sig);
|
|
chain = PV_RectComb(chain, mod1, mod2, mod3);
|
|
Out.ar(0, IFFT(chain).dup * amp);
|
|
}).add;
|
|
)
|
|
|
|
(
|
|
// PV_MagSmear (CC 16-19)
|
|
SynthDef(\pv_magsmear, { |amp = 0.5, mod1 = 0|
|
|
var sig = PlayBuf.ar(1, b, BufRateScale.kr(b), loop: 1);
|
|
var chain = FFT(LocalBuf(1024), sig);
|
|
chain = PV_MagSmear(chain, mod1);
|
|
Out.ar(0, IFFT(chain).dup * amp);
|
|
}).add;
|
|
)
|
|
|
|
(
|
|
// PV_Freeze (CC 4-7)
|
|
SynthDef(\pv_freeze, { |amp = 0.5, mod1 = 10|
|
|
var sig = PlayBuf.ar(1, b, BufRateScale.kr(b), loop: 1);
|
|
var chain = FFT(LocalBuf(1024), sig);
|
|
chain = PV_Freeze(chain, SinOsc.kr(mod1) > 0.5);
|
|
Out.ar(0, IFFT(chain).dup * amp);
|
|
}).add;
|
|
)
|
|
|
|
(
|
|
// PV_MagGate (CC 8-11)
|
|
SynthDef(\pv_maggate, { |amp = 0.5, mod1 = 50, mod2 = 0.5, mod3 = 0|
|
|
var sig = PlayBuf.ar(1, b, BufRateScale.kr(b), loop: 1);
|
|
var chain = FFT(LocalBuf(1024), sig);
|
|
chain = PV_MagGate(chain, mod1, mod2);
|
|
chain = PV_MagShift(chain, 1, mod3);
|
|
Out.ar(0, IFFT(chain).dup * amp);
|
|
}).add;
|
|
)
|
|
|
|
(
|
|
// PV_MagShift (CC 12-15)
|
|
SynthDef(\pv_magshift, { |amp = 0.5, mod1 = 0|
|
|
var sig = PlayBuf.ar(1, b, BufRateScale.kr(b), loop: 1);
|
|
var chain = FFT(LocalBuf(1024), sig);
|
|
Out.ar(0, IFFT(chain).dup * amp);
|
|
}).play;
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(
|
|
~midiControlMap_BrickWall = (
|
|
00: \amp,
|
|
01: \mod1,
|
|
02: \mod2,
|
|
03: \mod3
|
|
);
|
|
~midiControlMap_RectComb = (
|
|
04: \amp,
|
|
05: \mod1,
|
|
06: \mod2,
|
|
07: \mod3
|
|
);
|
|
~midiControlMap_MagSmear = (
|
|
08: \amp,
|
|
09: \mod1,
|
|
);
|
|
~midiControlMap_Freeze = (
|
|
10: \amp,
|
|
11: \mod1
|
|
);
|
|
~midiControlMap_MagGate = (
|
|
12: \amp,
|
|
13: \mod1,
|
|
14: \mod2,
|
|
15: \mod3
|
|
);
|
|
|
|
// Your pv_brickwall synth
|
|
(
|
|
~synth_BrickWall = Synth(\pv_brickwall, [\bufnum, b]);
|
|
~synth_MagSmear = Synth(\pv_magsmear, [\bufnum, b]);
|
|
~synth_RectComb = Synth(\pv_rectcomb, [\bufnum, b]);
|
|
~synth_MagGate = Synth(\pv_maggate, [\bufnum, b]);
|
|
)
|
|
|
|
|
|
/*s.bind {
|
|
~synth_BrickWall = Synth(\pv_brickwall, [\bufnum, b]);
|
|
~synth_MagSmear = Synth(\pv_pv_magsmear, [\bufnum, b]); // Check name
|
|
~synth_RectComb = Synth(\pv_rectcomb, [\bufnum, b]); // Make sure this SynthDef exists
|
|
};*/
|
|
|
|
|
|
|
|
(
|
|
// Connect MIDI CCs for pv_brickwall
|
|
~midiControlMap_BrickWall.keysValuesDo { |cc, param|
|
|
MIDIFunc.cc({ |val, num, chan, src|
|
|
if (chan == 2) { // MIDI channel 2
|
|
var mappedVal;
|
|
mappedVal = case
|
|
{ param == \amp } { val.linlin(0, 127, 0.0, 1.0) }
|
|
{ param == \mod1 } { val.linlin(0, 127, 1.0, 20.0) }
|
|
{ param == \mod2 } { val.linlin(0, 127, 1.0, 20.0) }
|
|
{ param == \mod3} { val.linlin(0, 127, 0.0, 1.0) }
|
|
{ val / 127 }; // default fallback
|
|
~synth_BrickWall.set(param, mappedVal);
|
|
("CC" ++ cc ++ " (" ++ param ++ ") → " ++ mappedVal).postln;
|
|
}
|
|
}, cc);
|
|
};
|
|
|
|
|
|
// Connect MIDI CCs for pv_brickwall
|
|
~midiControlMap_RectComb.keysValuesDo { |cc, param|
|
|
MIDIFunc.cc({ |val, num, chan, src|
|
|
if (chan == 2) { // MIDI channel 2
|
|
var mappedVal;
|
|
mappedVal = case
|
|
{ param == \amp } { val.linlin(0, 127, 0.0, 1.0) }
|
|
{ param == \mod1 } { val.linlin(0, 127, 1.0, 20.0) }
|
|
{ param == \mod2 } { val.linlin(0, 127, 1.0, 20.0) }
|
|
{ param == \mod3} { val.linlin(0, 127, 0.0, 1.0) }
|
|
{ val / 127 }; // default fallback
|
|
~synth_RectComb.set(param, mappedVal);
|
|
("CC" ++ cc ++ " (" ++ param ++ ") → " ++ mappedVal).postln;
|
|
}
|
|
}, cc);
|
|
};
|
|
|
|
// Connect MIDI CCs for pv_pv_magsmear
|
|
~midiControlMap_MagSmear.keysValuesDo { |cc, param|
|
|
MIDIFunc.cc({ |val, num, chan, src|
|
|
if (chan == 2) { // MIDI channel 2
|
|
var mappedVal;
|
|
mappedVal = case
|
|
{ param == \amp } { val.linlin(0, 127, 0.0, 1.0) }
|
|
{ param == \mod1 } { val.linlin(0, 127, 0.0, 40.0) }
|
|
{ val / 127 }; // default fallback
|
|
~synth_MagSmear.set(param, mappedVal);
|
|
("CC" ++ cc ++ " (" ++ param ++ ") → " ++ mappedVal).postln;
|
|
}
|
|
}, cc);
|
|
};
|
|
|
|
|
|
~midiControlMap_MagGate.keysValuesDo { |cc, param|
|
|
MIDIFunc.cc({ |val, num, chan, src|
|
|
if (chan == 2) { // MIDI channel 2
|
|
var mappedVal;
|
|
mappedVal = case
|
|
{ param == \amp } { val.linlin(0, 127, 0.0, 1.0) }
|
|
{ param == \mod1 } { val.linlin(0, 127, 0.0, 40.0) }
|
|
{ val / 127 }; // default fallback
|
|
~synth_MagGate.set(param, mappedVal);
|
|
("CC" ++ cc ++ " (" ++ param ++ ") → " ++ mappedVal).postln;
|
|
}
|
|
}, cc);
|
|
};
|
|
)
|
|
|
|
|
|
MIDIClient.init;
|
|
MIDIIn.connectAll;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|