traven/grenel.scd

169 lines
3.5 KiB
Plaintext

(
/* *******************************************************************
Grenel Cycles (Limbo For Corrupt Politicians)
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;
// buffers/samples --
~b1 = Buffer.read(s, PathName.new(thisProcess.nowExecutingPath).pathOnly +/+ "pe4enkata_beatbox.wav");
~b2 = Buffer.read(s, PathName.new(thisProcess.nowExecutingPath).pathOnly +/+ "pe4enkata_diggity.wav");
s.sync;
// busses --
~revBus = Bus.audio(s, 2);
~dlyBus = Bus.audio(s, 2);
s.sync;
// syntdefs --
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.5
);
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(\revfx,
{
arg inBus, outBus, amp=1, revtime=10;
var input, snd;
input = In.ar(inBus, 2);
snd = GVerb.ar(input.sum, 100, revtime, drylevel:0, mul:-6.dbamp, add:input);
snd = snd * amp;
Out.ar(outBus, snd);
}
).add;
SynthDef(\dlyfx,
{
arg inBus, outBus, amp=1, dry=1, wet= -8.dbamp;
var input, snd;
input = In.ar(inBus, 2);
snd = input * dry + CombN.ar(input, 1, [0.33,0.44], 5, mul:wet);
snd = snd * amp;
Out.ar(outBus, snd);
}
).add;
s.sync;
// reverb
~revfx = Synth(\revfx, [\inBus, ~revBus, \outBus, 0, \amp, -5.dbamp], addAction:\addToTail);
// delay fx
~dlyfx = Synth(\dlyfx, [\inBus, ~dlyBus, \outBus, 0, \amp, -5.dbamp], addAction:\addToTail);
s.sync;
Pbind(*[ // GRANULATOR 1
instrument:\grenel,
pos: Pseq([ // a certain sequence. a love.
Pn(0.5, 2),
[0.5,0.4],
Pn([0.4], 2),
[0.4,0.6],
Pn([0.6], 2),
[0.6,0.24],
Pn([0.24], 2),
[0.72, 0.24],
Pn([0.72], 2),
[0.7, 0.72],
Pn([0.7], 2),
[0.55, 0.7],
Pn([0.55], 2),
[0.75, 0.55],
Pn([0.75], 2),
[0.66, 0.75],
Pn([0.66], 2),
[0.11, 0.66],
Pn([0.11], 2),
[0.5, 0.11], // 30 * 30sec = 15min
Pn([0.5], 2), // 1 min
]),
rate: [0.25, 0.5, 1],
dur: 30,
legato:0.95,
atk: 4,
rls: 10,
buf: ~b2,
amp: -15.dbamp,
outBus: ~revBus,
// debug:
postln: Pfunc({arg e; postln("G1 pos:" + e.pos)})
]).play;
Pbind(*[ // GRANULATOR 2
instrument:\grenel,
pos: Pwhite(0.1,0.9),
rate: [0.5,1,1],
ffreq: 9000,
dur: Pseq([Rest(6 * 30), Pn(Pseq([Rest(30), 30]), 32-6)]),
legato:1,
atk: 7,
rls: 0.1,
buf: ~b1,
rand: Pwhite(0.1, 1, 32-5),
frq: Prand([1, 1/2, 1/4], inf),
amp:-26.dbamp,
outBus: ~dlyBus,
// debug:
postln: Pfunc(
{
arg e;
postln("G2 pos:"
+ e.pos.round(0.01)
+ " rand:"
+ e.rand.round(0.01)
+ " dur:"
+ e.dur
+ " frq:"
+ e.frq)
})
]).play;
})
})
)