Skip to content

Instantly share code, notes, and snippets.

@karnpapon
Last active May 24, 2022 12:36
Show Gist options
  • Save karnpapon/6f585efdf934569b2a18b73490a36cbe to your computer and use it in GitHub Desktop.
Save karnpapon/6f585efdf934569b2a18b73490a36cbe to your computer and use it in GitHub Desktop.
Cadson Demak - again_again(TBC-interpretation)
/////////////////////////////////////////////////////////////////////////////////////////
************************************** INITIALIZE ***************************************
/////////////////////////////////////////////////////////////////////////////////////////
Server.default.options.outDevice = "Built-in Output";
s.options.numBuffers = 2048 * 16;
s.options.memSize = 8192 * 16;
s.options.maxNodes = 1024 * 32;
// s.options.numOutputBusChannels = 12;
s.options.numInputBusChannels = 0;
s.plotTree
ServerOptions.devices
(
~pbfm = Buffer.read(s, "/Users/mac/Desktop/ch_female.wav");
~pbm = Buffer.read(s, "/Users/mac/Desktop/ch_male.wav");
~pbm2 = Buffer.read(s, "/Users/mac/Desktop/ch_male2.wav");
~pbgt = Buffer.read(s, "/Users/mac/Desktop/gtr.wav");
~pbfmmono = Buffer.readChannel(s, "/Users/mac/Desktop/ch_female.wav", channels: [0]);
)
s.plotTree
(
Pdef.all.do(_.clear);
Pbindef.all.do(_.clear);
~wt_buf.do(_.free);
t.stop;
ServerTree.remove(~add_master);
ServerTree.remove(~add_reverb);
ServerTree.remove(~add_dist);
// Window.closeAll;
s = Server.local;
t = TempoClock.new(120/60).permanent_(true);
s.newBusAllocators;
~dbus = Bus.audio(s,2);
~rbus = Bus.audio(s,2);
~mbus = Bus.audio(s,2);
s.waitForBoot({
~parser = TheoryNoteParser.new;
~wt_sig = 10.collect({
arg i;
var numSegs = i.linexp(0,9,4,40).round;
Env(
[0]++({1.0.rand}.dup(numSegs-1) * [1,-1]).scramble++[0],
{exprand(1,i.linexp(0,9,1,50))}.dup(numSegs),
{[\sine,0,exprand(1,20) * [1,-1].choose].wchoose([9-i,3,i].normalizeSum)}.dup(numSegs)
).asSignal(1024);
});
~wt_buf = Buffer.allocConsecutive(10, s, 2048, 1, {
arg buf, index;
buf.setnMsg(0, ~wt_sig[index].asWavetable);
});
// ----------
// SynthDef.
// -----------
//main wavetable synth by Eli Fieldsteel.
SynthDef(\osc, {
arg buf=0, freq=200, detune=0.2,
amp=0.2, pan=0, out=0, rout=0, rsend=(-20),
atk=0.01, sus=1, rel=0.01, c0=1, c1=(-1);
var sig, env, detuneCtrl;
env = EnvGen.ar(
Env([0,1,1,0],[atk,sus,rel],[c0,0,c1]),
doneAction:2
);
detuneCtrl = LFNoise1.kr(0.1!8).bipolar(detune).midiratio;
sig = Osc.ar(buf, freq * detuneCtrl, {Rand(0,2pi)}!8);
sig = Splay.ar(sig);
sig = LeakDC.ar(sig);
sig = Balance2.ar(sig[0], sig[1], pan, amp);
sig = sig * env;
Out.ar(out, sig);
Out.ar(rout, sig * rsend.dbamp); //"post-fader" send to reverb
}).add;
SynthDef(\fatsaw, {
| out=0, freq = 440, amp=0.1, gate=1, attack=0.01, decay=0.3, sustain=0.5, release=1, filterSpeed=100, filterFreqStart=300, filterFreqEnd=400, resonance=1, hfFilterFreq=1, hfFilterResonance=1 |
var sig, env, filtFreq;
env = EnvGen.ar(Env.adsr(attack, decay, sustain, release), gate, levelScale:0.5, doneAction:Done.freeSelf);
sig = env*Splay.ar(LFSaw.ar(freq*[0.98,0.99,1.0,1.01,1.02],[LFNoise0.kr(2), LFNoise0.kr(1.9), LFNoise0.kr(2.1)]));
filtFreq = LFSaw.kr(filterSpeed,iphase:1).range(filterFreqStart,filterFreqEnd);
sig = RLPF.ar(sig, filtFreq, resonance);
sig = RHPF.ar(sig, hfFilterFreq, hfFilterResonance);
2.do({
sig = AllpassN.ar(sig, 0.050, [0.050.rand, 0.050.rand], 1);
});
Out.ar(out, amp*sig.tanh);
}).add;
SynthDef(\gabber, {
arg out=0, pan, atk=0.01, sus=0.5, rel=0.25,f=50, amp=0.25, filterFreq=1550, rroom=10, rtime=2, tlo=0, thigh=0.5;
var sig, demand, decay, env;
sig = Impulse.ar(1);
env = EnvGen.ar(
Env([0,1,1,0],[atk,sus,rel]),
doneAction:2
);
sig = Decay.ar(sig, TRand.ar(tlo, thigh, sig)) * Pulse.ar(f * Decay.ar(sig, 0.1, 20, 1));
sig = sig * env * amp ;
sig = RLPF.ar(sig, filterFreq);
sig = Pan2.ar(sig, TRand.ar(-1, 1, sig));
// + GVerb.ar(FreqShift.ar(sig.sum, 300), rroom, rtime)
Out.ar(out, LeakDC.ar(tanh((16*sig) )));
}).add;
SynthDef(\kick, {
arg out=0, amp=0.1, pan=0, filterFreq=4000, rel=0.26;
var env0, env1, env1m, sig;
env0 = EnvGen.ar(Env.new([0.5, 1, 0.5, 0], [0.005, 0.06, rel], [-4, -2, -4]), doneAction:2);
env1 = EnvGen.ar(Env.new([110, 59, 29], [0.005, 0.29], [-4, -5]));
env1m = env1.midicps;
sig = LFPulse.ar(env1m, 0, 0.5, 1, -0.5);
sig = sig + WhiteNoise.ar(1);
sig = LPF.ar(sig, env1m*1.5, env0);
sig = sig + SinOsc.ar(env1m, 0.5, env0);
sig = sig * 1.2;
sig = RLPF.ar(sig, filterFreq);
sig = sig.clip2(1);
Out.ar(out, Pan2.ar(sig * amp));
}).add;
SynthDef(\player, {
arg out = 0, buf = 0, rate = 1, start=0, mul = 1,rout=0, rsend=(-20);
var sig;
// rate = LFNoise2.kr(XLine.kr(1, 20, 60), 2);
sig = PlayBuf.ar(2,buf,BufRateScale.kr(buf)*rate,startPos: start, doneAction: 2)*mul;
Out.ar(out,sig);
Out.ar(rout, sig * rsend.dbamp);
}).add;
// ------------------
// Audio-processing.
// ------------------
SynthDef(\distortion) { |in=0, out=0, amount=0.6, amp=0.45|
var input, amCoef, newOut;
amCoef= 2*amount/(1-amount);
input = HPF.ar(In.ar(in, 2), 400)*5;
newOut = MidEQ.ar(LPF.ar((1+amCoef)*input/(1+(amCoef*input.abs)), [3800, 3900])*0.5, 120, 0.7, 8);
Out.ar(out, newOut * amp);
}.add;
SynthDef(\reverb, {
arg in=0, out=0, dec=6, lpf=1500;
var sig;
sig = In.ar(in, 2).sum;
sig = DelayN.ar(sig, 0.03, 0.03);
sig = CombN.ar(sig, 0.1, {Rand(0.01,0.099)}!32, dec);
sig = SplayAz.ar(2, sig);
sig = LPF.ar(sig, lpf);
5.do{sig = AllpassN.ar(sig, 0.1, {Rand(0.01,0.099)}!2, 3)};
sig = LPF.ar(sig, lpf);
sig = LeakDC.ar(sig);
Out.ar(out, sig);
}).add;
SynthDef(\master, {
|in, gate=1, out=0|
var input = In.ar(in, 2);
var shaped = Compander.ar(input, input, -6.dbamp, 1, 0.75, 0.1, 0.3);
var limited = Limiter.ar(shaped, -4.dbamp);
var releaser = DetectSilence.ar(gate + input, doneAction: 2);
Out.ar(out, limited)
}).add;
~add_dist = {Synth(\distortion, [\in, ~dbus, \out, ~mbus])};
~add_reverb = {Synth(\reverb, [\in, ~rbus, \out, ~mbus], Server.default, \addToTail)};
~add_master = {Synth(\master, [\in, ~mbus], Server.default, \addToTail)};
ServerTree.add(~add_dist);
ServerTree.add(~add_reverb);
ServerTree.add(~add_master);
s.freeAll;
s.sync;
/*s.plotTree;
s.meter;*/
});
)
/////////////////////////////////////////////////////////////////////////////////////////
************************************** COMPOSITION **************************************
/////////////////////////////////////////////////////////////////////////////////////////
(
// --------
// Chord.
// --------
Pbindef(\pad,
\instrument, \osc,
\dur, Pseq([Prand([2,4,16,8])],inf),
\atk, 0.4,
\sus, 0,
\rel, 0.25,
\c0, Pexprand(1,2),
\c1, Pexprand(1,2).neg,
\detune, Pfunc({rrand(0.15,0.4)}!3),
\buf, Prand(~wt_buf[0..3], inf),
\degree, 4,
\midinote, 48 + 12,
\amp, 0.35,
\pan, Pwhite(-0.4,0.4),
\out, ~mbus,
\rsend, -10,
);
Pbindef(\chords,
\instrument, \osc,
\dur, 4,
\atk, 0.001,
\sus, 0.5,
\rel, 3,
\c0, 0,
\c1, Pwhite(1,10).neg,
\detune, Pstutter(6, Pexprand(0.1,0.8)),
\buf, Prand(~wt_buf[4..9], inf),
\midinote, Pseq([
Pn([41,53,57,64,67],3),
Pn(\,1),
Pn([38,48,60,64,67],3),
Pn(\,1),
],inf),
\amp, Pseq([Pgeom(0.11,-2.dbamp,1)],inf),
\pan, Pwhite(0.01,0.3) * Pseq([1,-1],inf),
// \out, ~mbus,
// \rout, ~rbus,
\rsend, -15,
);
// Pbindef(\chords).play(t,quant:1);
// Pbindef(\ambi, \dur, 4,\rel, 4, \midinote, Pseq([Prand([57,53,48,50])],inf)).play(t, quant:1);
// Pbindef(\normal_kick, \rel, 1, \dur, Pseq([0.5,3.5],inf)).play(t, quant:1);
// 57,57,57,53,53,48,50,48,50
// ------
// Bass.
// ------
Pbindef(\bass,
\instrument, \osc,
\dur, Pseq([0.5], inf),
\atk, 0.001,
\sus, 0,
\rel, 0.5,
\c0, 0,
\detune, 0.18,
\c1, Pwhite(5,10).neg, //brightness
\buf, Prand(~wt_buf[4..9], inf),
\midinote, Pseq([
Pn([53 - 24],32),
Pn([50 - 24],32),
Pn([58 - 24],32),
Pn([43 - 12],32),
// Pn([48 - 12],32),
],inf),
\amp, 0.8,
\pan, Pwhite(0.01,0.3) * Pseq([1,-1],inf),
\out, ~mbus,
\rout, ~rbus,
\rsend, -20,
);
// -------
// sample.
// -------
Pbindef(\female_chorus2,
\instrument, \play,
\dur, 0.25,
\atk, 0,
\sus, Pwhite(0.01,0.1,inf),
\rel, 0.1,
\c1, 1,
\c2, -1,
\rate, 0.25,
\spos, Pwhite(1000,50000,inf),
\amp, 1.5,
\buf, ~pbfm,
\out, ~dbus,
\rsend, -10
);
// Pbindef(\male_vox).play(t);
Pbindef(\female_chorus,
\instrument, \player,
\dur, 16,
\mul, 2.25,
\rate, 1,
\buf, ~pbfm,
\out, ~mbus,
);
Pbindef(\male_vox,
\instrument, \player,
\dur, 16,
\mul, 0.25,
\buf, Pseq([
// Pseq([~pbm, ~pbm2]),
Pseq([~pbm]),
],inf),
\out, ~mbus,
);
Pbindef(\gt,
\instrument, \player,
\dur, 8,
\mul, 1.25,
\buf, ~pbgt,
\out, 0,
);
// -------
// melody.
// -------
Pbindef(\melody,
\instrument, \osc,
\dur, Pseq([16,1/4,1/4,1/4,1/4],inf),
\atk, 0.01,
\sus, 0.03,
\rel, 2,
\c0, -1,
\c1, -3,
\detune, 0.2,
\buf, Prand(~wt_buf[4..9], inf),
\midinote, Pseq([39+2,51+2,55+2,62+2,65+2]+ 12,inf),
\amp, 0.1,
\rout, ~rbus,
);
// Pbindef(\melody).play;
Pbindef(\ambi,
\instrument, \osc,
\dur, Prand([
Pseq([Prand([12]),2,1.5,0.5],1),
Pseq([Prand([12]),1.5,1,1.5],1),
],inf),
\atk, 0.01,
\sus, 0.3,
\rel, 1.5,
\c0, -2,
\c1, -2,
\detune, Pexprand(0.18,0.25),
\buf, Pwrand([
Pseq([~wt_buf[0]],4),
Pseq([~wt_buf[1]],4),
Pseq([~wt_buf[2]],4),
],[9,3,1].normalizeSum,inf),
\midinote, Pxrand([
Pseq([\,57,53,Prand([48,69,72,\])],inf),
],inf) + 12,
\amp, 0.2,
// \out, ~dbus,
\rout, ~rbus,
\rsend, -10,
);
Pbindef(\fsaw,
\instrument, \fatsaw,
\amp, 0.6,
\attack, 0.01,
\decay, 0.3,
\sustain, 0.1,
\release, 0.4,
\time, Ptime(inf),
\filterFreqStart, 300,
// \resonance, Pfunc({ |ev| ev['time'].linexp(0,10,1,0.2); }),
\midinote, Pseq(~parser.asMidi("f3 a3 f4 e4 c4 a3 c4 d4 g3 c4 a3 d3"), inf),
\dur, 0.25,
\out, ~mbus
);
// Pbindef(\fsaw).play(t);
Scale.directory;
// --------
// Rythmic.
// --------
Pbindef(\normal_kick,
\instrument, \kick,
\dur, Pseq([Pseq([1,1,1,0.75],1),Pseq([1.25,1,1,0.75],inf)],inf),
\freq, Pstutter(16,Pexprand(1000,20000,inf)),
\detune, 0,
\buf, Pstutter(16, Prand(~wt_buf[0..9],inf)),
\atk, 0,
\sus, 0,
\filterFreq, Pseries(50,2, 100),
\rel, Pexprand(0.02,0.04),
\c1, -4,
\amp, 0.8,
\pan, Pseq([1,-1],inf),
// \out, ~mbus,
// \rout, ~dbus,
\rsend, -30,
);
Pbindef(\hard_kick,
\instrument, \gabber,
\dur, Pseq([0.25], inf),
\amp, 0.1,
\rel, 1,
\tlo, 0,
\thigh, 0.5,
\out, ~mbus
);
Pbindef(
\deter_rand_kick,
\type, \phrase,
\instrument, \deter_rand_beats,
\dur, 2
);
Pdef(\deter_rand_beats, {
Pbind(
\instrument, \gabber,
\dur, Pkey(\dur) / 8 * Pseq([1,Pconst(8, Prand([0.25, 0.5, 0.75], inf))]).trace,
)
});
Pdef(\hard_rhythms,
Pwrand([
Pbind(
\instrument, \gabber,
\dur, Pseq([0.25],4),
\filterFreq, 6000,
\out, ~mbus,
),
Pbind(
\instrument, \gabber,
\dur, Pseq([1/4],2),
\filterFreq, 6000,
\out, ~mbus,
),
Pbind(
\instrument, \osc,
\dur, Pseq([1/2,1/4,1/4],1),
\freq, Pstutter(6, Pexprand(1000,2000)),
\detune, 100,
\buf, Pstutter(6, Prand(~wt_buf[2..5],inf)),
\atk, 0,
\sus, Pseq([1/3,0,0],1),
\rel, Pseq([0,Pexprand(0.01,0.3,2)],1),
\c1, -12,
\amp, Pseq([0.4,0.6],2),
\out, 0,
\rout, ~rbus,
\rsend, Pwhite(-30,-18),
),
Pbind(
\instrument, \gabber,
\dur, Pseq([1/4,1/2,1/4],1),
\filterFreq, 4000,
\out, ~mbus,
),
Pbind(
\instrument, \osc,
\dur, Pseq([1/6],6),
\freq, Pstutter(6, Pexprand(100,600)),
\detune, Pstutter(6, Pexprand(1,100)),
\buf, Pstutter(6, Prand(~wt_buf[8..9],inf)),
\atk, 0,
\sus, 0,
\rel, Pstutter(6, Pexprand(0.01,0.1)),
\c1, -10,
\amp, Pgeom(0.7, -2.dbamp, 6) * 1.2,
\out, 0,
\rout, ~mbus,
\rsend, Pwhite(-30,-18),
),
Pbind(
\instrument, \gabber,
\dur, Prand([
Pseq([1/2],2),
Pseq([1],2),
Pseq([1,1/2,1/2],1),
Pseq([2],1),
],1),
\filterFreq, 4000,
\out, ~mbus,
),
Pbind(
\instrument, \gabber,
\dur, Prand([
Pseq([1/16],16),
Pseq([1/16],8)
],1),
\filterFreq, 4000,
\out, ~mbus,
)
],
[50,18,3,3,15,25,5].normalizeSum, inf)
);
g = Group.new;
h = Group.new;
k = Group.new;
j = Group.new;
)
s.meter
// Pbindef(\ambi, \out, ~dbus);
// Pbindef(\female_chorus, \group, g)
// Pbindef(\female_chorus, \rout, ~rbus)
// Pbindef(\chords, \rout, 0)
// --------------
// compose
// --------------
(
s.record(path: "~/Desktop/out.wav".standardizePath);
{
// 2.wait;
x={FreeVerb.ar(CombN.ar(VarSaw.ar(LFSaw.ar(32,0,12,8),0,LFSaw.ar([18,12],0,1/64,1/64)).sin/2,1,1,2))}.play;
Pbindef(\normal_kick, \amp, 0.5, \rel, 1, \dur, Pseq([0.5,3.5],inf)).play(t, quant:1);
8.wait;
Pbindef(\chords,
\atk, 4,
\group, h,
\rout, ~rbus,
\amp, Pseq([Pgeom(0.12,-2.dbamp,1)] * 0.5,inf),
\midinote, Pseq([
Pn([41,53,57+12,64,67] - 24,3),
Pn(\,1),
Pn([38,48+12,60+[12,0,24].choose,64,72] - 24,3),
Pn(\,1),
],inf)).play(t);
30.wait;
Pbindef(\chords).stop;
2.wait;
Pbindef(\fsaw).play(t);
x.release;
15.875.wait;
Pbindef(\fsaw).stop;
0.125.wait;
Pbindef(\fsaw, \filterFreqStart, 1000).play(t);
Pbindef(\normal_kick).stop;
Pbindef(\hard_kick, \filterFreq, 1000, \f, 50, \dur, 0.25, \tlo,0.5).play(t);
Pbindef(\chords,\atk, 0.001,\buf, ~wt_buf[6],\amp, Pseq([Pgeom(0.25,-2.dbamp,1)],inf) * 0.4).play(t);
0.5.wait;
Pbindef(\hard_kick, \filterFreq, 1000, \f, 50, \tlo, 0).play(t);
31.5.wait;
Pbindef(\hard_kick).stop;
Pbindef(\chords).stop;
Pbindef(\fsaw).stop;
0.5.wait;
x = {b=LocalBuf(90000.0,2).clear;i=Sweep.ar(BufRd.ar(2,b,Saw.ar(12,30000.0,40000.0)),90000.0);BufWr.ar(Saw.ar([8,9]),b,i);(BufRd.ar(2,b,i)/2 )* 0.25}.play;
0.5.wait;
Pbindef(\gt).play(t);
0.5.wait;
x.release;
Pbindef(\hard_kick, \filterFreq, 1000, \f, 50, \dur, 0.25, \tlo,0.5).play(t);
Pbindef(\chords, \midinote, Pseq([Pn([41,53,57,64,67],3),Pn(\,1),Pn([38,48,60,64,72],3),Pn(\,1)],inf)).play(t);
Pbindef(\pad).play(t);
Pbindef(\fsaw, \amp, 0.25, \filterFreqStart, 2000, \dur, Pseq([0.5], inf), \midinote, Pseq([Pn([53 - 12],32),Pn([50 - 12],32),Pn([58 - 12],32),Pn([43],32)],inf),\pan, Pwhite(0.01,0.3) * Pseq([1,-1],inf) ).play(t);
// Pbindef(\melody, \group, j, \rout, ~rbus, \amp, 0.1).play(t);
Pbindef(\bass).play(t);
Pbindef(\ambi, \group, k, \rout, ~dbus, \rsend, -20, \amp, 0.3).play(t);
1.wait;
Pbindef(\hard_kick, \filterFreq, 1550, \f, 50, \tlo, 0);
31.wait;
// add female_chorus
Pbindef(\chords, \amp, Pseq([Pgeom(0.25,-2.dbamp,1)],inf) * 0.55);
Pbindef(\female_chorus, \group, g, \rout, ~rbus).play(t);
31.75.wait;
Pbindef(\hard_kick).stop;
Pbindef(\chords).stop;
Pbindef(\pad).stop;
// Pbindef(\fsaw).stop;
Pbindef(\bass).play(t);
// Pbindef(\melody).stop;
Pbindef(\ambi).stop;
0.25.wait;
Pbindef(\chords, \amp, Pseq([Pgeom(0.15,-1.dbamp,4)],inf)).play(t);
Pdef(\hard_rhythms).play(t);
// Pbindef(\fsaw, \release, 0.125, \decay, 0.1, \dur, 0.5, \midinote, Pseq([Pn([53 - 12],64),Pn([50 - 12],64),Pn([58 - 12],64),Pn([43],64)],inf) ).play(t);
Pbindef(\bass,
\dur, 0.25,
\midinote, Pseq([
Pn([53 - 24],64),
Pn([50 - 24],64),
Pn([58 - 24],64),
Pn([43 - 12],64),
],inf)).play(t);
Pbindef(\female_chorus).stop;
Pbindef(\pad).play(t);
Pbindef(\melody).play(t);
Pbindef(\ambi).play(t);
Pbindef(\fsaw).stop;
32.wait;
Pbindef(\gt).stop;
Pbindef(\fsaw, \amp, 0.53, \filterFreqStart, 1500, \dur, Pseq([0.25], inf), \midinote, Pseq(~parser.asMidi("f3 a3 f4 e4 c4 a3 c4 d4 g3 c4 a3 d3"), inf)).play(t);
32.wait;
Pbindef(\fsaw,\filterFreqStart, 500);
Pbindef(\male_vox, \group, g, \rout, ~rbus).play(t);
64.wait;
x.free;
Pbindef(\bass).stop;
Pdef(\hard_rhythms).stop;
Pbindef(\pad).stop;
Pbindef(\melody).stop;
16.wait;
Pbindef(\fsaw).stop;
Pbindef(\chords).stop;
Pbindef(\ambi).stop;
16.wait;
Pbindef(\male_vox).stop;
4.stop;
s.stopRecording;
}.fork;
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment