s.boot;
s.record;
s.stopRecording;
//tempo and tuning
(
~beatsPerMinute=115/2;
~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
//lag in seconds. (0) is on top of the beat, (+) is behind, (-) is ahead
~groovyKick=(0)*~stepDur/256;
~groovySnare=(0)*~stepDur/256;
~groovyHat=(1)*~stepDur/1600;
~groovyClap=(0)*~stepDur/256;
~masterGain = 0.2;
~a = Scale.chromatic;
)
//loading buffers
(
~bridgeTooFar = Buffer.readChannel(s,"/Users/conor/Desktop/SuperCollider/yfree buffers/180210 bridge too far (vox).wav",0,-1,1);
)
//testing buffers
~bridgeTooFar.play;
//SynthDefs
(
SynthDef(\bridgeTooFarVox, {
arg out = 0, amp=1;
var sig, env;
b = ~bridgeTooFar;
sig = PlayBuf.ar(1, b, 1, doneAction:2)*amp*2*~masterGain;
Out.ar(out, [sig,sig])
}).play;
)
(
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 = sig * gain * 2;
sig = sig.softclip * amp;
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=0.8;
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 = sig * gain;
sig = sig.softclip * amp * env;
Out.ar(0, [sig,sig]);
}).play;
)
(
SynthDef(\kick2,{
arg startFreq=80, endFreq=15, decay=4, lowpass=800, amp=1, noiseAmp=0.0, gain=1, dur=6;
var sig, env, freq;
freq = Line.kr(PinkNoise.kr(6,startFreq), PinkNoise.kr(3,endFreq), dur, 1, 0);
env = EnvGen.kr(Env.perc(0.014, dur, 1, -5), 1, doneAction:2);
sig = {(LPF.ar(Ringz.ar(Impulse.ar(0), freq, decay), lowpass) * amp) ! 2};
sig = LPF.ar(sig,BrownNoise.kr(500,1500))*0.3;
sig = 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.3;
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 = sig * gain;
sig = sig.softclip * amp * env;
Out.ar(0, [sig,sig]);
}).play;
)
(
SynthDef(\hat,{
arg amp=2, rel=0.24;
var env, sig;
env = EnvGen.kr(Env.perc(0.001, rel, 1, -4), 1, doneAction:2);
sig = HPF.ar((PinkNoise.ar(1, 0) * env * amp), 4000);
Out.ar(0, [sig,sig]);
}).play;
)
(
SynthDef.new(\Colleen, {
arg freq=110, atk=0.6, rel=2, amp=1, dur=2, pan = 0, out = -1;
var sig, env;
freq = freq*(320/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(100,700,rel*0.1));
sig = (sig*env*amp)*3;
sig = Pan2.ar(sig,pan);
Out.ar(out, sig);
}).play;
)
(
SynthDef(\clap, {
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 = sig * gain;
sig = LPF.ar(sig, 3000);
sig = sig.softclip * amp * 0.8;
Out.ar(0, [sig,sig]);
}).play;
)
(
SynthDef.new(\Colleen2, {
arg freq=110, atk=0.6, rel=0.3, amp=1, dur=0.2, pan = 0, out = -1;
var sig, env;
freq = freq*(320/250)*PinkNoise.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(50,1000,rel*0.1));
sig = (sig*env*amp);
sig = Pan2.ar(sig,pan);
Out.ar(out, sig);
}).play;
)
(
SynthDef.new(\Klaus1000, {
arg out = 0, freq=440, atk=0.01, rel=0.5, amp=1, dur=0.2, pan=0;
var sig, env;
freq = freq*(320/500)*PinkNoise.kr(0.00,1);
sig = Klank.ar(`[ (1..100)*freq, 1/(1..100), nil ], PinkNoise.ar(1));
sig = LPF.ar(sig, 20000);
env = EnvGen.kr(Env.new([0,1,0],[atk,rel],[1,-1]),doneAction:2);
sig = (sig*env*amp*~masterGain)*0.05;
sig = Pan2.ar(sig,pan);
Out.ar(out, sig);
}).play;
)
//Pdefs
(
Pdef(\bridgeTooFarVox,
Pbind(
\instrument, \bridgeTooFarVox,
\lag, ~groovyKick+0.15,
\amp, ~masterGain*1.5*Pseq([1],1),
)
).play;
Pdef(\kick,
Pbind(
\instrument, \kick,
\lag, ~groovyKick,
\dur, Pseq([~swingA,~swingB],inf),
\amp, ~masterGain*4*Pseq([
1,0,0,0, 0,0,0,1, 0,0,1,0, 0,0,0,0,
1,0,0,0, 0,0,1,0, 0,0,0,0, 0,Pshuf([0,Prand([1,0],1),1,],1),
], inf)*Pseq([1],inf)*Pwrand([Pseq([1],4),Pseq([0],4),],[0.9,0.1],inf),
\pan, 0,
)
).play;
Pdef(\kick2,
Pbind(
\instrument, \kick2,
\lag, ~groovyKick,
\dur, Pseq([~swingA,~swingB],inf),
\amp, ~masterGain*4*Pseq([
1,0,0,0, 0,0,0,1, 0,0,1,0, 0,0,0,0,
1,0,0,0, 0,0,1,0, 0,0,0,0, 0,Pshuf([0,Prand([1,0],1),1,],1),
], inf)*Pseq([1],inf)*Pwrand([Pseq([1],4),Pseq([0],4),],[0.9,0.1],inf),
\pan, 0,
)
).play;
Pdef(\snare,
Pbind(
\instrument, \snare,
\lag, ~groovySnare,
\dur, Pseq([~swingA,~swingB],inf),
\amp, ~masterGain*2*Pseq([
0,0,0,1, 0,0,0,0, 0,0,0,0, 1,0,0,0,
], inf),
)
).play;
Pdef(\clap,
Pbind(
\instrument, \clap,
\freq, 120,
\lag, ~groovyClap,
\dur, Pseq([~swingA,~swingB],inf),
\amp, ~masterGain*1*Pseq([
0,0,0,1, 0,0,0,0, 0,0,0,0, 1,0,0,0,
], inf),
)
).play;
Pdef(\hat,
Pbind(
\instrument, \hat,
\freq, 120,
\lag, ~groovyHat,
\dur, Pseq([~swingA,~swingB],inf),
\amp, ~masterGain*3*Pseq([
1,1,1,0, 1,1,1,1, 1,1,1,1, 0,1,1,1,
], inf)*Pshuf([0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8],inf),
)
).play;
Pdef(\chord,
Pbind(
\instrument, \Colleen2,
\dur, Pseq([~swingA,~swingB],inf),
\lag, 0,
\scale, ~a,
\octave, [3,4,5,6],
\degree, [5,19]+Pseq([
Pseq([[2,3]],16),
Pseq([[4,5]],16),
Pseq([[5,7]],16),
Pseq([[7,8]],16)
],inf),
\amp, ~masterGain*3.5*Pseq([
1,0,0,0, 0,0,0,1, 0,0,1,0, 0,0,0,0,
1,0,0,0, 0,0,1,0, 0,0,0,0, 0,0,0,0,
1,0,0,0, 0,0,0,1, 0,0,1,0, 0,0,0,0,
1,0,0,0, 0,0,1,0, 0,0,0,0, 0,0,0,0,
], inf),
\pan, 0,
)
).play;
Pdef(\strum,
Pbind(
\instrument, \Klaus1000,
\dur, Pseq([~swingA,~swingB],inf),
\lag, 0,
\scale, ~a,
\octave, [3,4,5],
\degree, [5,19]+Pseq([
Pseq([[2,3]],16),
Pseq([[4,5]],16),
Pseq([[5,7]],16),
Pseq([[7,8]],16)
],inf),
\amp, ~masterGain*3.5*Pseq([
1,0,0,0, 0,0,0,1, 0,0,1,0, 0,0,0,0,
1,0,0,0, 0,0,1,0, 0,0,0,0, 0,0,0,0,
1,0,0,0, 0,0,0,1, 0,0,1,0, 0,0,0,0,
1,0,0,0, 0,0,1,0, 0,0,0,0, 0,0,0,0,
], inf),
\strum, 0.04,
\rel, 1,
\pan, 0,
)
).play;
Pdef(\bass,
Pbind(
\instrument, \Colleen,
\dur, Pseq([~swingA,~swingB],inf),
\lag, 0,
\scale, ~a,
\octave, [3,5],
\degree, [5,19]+Pseq([
Pseq([[2,3]],16),
Pseq([[4,5]],16),
Pseq([[5,7]],16),
Pseq([[7,8]],16)
],inf),
\amp, ~masterGain*1*Pseq([
1,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
], inf),
\pan, 0,
)
).play;
)
//tempo clock
(
v = Main.elapsedTime.ceil;
t = TempoClock(~beatsPerMinute/60, 0, v);
t.schedAbs(0, { //verse
Pbindf(Pdef(\bass),\pan, -1, \octave, 3).play(quant: 0.1);
Pbindf(Pdef(\bass),\pan, 1, \octave, 3).play(quant: 0.1);
Pdef(\bridgeTooFarVox).play(quant: 0.1);
});
t.schedAbs(4*8, { //verse
Pdef(\kick).play(quant: 0.1);
Pdef(\snare).play(quant: 0.1);
});
t.schedAbs(8*8, { //chorus
Pdef(\kick2).play(quant: 0.1);
Pdef(\clap).play(quant: 0.1);
Pdef(\hat).play(quant: 0.1);
Pbindf(Pdef(\chord),\pan, -1).play(quant: 0.1);
Pbindf(Pdef(\chord),\pan, 1).play(quant: 0.1);
});
t.schedAbs(12*8, { //verse
Pdef(\hat).stop;
Pdef(\clap).stop;
Pdef(\snare).stop;
Pdef(\kick2).stop;
});
t.schedAbs(14*8, { //verse
Pdef(\snare).play(quant: 0.1);
});
t.schedAbs(16*8, { //verse
Pdef(\clap).play(quant: 0.1);
});
t.schedAbs(18*8, { //chorus
Pdef(\snare).stop;
Pdef(\clap).stop;
Pdef(\kick2).stop;
Pdef(\kick).stop;
Pbindf(Pdef(\strum),\pan, -1).play(quant: 0.1);
Pbindf(Pdef(\strum),\pan, 1).play(quant: 0.1);
});
t.schedAbs(20*8, { //chorus
Pdef(\kick).play(quant: 0.1);
Pdef(\kick2).play(quant: 0.1);
Pdef(\snare).play(quant: 0.1);
Pdef(\clap).play(quant: 0.1);
Pdef(\hat).play(quant: 0.1);
});
)
/*lyrics
action at distance
strange transmissions
from the stars
i followed the mission
i should have listened
to my heart
try to remember me
the man i used to be
hold my arm
i’ve come unraveled
somehow i traveled
a bridge too far
we tried to build
bridge to far
overshoot the stars
we tried to build
bridge to far
overshoot the stars
just try and remember you weren't always as you are
try to remember being together in my arms
try to remember me the man i used to be at the start
we tried to build
bridge to far
overshoot the stars
we tried to build
bridge to far
overshoot the stars*/