Slave Pianos, A Schema and Historo-Materialist Pro-gnostic, Score (Codes)
// -- Monophony -------------------------------------------------------------
s.boot;
MIDIClient.init;
m = MIDIOut(0, MIDIClient.destinations.at(0).uid);
"aconnect 128:1 20:0".systemCmd;
// -- Setup
(
~fftB = Buffer.alloc(s, 2048, 1);
~sfB = Buffer.new(s);
~sfB.allocRead("tyndall/slave-guitars.snd");
~hainsL = 1.1;
~waitT = 0.05;
~quietL = 21;
~durL = 1.5;
~durR = 3.0;
~loudL = 110;
~rpr = {|n, t|
var i = In.kr(n,2);
TRand.ar(i[0], i[1], t);
};
~randC = {
var c = (1..4);
switch (c.choose)
{1} {
s.sendMsg("c_setn", 0, 12,
rrand(0.005, 0.025), rrand(0.05, 0.15),
rrand(0.75, 0.95), rrand(1.05, 1.25),
rrand(0.01, 0.05), rrand(0.05, 0.175),
rrand(0.1, 0.2), rrand(0.2, 0.4),
rrand(0.2, 0.45), rrand(0.55, 0.8),
rrand(-1.0, 0.0), rrand(0.0, 1.0));
}
{2} {
s.sendMsg("c_setn", 0, 12,
rrand(0.01, 0.025), rrand(0.05, 0.25),
rrand(0.75, 0.95), rrand(1.05, 1.25),
rrand(0.001, 0.01), rrand(0.02, 0.04),
rrand(0.1, 0.2), rrand(0.2, 0.4),
rrand(0.0, 0.45), rrand(0.55, 1.0),
rrand(-0.1, 0.0), rrand(0.0, 1.0));
}
{3} {
s.sendMsg("c_setn", 0, 12,
rrand(0.001, 0.015), rrand(0.015, 0.025),
rrand(0.85, 0.95), rrand(1.05, 1.15),
rrand(0.001, 0.01), rrand(0.01, 0.035),
rrand(0.1, 0.2), rrand(0.2, 0.4),
rrand(0.35, 0.45), rrand(0.55, 0.85),
rrand(-1.0, 0.0), rrand(0.0, 0.1));
}
{4} {
s.sendMsg("c_setn", 0, 12,
rrand(0.05, 0.15), rrand(0.15, 0.25),
rrand(0.75, 0.95), rrand(1.05, 1.25),
rrand(0.001, 0.01), rrand(0.02, 0.04),
rrand(0.2, 0.4), rrand(0.4, 0.8),
rrand(0.0, 0.45), rrand(0.55, 0.65),
rrand(-0.5, 0.0), rrand(0.0, 0.5));
}
};
~trRecv = OSCresponderNode(s.addr, '/tr',
{ |time, responder, msg|
var id = msg[2], nt, lvl;
if(id==0,
{
~randC.value;
nt = msg[3].cpsmidi;
lvl = ~loudL;
}, {
nt = msg[3] * 92;
lvl = ~quietL;
});
m.noteOn(0, nt, lvl);
{m.noteOff(0, nt, 0);}.defer(rrand(~durL, ~durR));
}).add;
)
// -- Run
(
~randC.value;
{
var src, dtc, dtcD, ptc, ptcE, d, clk, rat, dur, pos, pan, amp, syn, b;
src = AudioIn.ar(1);
#ptc, ptcE = Pitch.kr(src, ampThreshold: 0.02, median: 7);
b = ~sfB.bufnum;
dtc = PV_HainsworthFoote.ar(FFT(~fftB.bufnum, src), ~hainsL, 0.0, 0.75, ~waitT);
dtcD = TDelay.ar(dtc,4096*SampleDur.ir);
d = Dseq(Dwhite(In.kr(0),In.kr(1),1),9999);
clk = dtc + TDuty.ar(d, 0, WhiteNoise.ar.abs, 0);
rat = ~rpr.value(2, clk);
dur = ~rpr.value(4, clk);
pos = ~rpr.value(8, clk) * BufDur.kr(b);
pan = ~rpr.value(10, clk);
amp = ~rpr.value(6, clk);
SendTrig.ar(dtcD, 0, ptc);
SendTrig.ar(clk, 1, rat);
Out.ar(0, (src * 0.35) + TGrains.ar(2, clk, b, rat, pos, dur, pan, amp, 2));
}.play;
)
// -- Modify
(
~hainsL = 1.1;
~waitT = 0.05;
~durL = 0.05;
~durR = 0.1;
~quietL = 1;
~loudL = 125;
m.allNotesOff(0);
)
// -- Cleanup
(
~trRecv.remove;
)