//time and tempo
(
~beatsPerMinute=75;
~beatsPerMeasure=4;
~swing=0.05;
~stepDur = (60/1)*(1/~beatsPerMinute)*(1/~beatsPerMeasure); //~stepDur = (sec/step) =(sec/min)*(min/beat)*(beats/step)
~swingA = ~stepDur+(~swing*~stepDur); //strong side of the swing beat
~swingB = ~stepDur-(~swing*~stepDur); //weak side of the swing beat
~groovyKick=(-1)*~stepDur/128;
~groovySnare=~stepDur/128;
~groovyHat=~stepDur/128;
~groovyClap=~stepDur/128;
~groovyBass=0;
~groovyHook=~stepDur/128;
~master = 0.2;
)
//SynthDefs
(
SynthDef(\clap, {
arg outBus=0, amp = 0.5, gain = 1.5;
var env1, env2, sig, noise1, noise2;
env1 = EnvGen.ar(Env.new([0, 1, 0, 1, 0, 1, 0, 1, 0], [0.001, 0.013, 0, 0.01, 0, 0.01, 0, 0.03], [0, -3, 0, -3, 0, -3, 0, -4]));
env2 = EnvGen.ar(Env.new([0, 1, 0], [0.02, 0.3], [0, -4]), doneAction:2);
noise1 = BPF.ar(HPF.ar(GrayNoise.ar(env1), 600), 2000, 3);
noise2 = BPF.ar(HPF.ar(GrayNoise.ar(env2), 1000), 1200, 0.7, 0.7);
sig = noise1 + noise2;
sig = ~master * sig * gain;
sig = sig.softclip * amp;
Out.ar(0, [sig,sig]);
}).play;
)
(
SynthDef(\clap2, {
arg outBus=0, amp = 0.5, gain = 1.5, rel = 1.5;
var env1, env2, sig, noise1, noise2;
env1 = EnvGen.ar(Env.new([0, 1, 0, 1, 0, 1, 0, 1, 0], [0.001, 0.013, 0, 0.01, 0, 0.01, 0, 0.03], [0, -3, 0, -3, 0, -3, 0, -4]));
env2 = EnvGen.ar(Env.new([0, 1, 0], [0.02, rel], [0, -4]), doneAction:2);
noise1 = BPF.ar(HPF.ar(GrayNoise.ar(env1), PinkNoise.kr(300,600)), PinkNoise.kr(1000,2000), 3);
noise2 = BPF.ar(HPF.ar(GrayNoise.ar(env2), PinkNoise.kr(500,1000)), PinkNoise.kr(600,1200), 0.7, 0.7);
sig = noise1 + noise2;
sig = ~master * sig * gain;
sig = LPF.ar(sig, 3000);
sig = sig.softclip * amp * 0.6;
Out.ar(0, [sig,sig]);
}).play;
)
(
SynthDef(\kick,{
arg startFreq=60, endFreq=20, decay=4, lowpass=1000, amp=1, noiseAmp=0.01, gain=1, dur=2;
var sig, env, freq;
startFreq = PinkNoise.kr(10,startFreq);
endFreq = PinkNoise.kr(30,endFreq);
dur = PinkNoise.kr(1,dur);
freq = XLine.kr(startFreq, endFreq, dur, 1, 0);
env = EnvGen.kr(Env.perc(0.0014, dur, 1, -5), 1, doneAction:2);
sig = {(LPF.ar(Ringz.ar(Impulse.ar(0), freq, decay), lowpass) * amp) ! 2};
sig = sig + LPF.ar((noiseAmp*BrownNoise.ar(1)),lowpass);
sig = ~master * sig * gain;
sig = sig.softclip * amp * env;
Out.ar(0, [sig,sig]);
}).play;
)
(
SynthDef(\kick2,{
arg startFreq=40, endFreq=40, decay=3, lowpass=1000, amp=1, noiseAmp=0.05, gain=1, dur=0.6;
var sig, env, freq;
freq = XLine.kr(startFreq, endFreq, dur, 1, 0);
env = EnvGen.kr(Env.perc(0.0014, dur, 1, -5), 1, doneAction:2);
sig = {(LPF.ar(Ringz.ar(Impulse.ar(0), freq, decay), lowpass) * amp) ! 2};
sig = sig + LPF.ar((noiseAmp*BrownNoise.ar(1)),lowpass);
sig = ~master * sig * gain;
sig = sig.softclip * amp * env;
Out.ar(0, [sig,sig]);
}).play;
)
(
SynthDef(\snare,{
arg amp=0.75, freq=120, gain=0.5, dur=0.2;
var env, sig, snare;
env = EnvGen.kr(Env.perc(0.001, dur, 1, -9), 1, doneAction:2);
sig = {(SinOsc.ar(freq) - WhiteNoise.ar(0.5, 0.5))!2};
sig = ~master * sig * gain;
sig = sig.softclip * amp * env;
Out.ar(0, [sig,sig]);
}).play;
)
(
SynthDef(\hat,{
arg amp=2, rel=0.25;
var env, sig;
env = EnvGen.kr(Env.perc(0.001, rel, 1, -4), 1, doneAction:2);
sig = ~master * HPF.ar((PinkNoise.ar(1, 0) * env * amp), 10000);
Out.ar(0, [sig,sig]);
}).play;
)
(
SynthDef.new(\Colleen, {
arg freq=110, atk=1, rel=2, amp=1, dur=2, pan = 0, out = -1;
var sig, env;
freq = freq*(565/250)*PinkNoise.kr(0.05,1)*BrownNoise.kr(0.01,1)*2;
sig = LPF.ar(CombC.ar(Decay.ar(Impulse.ar(0), 0.2,
BrownNoise.ar), 4/(BrownNoise.kr(XLine.kr(10,1,0.2),freq)), 4/(PinkNoise.kr(XLine.kr(10,1,0.2),freq)), 3, 0.4),4000);
env = EnvGen.kr(Env.new([0,1,0],[atk,rel],[1,-1]),doneAction:2);
//sig = sig + PinkNoise.ar(0.1);
sig = LPF.ar(sig, XLine.kr(500,1000,rel*0.1));
sig = ~master * (sig*env*amp)*4;
sig = Pan2.ar(sig,pan);
Out.ar(out, sig);
}).play;
)
(
SynthDef.new(\Colleen2, {
arg freq=110, atk=0.1, rel=2, amp=1, dur=0.4, pan = 0, out = -1;
var sig, env;
freq = freq*(565/250)*PinkNoise.kr(0.01,1);
sig = LPF.ar(CombC.ar(Decay.ar(Impulse.ar(0), 0.2,
BrownNoise.ar), 4/(BrownNoise.kr(XLine.kr(10,1,0.2),freq)), 4/(PinkNoise.kr(XLine.kr(10,1,0.2),freq)), 3, 0.4),4000);
env = EnvGen.kr(Env.new([0,1,0],[atk,rel],[1,-1]),doneAction:2);
//sig = sig + PinkNoise.ar(0.1);
sig = LPF.ar(sig, XLine.kr(50,1000,rel*0.1));
sig = ~master * (sig*env*amp);
sig = Pan2.ar(sig,pan);
Out.ar(out, sig);
}).play;
)
(
SynthDef.new(\Klaus5, {
arg out = 0, freq=440, atk=0.2, rel=2, amp=0.5, dur=0.4, pan=0;
var sig, env;
freq = freq*(565/500)*PinkNoise.kr(0.05,1);
sig = Klank.ar(`[ (1..5)*freq, 1/(1..5), nil ], PinkNoise.ar(1));
env = EnvGen.kr(Env.new([0,1,0],[atk,rel],[1,-1]),doneAction:2);
sig = ~master * (sig*env*amp)*0.005;
sig = Pan2.ar(sig,pan);
Out.ar(out, sig);
}).play;
)
//Pbinds
(
Pdef(\kick,
Pbind(
\instrument, Pwrand([\kick,\kick2],[0.8,0.2],inf),
\lag, ~groovyKick,
\dur, Pseq([~swingA,~swingB],inf),
\amp, 0.6*Pseq([
1,0,1,0, 0,Pshuf([0.2,0,1,],1), 0,Pshuf([0,1,0.3,],1), 0,Pshuf([0,0,0.2,],1),
1,0,1,0.2, 0,Pshuf([0,0.2,1,],1), 0,Pshuf([0,1,0.3,],1), Pshuf([0,0.1,0.8,0,],1),
], inf)*Pwrand([1,0],[0.6,0.4],inf),
)
).play;
Pdef(\snare,
Pbind(
\instrument, Pshuf([\snare],inf),
\lag, ~groovySnare,
\dur, 1*Pseq([~swingA,~swingB],inf),
\amp, 0.5*Pseq([
0,0,0,0, Pshuf([1,0,],1),0,0, 0,0,Prand([0,1],1),0, Prand([1,0,],3),0,
0,0,0,0, Pshuf([1,0,],1),0,0, 0,0,Prand([0,1],1),0, Prand([1,0,],3),0,
], inf)*Pwrand([1,0],[0.5,0.5],inf),
)
).play;
Pdef(\hat,
Pbind(
\instrument, Pshuf([\hat],inf),
\lag, ~groovyHat,
\dur, Pseq([~swingA,~swingB],inf),
\degree, Pseq([0,1],inf),
\amp, 1*Pshuf([
0,1,1,1,
], inf),
)
).play;
Pdef(\clap,
Pbind(
\instrument, Pwrand([\clap,\clap2],[0.7,0.3],inf),
\lag, ~groovyClap,
\dur, Pseq([~swingA,~swingB],inf),
\amp, 0.3*Pseq([
0,0,0,0, Pshuf([1,0,],1),0,0, 0,0,Prand([0,1],1),0, Prand([1,0,],3),0,
0,0,0,0, Pshuf([1,0,],1),0,0, 0,0,Prand([0,1],1),0, Prand([1,0,],3),0,
], inf)*Pwrand([1,0],[0.5,0.5],inf),
)
).play;
Pdef(\high,
Pbind(
\instrument, Prand([\Colleen,\Colleen2,\Klaus5,],inf),
\lag, ~groovyClap,
\dur, Pseq([~swingA,~swingB],inf),
\degree, Pseq([Pseq([0,2,4,6],8),Pseq([-2,0,2,5],4),Pseq([-2,0,3,5],4)],inf),
\octave, Pseq([6,7,],inf)-1,
\amp, 0.2*Pseq([
1,0,1,0, 0,Pshuf([0.2,0,1,],1), 0,Pshuf([0,1,0.3,],1), 0,Pshuf([0,0,0.2,],1),
1,0,1,0.2, 0,Pshuf([0,0.2,1,],1), 0,Pshuf([0,1,0.3,],1), Pshuf([0,0.1,0.8,0,],1),
], inf)*Pwrand([1,0],[0.7,0.3],inf),
\pan, 0,
)
).play;
Pdef(\low,
Pbind(
\instrument, Prand([\Colleen,\Colleen2,\Klaus5,],inf),
\lag, ~groovyClap,
\dur, 2*~stepDur*Pseq([12,2,2,8,6,2],inf),
\degree, Pseq([0,0,0,-2,-2,-4],inf),
\octave, [5,6]-2,
\amp, 1*Pwrand([1,0.2],[0.5,0.5],inf),
\pan, 0,
)
).play;
Pdef(\strum,
Pbind(
\instrument, Prand([\Colleen,\Colleen2,\Klaus5,],inf),
\lag, ~groovyClap,
\dur, 2*~stepDur*Pseq([12,2,2,8,6,2],inf),
\degree, Pseq([0,0,0,-2,-2,-4],inf)+[0,2,4],
\octave, [5,6],
\strum, Prand([0.15,0.1,0.05,0],inf),
\amp, 1*Pwrand([1,0.2],[0.5,0.5],inf),
\pan, 0,
)
).play;
)
//tempo clock
(
v = Main.elapsedTime.ceil;
t = TempoClock(~beatsPerMinute/60, 0, v);
t.schedAbs(0, { //verse
Pbindf(Pdef(\low),\pan, -1, \octave, 3).play(quant: 0.1);
Pbindf(Pdef(\low),\pan, 1, \octave, 3).play(quant: 0.1);
Pbindf(Pdef(\low),\pan, -0.5, \octave, 3).play(quant: 0.1);
Pbindf(Pdef(\low),\pan, 0.5, \octave, 3).play(quant: 0.1);
Pdef(\hat).play(quant: 0.1);
});
t.schedAbs(4*8, { //verse
Pdef(\kick).play(quant: 0.1);
});
t.schedAbs(8*8, { //chorus
Pdef(\clap).play(quant: 0.1);
Pdef(\snare).play(quant: 0.1);
Pbindf(Pdef(\strum),\pan, -1).play(quant: 0.1);
Pbindf(Pdef(\strum),\pan, 1).play(quant: 0.1);
Pbindf(Pdef(\strum),\pan, -0.5).play(quant: 0.1);
Pbindf(Pdef(\strum),\pan, 0.5).play(quant: 0.1);
});
t.schedAbs(12*8, { //verse
Pdef(\hat).stop;
Pdef(\clap).stop;
Pdef(\snare).stop;
Pdef(\kick).stop;
});
t.schedAbs(14*8, { //verse
Pbindf(Pdef(\high),\pan, -1).play(quant: 0.1);
Pbindf(Pdef(\high),\pan, 1).play(quant: 0.1);
Pbindf(Pdef(\high),\pan, -0.5).play(quant: 0.1);
Pbindf(Pdef(\high),\pan, 0.5).play(quant: 0.1);
});
t.schedAbs(16*8, { //verse
Pdef(\kick).play(quant: 0.1);
});
t.schedAbs(18*8, { //chorus
Pdef(\snare).play(quant: 0.1);
Pdef(\clap).play(quant: 0.1);
Pdef(\hat).play(quant: 0.1);
});
t.schedAbs(20*8, { //end
Pdef(\kick).stop;
Pdef(\snare).stop;
Pdef(\clap).stop;
Pdef(\hat).stop;
});
)
//recording
s.record;
s.stopRecording;