445 lines
11 KiB
Plaintext
445 lines
11 KiB
Plaintext
(
|
|
/* ********************************************************************
|
|
|
|
Ringer of Shkmeris Mta (Libido & Revolution)
|
|
|
|
copyright 2021 by Luka Prinčič
|
|
distribution and re-use allowed under conditions of PP:BY-SA-NC
|
|
(Peer Production: Attribution - ShareAlike - NonCapitalist) Licence
|
|
|
|
******************************************************************** */
|
|
|
|
s.waitForBoot({
|
|
fork({
|
|
"-----------------------------------------".postln;
|
|
// load samples
|
|
~shkmeris.free;
|
|
~shkmeris = Buffer.readChannel(s,
|
|
PathName.new(thisProcess.nowExecutingPath).pathOnly
|
|
+/+ "trio_mandili_shkmeris_mta_60s.wav",
|
|
channels:1);
|
|
|
|
"-> loaded buffers ...".postln;
|
|
|
|
s.sync;
|
|
|
|
// SynthDefs ---------------------------------------------------
|
|
|
|
SynthDef('mhh1',
|
|
{
|
|
arg gate = 1, amp = 0.1, pan = 0, outBus = 0,
|
|
rls = 1, rls1 = 0.01, lpa = 1, hpa = 1, bpa = 1;
|
|
var snd;
|
|
|
|
snd = WhiteNoise.ar;
|
|
snd = snd + (Pulse.ar(freq: Rand(5000!10, 15000)).sum * 0.2);
|
|
snd = (
|
|
LPF.ar(snd, Rand(500,2000)) * lpa * 4
|
|
* LFSaw.ar(LFNoise1.ar(1/3).range(15,30)).range(LFNoise1.ar(1).range(0.2,0.9), 1)
|
|
* EnvGen.ar(Env.perc(0, Rand(0.1, rls)), gate) )
|
|
+ (
|
|
HPF.ar(snd, Rand(2000,15000)) * hpa
|
|
* LFSaw.ar(LFNoise1.ar(1/3).range(15,30)).range(LFNoise1.ar(1).range(0.2,0.9), 1)
|
|
* EnvGen.ar(Env.perc(0, Rand(0.1, rls)), gate) )
|
|
+ (
|
|
BPF.ar(snd, Rand(1000,5000), 0.2) * bpa * 4
|
|
* LFSaw.ar(LFNoise1.ar(1/3).range(15,30)).range(LFNoise1.ar(1).range(0.2,0.9), 1)
|
|
* EnvGen.ar(Env.perc(0, Rand(0.1, rls)), gate) )
|
|
;
|
|
snd = HPF.ar(snd, 200);
|
|
snd = LPF.ar(snd, 13000);
|
|
snd = snd * EnvGen.kr(Env.cutoff(rls), gate, doneAction:Done.freeSelf);
|
|
snd = Pan2.ar(snd, pan);
|
|
snd = snd * amp;
|
|
|
|
Out.ar(outBus, snd);
|
|
}
|
|
).add;
|
|
|
|
SynthDef(\kick,
|
|
{
|
|
arg gate = 1, out = 0, amp = 0.1, release = 0.9, freq=50, pan = 0, cutoff = 500, fxout=0, hpf=0;
|
|
var snd, env, fenv;
|
|
|
|
freq = freq * Rand(0.98, 1.02);
|
|
fenv = EnvGen.ar(Env([freq*4,freq],0.08,'cub'));
|
|
snd = SinOsc.ar(freq: [fenv,fenv*2], mul:[1,0.4] ).sum;
|
|
snd = snd * LFPulse.ar(24).range(0.7,1).lag(0.02);
|
|
snd = snd + WhiteNoise.ar(0.3);
|
|
snd = snd + SinOsc.ar(freq: [freq*2,freq*4], mul:EnvGen.ar(Env.perc(0, 0.2)) * 0.5).sum;
|
|
snd = snd + LFTri.ar(freq: freq*4, mul:EnvGen.ar(Env.perc(0, 0.5)) * 0.3);
|
|
snd = RLPF.ar(snd, cutoff, 0.7);
|
|
snd = HPF.ar(snd, hpf);
|
|
snd = snd.softclip;
|
|
snd = snd * EnvGen.ar(Env.adsr(0, 0.05, 0.4, release, curve:'sqr'), gate: gate, doneAction:Done.freeSelf);
|
|
snd = snd * amp * 5;
|
|
snd = Pan2.ar(snd, pan);
|
|
|
|
Out.ar(fxout, snd);
|
|
Out.ar(out, snd);
|
|
}
|
|
).add;
|
|
|
|
SynthDef('ringer',
|
|
{
|
|
arg outBus = 0, amp = 0.1, freq = 140, gate = 1, pan = 0;
|
|
var snd;
|
|
|
|
freq = freq * LFNoise1.kr(1/10).range(1,1.01);
|
|
snd = WhiteNoise.ar;
|
|
snd = snd + Pulse.ar(
|
|
freq: [freq, freq * 0.5, freq * 2] * SinOsc.ar(1).range(0.99,1.01),
|
|
mul: 0.01 ).sum;
|
|
snd = Resonz.ar(snd,
|
|
[
|
|
freq,
|
|
freq * 1.5 * SinOsc.kr(4).range(0.99,1.02) ,
|
|
freq * 1.75 * SinOsc.kr(4).range(0.99,1.02) ,
|
|
freq * 0.75 * LFNoise1.kr(4).range(0.99,1.01),
|
|
freq * 0.5 * LFNoise1.kr(4).range(0.99,1.01),
|
|
freq * 2 * LFNoise1.kr(4).range(0.99,1.01)
|
|
], 0.001, [100,1,1,10,10,5]).sum * 0.5;
|
|
snd = snd + LFTri.ar(freq/2*0.99, mul:0.03);
|
|
snd = snd + Pulse.ar(freq/2*1.01, mul:0.005);
|
|
snd = Limiter.ar(snd, 0.8);
|
|
snd = snd * amp ;
|
|
snd = snd * EnvGen.ar(Env.adsr(0.001, 0.2), gate, doneAction:2);
|
|
|
|
Out.ar(outBus, snd);
|
|
}
|
|
).add;
|
|
|
|
SynthDef(\deciverbfx,
|
|
{
|
|
arg inBus, outBus = 0;
|
|
var snd, input;
|
|
|
|
input = In.ar(inBus,1);
|
|
snd = Decimator.ar(input, LFNoise1.ar(1/5).range(500,10000));
|
|
snd = snd * LFPulse.ar(10).range(LFNoise1.kr(1/10).range(0.5,0.9),1)
|
|
* LFNoise1.kr(1/10).range(0.2,0.5);
|
|
snd = snd + input;
|
|
snd = RLPF.ar(snd, LFNoise1.ar(0.1).exprange(1000,10000), rq:0.8);
|
|
snd = GVerb.ar(snd, 100);
|
|
|
|
Out.ar(outBus, snd);
|
|
}
|
|
).add;
|
|
|
|
SynthDef(\revfx,
|
|
{
|
|
arg inBus, outBus = 0;
|
|
var snd, input;
|
|
|
|
input = In.ar(inBus,2);
|
|
snd = GVerb.ar(input.sum, 100);
|
|
|
|
Out.ar(outBus, snd);
|
|
}
|
|
).add;
|
|
|
|
SynthDef(\beep_sus,
|
|
{
|
|
arg outBus = 0, freq=440, gate=1, amp=0.1, sawamp = 0.1;
|
|
var snd;
|
|
|
|
snd = Pulse.ar(freq) + LFTri.ar(freq/ Rand(1.99,2.01)) + Saw.ar(freq * Rand(1.99,2.01), mul:sawamp);
|
|
snd = snd * EnvGen.kr(Env.cutoff, gate, doneAction:Done.freeSelf);
|
|
snd = snd * amp;
|
|
|
|
Out.ar(outBus, snd);
|
|
}
|
|
).add;
|
|
|
|
SynthDef(\beep_sus_filt,
|
|
{
|
|
arg outBus = 0, freq=440, gate=1, amp=0.1, ffreq = 1000, fq = 0.5, pan=0;
|
|
var snd;
|
|
|
|
ffreq = EnvGen.ar(Env.adsr(0.001,0.05,0.5,0.1), gate, ffreq, ffreq/2);
|
|
snd = Pulse.ar(freq) + Saw.ar(freq * Rand(0.99,1.01) * [2,4], mul:0.3) + LFTri.ar(freq);
|
|
snd = RLPF.ar(snd, ffreq, fq);
|
|
snd = snd * EnvGen.kr(Env.cutoff, gate, doneAction:Done.freeSelf);
|
|
snd = snd * amp;
|
|
snd = Splay.ar(snd, 1, 1, 0);
|
|
Out.ar(outBus, snd);
|
|
}
|
|
).add;
|
|
|
|
|
|
SynthDef(\fxdly,
|
|
{
|
|
arg inBus, outBus = 0;
|
|
var snd, input;
|
|
|
|
input = In.ar(inBus,2);
|
|
|
|
snd = input + CombN.ar(
|
|
HPF.ar(input, 500),
|
|
1, [0.33,0.44], 5, 0.5 );
|
|
|
|
Out.ar(outBus, snd);
|
|
}
|
|
).add;
|
|
|
|
SynthDef(\grenel,
|
|
{
|
|
arg outBus = 0, gate = 1, amp = 0.1, buf, pos = 0,
|
|
atk = 1, rls = 1, rand = 0, frq = 0.1, rate = 1, ffreq = 450;
|
|
var snd, gfreq = 200;
|
|
snd = GrainBuf.ar(
|
|
numChannels: 2,
|
|
trigger: Impulse.ar(gfreq * LFNoise0.ar(gfreq).range(1, 0.8) ),
|
|
dur: 0.2,
|
|
sndbuf: buf,
|
|
rate: rate,
|
|
pos:
|
|
( LFNoise1.kr(frq).range(0,0.2) * rand ) +
|
|
( SinOsc.kr(frq).range(0,0.03) * (rand-1).abs )
|
|
+ pos
|
|
* LFNoise0.ar(gfreq).range(1, 0.999), // rand position a bit
|
|
pan: LFNoise1.ar(0.5) * 0.9
|
|
);
|
|
snd = LPF.ar(in: snd, freq: LFNoise1.ar(0.1).exprange(ffreq,15000));
|
|
snd = snd * EnvGen.kr(Env([0,1,0], [atk,rls], [3,-3], 1), gate, doneAction:Done.freeSelf);
|
|
snd = snd * amp;
|
|
|
|
Out.ar(outBus, snd);
|
|
}
|
|
).add;
|
|
|
|
SynthDef(\subCut,
|
|
{
|
|
arg cutoff=85, inBus, outBus;
|
|
var snd, in;
|
|
in = In.ar(inBus, 2);
|
|
snd = HPF.ar(in, cutoff);
|
|
Out.ar(outBus, snd);
|
|
}
|
|
).add;
|
|
|
|
SynthDef(\limiter,
|
|
{
|
|
arg cutoff=70, amp = 0.5, threshold = 0.5, inBus, outBus ;
|
|
var snd, in;
|
|
in = In.ar(inBus, 2);
|
|
snd = Limiter.ar(in, threshold) * amp;
|
|
Out.ar(outBus, snd);
|
|
}
|
|
).add;
|
|
|
|
"-> loaded SynthDefs ...".postln;
|
|
|
|
s.sync;
|
|
|
|
// busses
|
|
~fxBus = Bus.audio(s, 1);
|
|
~fxBus2 = Bus.audio(s, 1);
|
|
~dlyBus = Bus.audio(s, 2);
|
|
~revBus = Bus.audio(s, 2);
|
|
~subBus = Bus.audio(s, 2);
|
|
~limitBus = Bus.audio(s, 2);
|
|
|
|
"-> created busses ...".postln;
|
|
|
|
s.sync;
|
|
|
|
|
|
// Pbinds ---------------------------------------------------------
|
|
|
|
~granG = Pbind(*[
|
|
instrument: \grenel,
|
|
buf: ~shkmeris,
|
|
dur: 14,
|
|
frq: 0.01,
|
|
rate: [0.983, 0.983/2, 0.983*2],
|
|
amp:0.07 * [1, 1.5, 0.2],
|
|
ffreq: 3000,
|
|
pos: Pstutter(2, Pxrand([ 0.98, 0.81, 0.78, 0.77, 0.751, 0.689,
|
|
0.639, 0.62, 0.61, 0.52, 0.46, 0.3, 0.2 ], inf), inf),
|
|
legato:1.1,
|
|
outBus: ~dlyBus,
|
|
]);
|
|
|
|
~beepP = Pbind(*[
|
|
instrument: \beep_sus,
|
|
dur: 0.2, // quintuplets
|
|
legato: 0.01,
|
|
scale: Scale.minor,
|
|
degree: Pseq([[-7,0], Pxrand([2,4,5,6],6)], inf), // 7 quintuplets
|
|
detune: Pseg([0,1,3,1,0], 5, \cub, inf),
|
|
mtranspose: Pseq([Pn(0, 7*3), Pn(2, 7*3), Pn(-2, 7*4)],inf),
|
|
sawamp: Pseg([0,1,0], 40, \lin, inf),
|
|
outBus: ~fxBus2,
|
|
amp:0.1
|
|
]);
|
|
|
|
~ringP = Pbind(*[
|
|
instrument: 'ringer',
|
|
dur: 5,
|
|
scale: Scale.minor,
|
|
degree: Pseq([0,Prand([2,-2]), Prand([5,4])], inf),
|
|
octave: [4,5,6],
|
|
amp: [2,2,1] * 0.2,
|
|
detune: Pxrand([0,1,2,3], inf),
|
|
legato: 1,
|
|
outBus: ~fxBus
|
|
]);
|
|
|
|
|
|
~bassP = Pbind(*[
|
|
instrument: \beep_sus_filt,
|
|
dur: Pseq([Pn(0.5, 112), Pn(0.4, 140)], inf),
|
|
octave: Pseq([Pn([3,4],28), Pn([5,4],28), Pn([6,4],28)], inf),
|
|
scale: Scale.minor,
|
|
degree: Pseq([Pn(Pwrand([0,14],[0.95,0.05]),7),7],inf) * Pwhite(0.999,1.001),
|
|
outBus:~dlyBus,
|
|
legato: Pwhite(0.4,0.7),
|
|
fq: Pseg([0.9,0.6,0.9], 17, \lin, inf),
|
|
amp:0.07,
|
|
ffreq: Pseg([500,2000,500], 10, \exp, inf),
|
|
pan:0
|
|
]);
|
|
|
|
~kickP = Pbind(*[
|
|
instrument: 'kick',
|
|
dur: 1,
|
|
degree:0,
|
|
octave:[2,3],
|
|
amp: [1,0.3] * 0.12,
|
|
release: [0.9, 0.3],
|
|
legato:0.6,
|
|
outBus: ~limitBus,
|
|
]);
|
|
|
|
~hhP = Pbind(*[
|
|
instrument: 'mhh1',
|
|
dur: Pseq([Prand([1,2]),2,Prand([1,3,Pn(1/2,2)])] * 0.2, inf),
|
|
rls: Pwrand([0.5, 2.5], [0.9,0.1], inf),
|
|
bpa: 0.6,
|
|
lpa: 0.1,
|
|
hpa: 1,
|
|
legato:0.1,
|
|
pan: Pwhite(-0.2,0.2),
|
|
outBus: ~subBus,
|
|
]);
|
|
|
|
~snP = Pbind(*[
|
|
instrument: 'mhh1',
|
|
dur: Pseq([Prand([4,6]),4,3] * 0.2, inf),
|
|
rls: Pwrand([1, Pwhite(0.5,3.5)], [0.9,0.1], inf),
|
|
bpa: 0,
|
|
lpa: 2,
|
|
hpa: 0,
|
|
legato:0.1,
|
|
outBus: ~subBus,
|
|
]);
|
|
|
|
"-> loaded Pbindefs ...".postln;
|
|
|
|
s.sync;
|
|
|
|
// load fx to buses
|
|
~fx = Synth(\deciverbfx, [\inBus, ~fxBus, \outBus, ~subBus], addAction: \addToTail);
|
|
~fx2 = Synth(\deciverbfx, [\inBus, ~fxBus2, \outBus, ~subBus], addAction: \addToTail);
|
|
~dly = Synth(\fxdly, [\inBus, ~dlyBus, \outBus, ~subBus], addAction: \addToTail);
|
|
~rev = Synth(\revfx, [\inBus, ~revBus, \outBus, ~subBus], addAction: \addToTail);
|
|
~subCut = Synth(\subCut, [\inBus, ~subBus, \outBus, ~limitBus], addAction: \addToTail);
|
|
~limiter = Synth(\limiter, [\inBus, ~limitBus, \outBus, 0], addAction: \addToTail);
|
|
|
|
"-> instantiated fx Synths ...".postln;
|
|
|
|
|
|
// FINAL TIMELINE/SONG SEQUENCE
|
|
s.sync;
|
|
|
|
"-> starting final timeline / song sequence ...".postln;
|
|
|
|
Pseq([
|
|
|
|
Pfindur(14, Ppar([
|
|
Pbindf(~kickP),
|
|
])),
|
|
|
|
Pfindur(28, Ppar([
|
|
Pbindf(~kickP),
|
|
Pfindur(27, Pbindf(~snP)),
|
|
])),
|
|
|
|
Pfindur(27.5, Ppar([
|
|
Pbindf(~kickP),
|
|
Pbindf(~snP),
|
|
Pbindf(~hhP),
|
|
])),
|
|
|
|
Rest(0.5),
|
|
|
|
Pfindur(28 , Ppar([
|
|
Pbindf(~beepP),
|
|
])),
|
|
|
|
Pfindur(28, Ppar([
|
|
Pbindf(~beepP),
|
|
Pbindf(~kickP),
|
|
])),
|
|
|
|
Pfindur(28, Ppar([
|
|
Pbindf(~beepP),
|
|
Pbindf(~kickP),
|
|
Pbindf(~snP),
|
|
])),
|
|
|
|
Pfindur(28, Ppar([
|
|
Pbindf(~beepP),
|
|
Pfindur(27, Ppar([
|
|
Pbindf(~kickP),
|
|
Pbindf(~snP),
|
|
Pbindf(~hhP),]))
|
|
])),
|
|
|
|
|
|
Pfindur(28, Ppar([
|
|
Pbindf(~beepP),
|
|
Pbindf(~granG, *[pos: 0.77]),
|
|
Pbindf(~kickP),
|
|
])),
|
|
|
|
Pfindur(8*14, Ppar([
|
|
Pbindf(~bassP),
|
|
Pbindf(~beepP),
|
|
Pbindf(~kickP),
|
|
Pbindf(~snP),
|
|
Pbindf(~hhP),
|
|
Pbindf(~granG, *[ pos:
|
|
Pseq([0.52, 0.77, 0.2, 0.46 ], inf)
|
|
]),
|
|
Pbindf(~ringP, *[ dur:Pseq([Rest(4*14), Pn(7)])] )
|
|
|
|
])),
|
|
|
|
|
|
Pfindur(8*14, Ppar([
|
|
Pfindur(4*14, Pbindf(~bassP)),
|
|
Pbindf(~kickP),
|
|
Pfindur(6*14, Pbindf(~snP)),
|
|
Pbindf(~granG, *[ pos:
|
|
Pseq([0.52, 0.77, 0.2, 0.46 ], inf)
|
|
]),
|
|
Pbindf(~ringP, *[ dur: 7] )
|
|
|
|
])),
|
|
|
|
|
|
Rest(6),
|
|
|
|
Pfunc({ "-> final timeline / song sequence end.".postln; }),
|
|
Pfunc({ CmdPeriod.run;}),
|
|
|
|
//Pfunc({s.quit})
|
|
|
|
|
|
]).play;
|
|
})
|
|
});
|
|
)
|