«Real-time pattern morphing with Ndef» by grirgz
on 09 Oct'13 18:17 inWhen you understand that Ndef can be used to modulate pattern keys, it opens a whole new world
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
(
~name = "saw";
SynthDef(~name, { arg out=0, amp=0.1, gate=1, pan=0, spread=0.8, freq=200, doneAction=2, ffreq=300, rq=0.3;
var sig;
sig = LFSaw.ar(freq);
sig = RLPF.ar(sig, ffreq, rq);
sig = sig * EnvGen.ar(\adsr.kr(Env.adsr(0.01,0.1,0.8,0.1)),gate,doneAction:doneAction);
sig = Splay.ar(sig, spread, amp, pan);
Out.ar(out, sig);
}).add;
~morph = { arg mainkey, lagtime, pat;
var base = pat.asStream.next(());
var bind = List.new;
var proxy;
base.keysValuesDo { arg key, val;
var ndefkey = "%.%".format(mainkey, key).asSymbol;
Ndef(ndefkey, {
Line.kr(Ndef(ndefkey).kr, val, lagtime)
});
proxy = Ndef(ndefkey);
bind.add(key);
bind.add(proxy.bus.asMap);
};
Pbind(*bind)
};
)
Pdef(~name).play;
(
// preset 1
~a = Pdef(~name, ~morph.(\bla, 2.1, Pbind(
\freq, 100,
\ffreq, 1300,
)) <> Pbind(
\instrument, ~name,
\dur, 1,
));
);
(
// preset 2
~a = Pdef(~name, ~morph.(\bla, 1, Pbind(
\freq, 1500,
\ffreq, 200,
)) <> Pbind(
\instrument, ~name,
\dur, 1,
));
);
reception
comments