«wobble bass» by grirgz
on 11 Nov'13 04:48 in1 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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
(
SynthDef(\wobble, { arg out=0, amp=0.1, gate=1, pan=0, spread=0.8, freq=200, doneAction=2;
var sig, sig1, sig2, sig3;
sig1 = LFSaw.ar(freq * 1 + (0.04 * [1,-1]));
sig2 = LFSaw.ar(freq * 0.99 );
sig3 = LFSaw.ar(freq * 1 );
sig = sig1 + sig2 + sig3;
sig = (sig*50).tanh;
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;
~bus = Bus.audio(s,2);
Pdef(\wobble).quant=4;
Ndef(\lfo1).quant=4;
Ndef(\fx).quant=4;
);
(
Pdef(\wobble).play;
Ndef(\fx).play;
Pdef(\wobble, Pbind(
\instrument, \wobble,
\out, ~bus,
\freq, Pseq([50,60,40],inf) + [0,1],
\legato, 1,
\dur, Pseq([1/4,1/8,1/8]*8,inf);
));
Ndef(\fx, { arg ffreq=300, rq=0.3, choose=0, freqshift=40, time=2, minrate=0.7, curve=(-1);
var in = In.ar(~bus, 2);
var sig;
var sig1,sig2,sig3,sig4,sig5;
var buf = LocalBuf(2*s.sampleRate, 2);
var rate;
var choosetrig;
sig = in;
sig1 = RLPF.ar(sig, ffreq, rq);
choosetrig = choose > 0;
RecordBuf.ar(sig1, buf, loop:1, trigger:choosetrig);
rate = EnvGen.kr(Env([1,1,minrate],[0,time], curve), choosetrig);
sig2 = PlayBuf.ar(2, buf, rate, choosetrig, loop:1);
sig = Select.ar(choose, [sig1, sig2]);
sig;
});
Ndef(\fx).put(1, \set -> Pbind(
\choose, Pseq([
0,0,0,0,
0,0,0,1,
],inf).stutter(4),
\time, 2,
\dur, 1/2,
));
Ndef(\fx).map(\ffreq, Ndef(\lfo1));
Ndef(\lfo1, { arg freq=4, base=2100, choose=0, loval=5, hival=1000, time=1;
Select.kr(choose, [
SinOsc.kr(freq).range(5,base),
Sweep.kr(Impulse.kr(1/time), 1/time) * base + 50,
])
});
Ndef(\lfo1).put(1, \set -> Pbind(
\freq, Pseq([
4,4,4,8,
0,0,0,0,
8,8,4,4,
0,0,0,0,
4,6,4,8,
0,0,0,0,
8,8,4,4,
0,0,0,0,
],inf),
\choose, Pseq([
0,0,0,0,
1,1,1,1,
0,0,0,0,
1,1,1,1,
],inf),
\base, Pseq([1000,1500,5000,2000],inf).stutter(4) + Pseq([0,-500,0,500],inf),
\time, Pseq([1,1,1,2],inf).stutter(4),
\dur, 1/2,
));
);
reception
Nice, thank you!