add three sc documents - three tracks of ilex
parent
4fd2ed8b53
commit
e17d9745e2
|
@ -0,0 +1,718 @@
|
||||||
|
/*
|
||||||
|
johchow.
|
||||||
|
|
||||||
|
inspired by frequency modulation synthesis
|
||||||
|
and innovations in computer music by John Chowning.
|
||||||
|
|
||||||
|
copyright by Luka Prinčič <luka@lukaprincic.si>
|
||||||
|
|
||||||
|
published under the conditions of Peer Production Licence
|
||||||
|
https://civicwise.org/peer-production-licence/
|
||||||
|
(see the bottom of this document for human readable summary)
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
(
|
||||||
|
s.waitForBoot({
|
||||||
|
|
||||||
|
Routine({
|
||||||
|
|
||||||
|
"\n\n\n".postln;
|
||||||
|
">>> hello, welcome to Chowning! ------------------------------------------- ".postln;
|
||||||
|
|
||||||
|
// set
|
||||||
|
s.latency = 0.08;
|
||||||
|
s.volume = -1;
|
||||||
|
|
||||||
|
// function to tell us where we are on the timeline
|
||||||
|
~postbeats = { (" (" + TempoClock.default.beats.mod(64) + "/" + TempoClock.default.beats.mod(8) + ")" ).postln;};
|
||||||
|
|
||||||
|
b.free;
|
||||||
|
b = Buffer.alloc(s, s.sampleRate * 10, 1);
|
||||||
|
|
||||||
|
SynthDef(\fm5, {
|
||||||
|
arg f=10, i=0.5, gate=1, freq=120, amp=0.1, outBus=0, rls=2;
|
||||||
|
var c, m, d, snd;
|
||||||
|
|
||||||
|
c = freq;
|
||||||
|
m = c * f;
|
||||||
|
//d = 1200;
|
||||||
|
//m = i * d;
|
||||||
|
d = m / i;
|
||||||
|
|
||||||
|
// basic FM synthesis:
|
||||||
|
snd = SinOsc.ar( c + SinOsc.ar(m, mul: d) );
|
||||||
|
|
||||||
|
// envelope:
|
||||||
|
snd = snd * EnvGen.ar(Env.perc(releaseTime:rls, curve:-10), gate, doneAction:2);
|
||||||
|
|
||||||
|
Out.ar(outBus, snd!2 * amp * 3);
|
||||||
|
}).add;
|
||||||
|
|
||||||
|
|
||||||
|
// reverb synthdef
|
||||||
|
SynthDef(\revfx, { |inBus, outBus = 0, wet = 0.3, amp = 0.2|
|
||||||
|
var snd, rev;
|
||||||
|
|
||||||
|
snd = In.ar(inBus, 2);
|
||||||
|
|
||||||
|
snd = AnalogTape.ar(snd,
|
||||||
|
LFNoise1.kr(1/5).range(0.5,1),
|
||||||
|
LFNoise1.kr(1/5).range(0.5,1),
|
||||||
|
LFNoise1.kr(1/5).range(0.5,1) );
|
||||||
|
snd = LPF.ar(snd, LFNoise1.kr(1/5).exprange(500,15000));
|
||||||
|
rev = Greyhole.ar(snd, [1.4,2.05], feedback:0.9, modDepth:0.6, modFreq: 0.5) * wet + snd;
|
||||||
|
rev = Splay.ar(rev);
|
||||||
|
rev = rev * amp;
|
||||||
|
|
||||||
|
OffsetOut.ar(outBus, rev);
|
||||||
|
}).add;
|
||||||
|
|
||||||
|
SynthDef(\fmkick, {
|
||||||
|
arg gate=1, rls=1, amp=0.1, freq=190, outBus=0, fxBus, fxwet=0;
|
||||||
|
var snd, square; //, env, fenv;
|
||||||
|
|
||||||
|
//env = ;
|
||||||
|
//fenv = EnvGen.ar(Env.perc(0.001, rls), gate, doneAction:2);
|
||||||
|
//
|
||||||
|
freq = freq * EnvGen.ar(Env.perc(0.01, rls, 1, -10));
|
||||||
|
square = Pulse.ar(freq*2 + 20, mul:0.2);
|
||||||
|
freq = freq * SinOsc.ar(freq/1.2, mul:3);
|
||||||
|
snd = SinOsc.ar(
|
||||||
|
freq: freq,
|
||||||
|
mul: EnvGen.ar(Env.perc(0.001, rls, 1, 10))
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
snd = snd + square;
|
||||||
|
snd = LeakDC.ar(snd);
|
||||||
|
snd = snd + WhiteNoise.ar(EnvGen.ar(Env.perc(0.00001, 0.01), levelScale:0.4));
|
||||||
|
snd = LPF.ar(snd, freq: EnvGen.ar(Env.perc(0.0001, rls, 20000, -4)) + 50);
|
||||||
|
snd = HPF.ar(snd, 20);
|
||||||
|
|
||||||
|
snd = snd * EnvGen.ar(Env([1,1,0], [rls, 0.1]));
|
||||||
|
snd = snd * EnvGen.ar(Env.cutoff, gate, doneAction:Done.freeSelf);
|
||||||
|
snd = Splay.ar(snd * amp);
|
||||||
|
|
||||||
|
Out.ar(fxBus, snd * fxwet);
|
||||||
|
Out.ar(outBus, snd);
|
||||||
|
}).add;
|
||||||
|
|
||||||
|
SynthDef(\glc, {
|
||||||
|
arg gate=1, amp=0.1, outBus=0, rls=0.01, pan=0;
|
||||||
|
var glc;
|
||||||
|
|
||||||
|
glc = WhiteNoise.ar(LFNoise0.kr(3).range(0,3))
|
||||||
|
+ Pulse.ar(LFNoise0.kr(8).range(1000,10000), mul:LFNoise0.kr(2).range(0,3));
|
||||||
|
glc = glc * EnvGen.kr(Env.cutoff(rls), gate, doneAction:2);
|
||||||
|
|
||||||
|
|
||||||
|
//* LFPulse.ar(LFNoise0.kr(3).range(0.01,10), width:LFNoise0.kr(5).range(0.01,0.1)).range(0,0.6);
|
||||||
|
glc = RLPF.ar(in:glc, freq:LFNoise1.kr(5).exprange(300,10000), rq:LFNoise1.kr(5).range(0.2,0.9),
|
||||||
|
//mul:LFNoise0.kr(1/2).exprange(0.1,0.9)
|
||||||
|
);
|
||||||
|
glc = Decimator.ar(glc, 8000, 8);
|
||||||
|
glc = LPF.ar(glc, 8000);
|
||||||
|
|
||||||
|
glc = Pan2.ar(glc * amp, pan);
|
||||||
|
|
||||||
|
Out.ar(outBus, glc * amp);
|
||||||
|
|
||||||
|
}).add;
|
||||||
|
|
||||||
|
SynthDef(\phpHatSnare, {
|
||||||
|
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(1500,3000)) * lpa * 4
|
||||||
|
* LFSaw.ar(LFNoise1.ar(1/3).range(15,30)).range(LFNoise1.ar(1).range(0.5,0.9), 1)
|
||||||
|
* EnvGen.ar(Env.perc(0, rls), gate) )
|
||||||
|
+ (
|
||||||
|
HPF.ar(snd, Rand(5000,9000)) * hpa
|
||||||
|
* LFSaw.ar(LFNoise1.ar(1/3).range(15,30)).range(LFNoise1.ar(1).range(0.5,0.9), 1)
|
||||||
|
* EnvGen.ar(Env.perc(0, 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.5,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;
|
||||||
|
|
||||||
|
OffsetOut.ar(outBus, snd);
|
||||||
|
}
|
||||||
|
).add;
|
||||||
|
|
||||||
|
SynthDef(\envnoise, {
|
||||||
|
arg gate=1, amp=0.1, outBus=0, atk=8, crv=8, bpff=2000;
|
||||||
|
var snd;
|
||||||
|
|
||||||
|
snd = ClipNoise.ar(EnvGen.ar(Env.asr(atk, 1, 0, crv), gate, doneAction:Done.freeSelf));
|
||||||
|
snd = BPF.ar(snd, bpff);
|
||||||
|
snd = Pan2.ar(snd, LFNoise1.kr(1, mul:0.7));
|
||||||
|
|
||||||
|
Out.ar(outBus, snd * amp);
|
||||||
|
}).add;
|
||||||
|
|
||||||
|
SynthDef(\dlywrangler, {
|
||||||
|
arg outBus=0, inBus, wet=0.1;
|
||||||
|
var snd, dly2;
|
||||||
|
snd = In.ar(inBus,2);
|
||||||
|
dly2 = CombN.ar(HPF.ar(snd,300), 1, [0.5,0.77], 5, mul:LFNoise1.kr(0.1).range(0.8,0.3));
|
||||||
|
snd = CombN.ar(snd, 1, Lag.ar(LFNoise0.ar(2).range(0.01,0.1),0.1), 3, mul:wet) + snd;
|
||||||
|
snd = Decimator.ar(snd, LFNoise1.kr(1).range(8000,22000), 0.2, 1.5) + (snd*0.5);
|
||||||
|
snd = AnalogTape.ar(snd, 1, 1);
|
||||||
|
snd = Compander.ar(snd, snd,
|
||||||
|
thresh: 0.9,
|
||||||
|
slopeBelow: 1,
|
||||||
|
slopeAbove: 0.01,
|
||||||
|
clampTime: 0.01,
|
||||||
|
relaxTime: 0.01);
|
||||||
|
snd = BHiShelf.ar(snd, 3000, 0.2, 5);
|
||||||
|
Out.ar(outBus, snd * Line.ar);
|
||||||
|
}).add;
|
||||||
|
|
||||||
|
SynthDef(\gran, {
|
||||||
|
var snd;
|
||||||
|
|
||||||
|
snd = GrainBuf.ar(2,
|
||||||
|
trigger: Impulse.ar(LFNoise1.kr(1/10!3).exprange(80, 180) * LFNoise0.ar(100).range(0.7,1.1)),
|
||||||
|
dur: LFNoise1.ar(1).range(0.08,0.1),
|
||||||
|
sndbuf: b,
|
||||||
|
rate:[1,1/2,2],
|
||||||
|
pos:LFNoise1.kr(1/40!3).range(0,1),
|
||||||
|
pan: LFNoise0.ar(100).range(-1,1)
|
||||||
|
);
|
||||||
|
snd = LPF.ar(snd, LFNoise1.kr(1/10!3).exprange(500,10000));
|
||||||
|
snd = Mix(snd);
|
||||||
|
snd = AnalogTape.ar(snd, 1, 1, Lag2.kr(\dist.kr(0.1), 20));
|
||||||
|
snd = JPverb.ar(snd, LFNoise1.kr(1/10!2).range(1,10)) + snd;
|
||||||
|
snd = Limiter.ar( Mix(snd * 0.3), 0.8 );
|
||||||
|
snd = snd * Env.circle([0.5,0.3,0.5],90,\cub).kr;
|
||||||
|
snd = snd * Lag2.kr(\amp.kr(0.5), 20);
|
||||||
|
|
||||||
|
Out.ar(0,snd * 0.2);
|
||||||
|
}).add;
|
||||||
|
|
||||||
|
SynthDef(\recbuf, {
|
||||||
|
arg inBus, bufnum;
|
||||||
|
|
||||||
|
RecordBuf.ar(
|
||||||
|
In.ar(
|
||||||
|
inBus, 1),
|
||||||
|
bufnum);
|
||||||
|
}).add;
|
||||||
|
|
||||||
|
~revFXbus1.free;
|
||||||
|
~revFXbus1 = Bus.audio(s, 2);
|
||||||
|
|
||||||
|
~manglebus1.free;
|
||||||
|
~manglebus1 = Bus.audio(s, 2);
|
||||||
|
|
||||||
|
s.sync;
|
||||||
|
"--- loaded SynthDefs, created Busses ...".postln;
|
||||||
|
|
||||||
|
wait(1);
|
||||||
|
|
||||||
|
//~reverb1.free;
|
||||||
|
~reverb1 = Synth(\revfx, [\inBus, ~revFXbus1, \wet, 0.4], addAction:\addToTail);
|
||||||
|
|
||||||
|
"--- recording to buffer ...".postln;
|
||||||
|
~recbuf = Synth(\recbuf, [\inBus, ~revFXbus1, \bufnum, b], addAction:\addToTail);
|
||||||
|
|
||||||
|
//~dlywrangler.free;
|
||||||
|
~dlywrangler = Synth(\dlywrangler, [\inBus, ~manglebus1], addAction:\addToTail);
|
||||||
|
|
||||||
|
s.sync;
|
||||||
|
|
||||||
|
"--- created FX Synths ...".postln;
|
||||||
|
|
||||||
|
wait(1);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//~recbuf.free
|
||||||
|
|
||||||
|
// clear everything
|
||||||
|
|
||||||
|
Pbindef(\fmP).clear;
|
||||||
|
Pbindef(\fmPt).clear;
|
||||||
|
Pbindef(\fmPq).clear;
|
||||||
|
Pbindef(\fmPe).clear;
|
||||||
|
Pbindef(\fmPb).clear;
|
||||||
|
|
||||||
|
Pbindef(\fmkickP).clear;
|
||||||
|
Pbindef(\phpSnareP).clear;
|
||||||
|
Pbindef(\glcP).clear;
|
||||||
|
|
||||||
|
"--- cleared patterns ...".postln;
|
||||||
|
"--- waiting for 8th bar to start patterns Routine ...\n".postln;
|
||||||
|
|
||||||
|
wait(1);
|
||||||
|
|
||||||
|
Routine({
|
||||||
|
|
||||||
|
"--- start patterns Routine ...".postln;
|
||||||
|
"--- starting FM pattern fmP ...".postln;
|
||||||
|
|
||||||
|
|
||||||
|
Pbindef(\fmP, *[
|
||||||
|
instrument: \fm5,
|
||||||
|
dur:1,
|
||||||
|
degree: 0,
|
||||||
|
octave: 3,
|
||||||
|
i: Pwhite(0.4,0.6),
|
||||||
|
f: Pdup(44, Pseq([4,5,6,7,8,9,10, Prand((4..18), inf)])),
|
||||||
|
outBus: ~revFXbus1,
|
||||||
|
amp: Pseg([0.05,0.3,0.05], 22, \lin, inf),
|
||||||
|
]).play(quant:4);
|
||||||
|
|
||||||
|
~postbeats.();
|
||||||
|
wait(32);
|
||||||
|
|
||||||
|
"--- starting FM pattern fmPt ...".postln;
|
||||||
|
|
||||||
|
Pbindef(\fmPt, *[
|
||||||
|
instrument: \fm5,
|
||||||
|
dur:1.5,
|
||||||
|
degree: 6,
|
||||||
|
octave: 3,
|
||||||
|
i: Pwhite(0.2,0.9),
|
||||||
|
f: Pdup(33, Prand((4..18)/4, inf)),
|
||||||
|
outBus: ~revFXbus1,
|
||||||
|
amp: Pseg([0.05,0.3,0.05], 15, \lin, inf),
|
||||||
|
]).play(quant:4);
|
||||||
|
|
||||||
|
~postbeats.();
|
||||||
|
wait(32);
|
||||||
|
|
||||||
|
"--- starting FM pattern fmPq...".postln;
|
||||||
|
|
||||||
|
Pbindef(\fmPq, *[
|
||||||
|
instrument: \fm5,
|
||||||
|
dur:1/3,
|
||||||
|
degree: 6,
|
||||||
|
rls:1,
|
||||||
|
octave: 5,
|
||||||
|
i: Pwhite(0.4,0.7),
|
||||||
|
f: Pdup(12, Pn(Pshuf([1,2,3,4]*2,4))), //Pdup(18, Prand((4..18)/4, inf)),
|
||||||
|
outBus: ~revFXbus1,
|
||||||
|
amp: Pseg([0.05,0.3,0.05], 29, \lin, inf) * 0.2,
|
||||||
|
]).play(quant:4);
|
||||||
|
|
||||||
|
"--- starting granulator ...".postln;
|
||||||
|
~gran = Synth(\gran, [\amp, 1]);
|
||||||
|
|
||||||
|
~postbeats.();
|
||||||
|
wait(32);
|
||||||
|
|
||||||
|
"--- raising volume - gran amp 7 ...".postln;
|
||||||
|
~gran.set(\amp, 7);
|
||||||
|
|
||||||
|
~postbeats.();
|
||||||
|
wait(40);
|
||||||
|
|
||||||
|
"--- envnoiseP slide in ...".postln;
|
||||||
|
|
||||||
|
Pbindef(\envnoiseP, *[
|
||||||
|
instrument: \envnoise,
|
||||||
|
atk:8,
|
||||||
|
crv:8,
|
||||||
|
dur: Pseq([8]),
|
||||||
|
amp:0.2,
|
||||||
|
bpff: 500,
|
||||||
|
legato: 1
|
||||||
|
]).play(quant:8);
|
||||||
|
|
||||||
|
~postbeats.();
|
||||||
|
wait(8);
|
||||||
|
|
||||||
|
"--- starting FM pattern fmPe and fmPb ...".postln;
|
||||||
|
|
||||||
|
Pbindef(\fmPe, *[
|
||||||
|
instrument: \fm5,
|
||||||
|
dur:1/8,
|
||||||
|
legato: 0.5,
|
||||||
|
rls: Pseq([0.2,0.1,0.1,0.1],inf),
|
||||||
|
degree: 6,
|
||||||
|
octave: 9,
|
||||||
|
i: Pseg([0.4,0.6,0.4], 10, \lin, inf),
|
||||||
|
f: 5.8, //Pdup(64, Prand((4..18)/4, inf)),
|
||||||
|
outBus: ~manglebus1,
|
||||||
|
amp: Pseg([0.05,0.3,0.05], 15, \lin, inf) * 0.05,
|
||||||
|
]).play(quant:4);
|
||||||
|
|
||||||
|
Pbindef(\fmPb, *[
|
||||||
|
instrument: \fm5,
|
||||||
|
dur:Pseq([Rest(1/2),Pn(8)]),
|
||||||
|
degree: 0,
|
||||||
|
octave: 2,
|
||||||
|
rls:10,
|
||||||
|
i: 1,
|
||||||
|
f: 1,
|
||||||
|
outBus: 0,
|
||||||
|
amp: 0.1,
|
||||||
|
]).play(quant:8);
|
||||||
|
|
||||||
|
~postbeats.();
|
||||||
|
wait(32);
|
||||||
|
|
||||||
|
"--- fm pause...".postln;
|
||||||
|
|
||||||
|
~recbuf.free;
|
||||||
|
|
||||||
|
Pbindef(\fmP).stop;
|
||||||
|
Pbindef(\fmPt).stop;
|
||||||
|
Pbindef(\fmPq).stop;
|
||||||
|
|
||||||
|
~postbeats.();
|
||||||
|
wait(16);
|
||||||
|
|
||||||
|
"--- envnoiseP ...".postln;
|
||||||
|
|
||||||
|
Pbindef(\envnoiseP, *[
|
||||||
|
instrument: \envnoise,
|
||||||
|
atk:8,
|
||||||
|
crv:8,
|
||||||
|
dur: Pseq([8]),
|
||||||
|
amp:0.2,
|
||||||
|
bpff: 500,
|
||||||
|
legato: 1
|
||||||
|
]).play(quant:8);
|
||||||
|
|
||||||
|
"--- ~recbuf ...".postln;
|
||||||
|
// restart recording into buffer for granulator
|
||||||
|
~recbuf = Synth(\recbuf, [\inBus, ~revFXbus1, \bufnum, b], addAction:\addToTail);
|
||||||
|
|
||||||
|
~postbeats.();
|
||||||
|
wait(8);
|
||||||
|
|
||||||
|
"--- starting fm+beats ...".postln;
|
||||||
|
|
||||||
|
Pbindef(\fmP, *[
|
||||||
|
f: Pdup(44, Prand((4..18), inf)),
|
||||||
|
amp: Pseg([0.05,0.3,0.05], 22, \lin, inf),
|
||||||
|
]).play(quant:8);
|
||||||
|
Pbindef(\fmPt).play(quant:8);
|
||||||
|
Pbindef(\fmPq).play(quant:8);
|
||||||
|
|
||||||
|
Pbindef(\glcP, *[
|
||||||
|
instrument: \glc,
|
||||||
|
dur:1/8,
|
||||||
|
legato: Pseq([0.3,0.1,0.9], inf),
|
||||||
|
amp: Pseq([0.3,0.1,0.2], inf),
|
||||||
|
outBus: ~manglebus1,
|
||||||
|
manglewet: Pseg([0.001, 0.2, 0.05, 0.5], [8,0], \exp, inf),
|
||||||
|
setmangle: Pfunc({ |ev|
|
||||||
|
s.bind{
|
||||||
|
~dlywrangler.set(\wet, ev.manglewet)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
]).play(quant:8);
|
||||||
|
|
||||||
|
Pbindef(\fmkickP, *[
|
||||||
|
instrument: \fmkick,
|
||||||
|
dur: 2,
|
||||||
|
freq: 100 * Pwhite(0.8,1.3),
|
||||||
|
amp:0.5,
|
||||||
|
rls: Pwhite(0.4,0.7),
|
||||||
|
outBus:0,
|
||||||
|
fxBus: ~manglebus1,
|
||||||
|
fxwet: Pwhite(0.1,0.5),
|
||||||
|
]).play(quant:8);
|
||||||
|
|
||||||
|
~postbeats.();
|
||||||
|
wait(40); // ================= <
|
||||||
|
|
||||||
|
Pbindef(\envnoiseP, *[
|
||||||
|
instrument: \envnoise,
|
||||||
|
atk:4,
|
||||||
|
crv:8,
|
||||||
|
dur: Pseq([Rest(4),4]),
|
||||||
|
amp:0.2,
|
||||||
|
bpff: 2500,
|
||||||
|
legato: 1
|
||||||
|
]).play(quant:4);
|
||||||
|
|
||||||
|
~postbeats.();
|
||||||
|
wait(4);
|
||||||
|
|
||||||
|
|
||||||
|
"--- beats pause ...".postln;
|
||||||
|
|
||||||
|
Pbindef(\fmkickP).stop;
|
||||||
|
Pbindef(\glcP).stop;
|
||||||
|
|
||||||
|
|
||||||
|
"--- return beats on next 8 bar ...".postln;
|
||||||
|
|
||||||
|
Pbindef(\glcP, *[
|
||||||
|
manglewet: Pseg([0.001, 0.3, 0.05, 0.7], [8,0], \exp, inf),
|
||||||
|
]).play(quant:8);
|
||||||
|
|
||||||
|
Pbindef(\fmkickP, *[
|
||||||
|
dur: Pseq([Pn(1,7), 3/4, 1/4,
|
||||||
|
1, 1/2, 3/2, 1, 1, 1, 1, 3/4, 1/4],inf)
|
||||||
|
]).play(quant:8);
|
||||||
|
|
||||||
|
Pbindef(\phpSnareP, *[
|
||||||
|
instrument: 'phpHatSnare',
|
||||||
|
dur: Pseq([ Rest(1), Pn(2)]),
|
||||||
|
rls: Pwhite(0.3,0.6),
|
||||||
|
amp:0.11,
|
||||||
|
bpa: 0,
|
||||||
|
lpa: 3,
|
||||||
|
hpa: 1,
|
||||||
|
legato:0.1,
|
||||||
|
outBus: ~manglebus1
|
||||||
|
]).play(quant:8);
|
||||||
|
|
||||||
|
~postbeats.();
|
||||||
|
wait(28);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
"--- envnoise slidein ...".postln;
|
||||||
|
Pbindef(\envnoiseP, *[
|
||||||
|
instrument: \envnoise,
|
||||||
|
atk:8,
|
||||||
|
crv:12,
|
||||||
|
dur: Pseq([8]),
|
||||||
|
amp:0.2,
|
||||||
|
bpff: 3500,
|
||||||
|
legato: 1
|
||||||
|
]).play(quant:8);
|
||||||
|
|
||||||
|
wait(6);
|
||||||
|
|
||||||
|
"--- beats pause II ...".postln;
|
||||||
|
Pbindef(\fmkickP).stop;
|
||||||
|
Pbindef(\glcP).stop;
|
||||||
|
Pbindef(\phpSnareP).stop;
|
||||||
|
|
||||||
|
~postbeats.();
|
||||||
|
wait(2);
|
||||||
|
|
||||||
|
"--- return beats II on next 8 bar ...".postln;
|
||||||
|
|
||||||
|
Pbindef(\glcP).play(quant:8);
|
||||||
|
Pbindef(\phpSnareP).play(quant:8);
|
||||||
|
|
||||||
|
Pbindef(\fmkickP, *[
|
||||||
|
instrument: \fmkick,
|
||||||
|
dur: Pseq([
|
||||||
|
Pwrand([
|
||||||
|
Pseq([3/4, 4/4, 3/4]),
|
||||||
|
Pseq([3/4, 7/4]),
|
||||||
|
Pseq([1/4, 2/4, 3/4, 4/4]),
|
||||||
|
Pseq([1/4, 1/4, 1/4, 7/4])
|
||||||
|
], [0.7, 0.1, 0.1, 0.1]),
|
||||||
|
Pconst(6/4, Pwrand([1/4, 1/8, 1/2, Pn(1/6,3)], [0.3,0.1,0.5,0.1],inf))
|
||||||
|
], inf),
|
||||||
|
freq: 100 * Pwhite(0.8,1.3),
|
||||||
|
amp:0.4,
|
||||||
|
rls: Pwhite(0.4,0.7),
|
||||||
|
outBus:0,
|
||||||
|
fxBus: ~manglebus1,
|
||||||
|
fxwet: Pwhite(0.1,0.5),
|
||||||
|
|
||||||
|
]).play(quant:8);
|
||||||
|
|
||||||
|
~postbeats.();
|
||||||
|
wait(8);
|
||||||
|
|
||||||
|
|
||||||
|
Pbindef(\envnoiseP, *[
|
||||||
|
instrument: \envnoise,
|
||||||
|
atk:4,
|
||||||
|
crv:8,
|
||||||
|
dur: Pseq([Rest(4),4]),
|
||||||
|
amp:0.2,
|
||||||
|
bpff: 5500,
|
||||||
|
legato: 1
|
||||||
|
]).play(quant:4);
|
||||||
|
|
||||||
|
~postbeats.();
|
||||||
|
wait(7);
|
||||||
|
|
||||||
|
"--- beats pause 3 ...".postln;
|
||||||
|
|
||||||
|
Pbindef(\fmkickP).stop;
|
||||||
|
Pbindef(\glcP).stop;
|
||||||
|
Pbindef(\phpSnareP).stop;
|
||||||
|
|
||||||
|
"--- return beats 3".postln;
|
||||||
|
|
||||||
|
Pbindef(\fmkickP).play(quant:8);
|
||||||
|
Pbindef(\glcP).play(quant:8);
|
||||||
|
Pbindef(\glcP, *[
|
||||||
|
manglewet: Pseg([0.01, 0.5, 0.1, 0.9], [8,0], \exp, inf),
|
||||||
|
]).play(quant:8);
|
||||||
|
Pbindef(\phpSnareP, *[
|
||||||
|
instrument: 'phpHatSnare',
|
||||||
|
dur: Pseq([
|
||||||
|
Rest(1),
|
||||||
|
5/4,
|
||||||
|
Pconst(7/4, Prand([Rest(1/4),1/4,1/2,1/8,1,1/2],inf)),
|
||||||
|
], inf),
|
||||||
|
rls: Pwhite(0.3,0.6),
|
||||||
|
amp:0.1,
|
||||||
|
bpa: 0,
|
||||||
|
lpa: 3,
|
||||||
|
hpa: 1,
|
||||||
|
legato:0.1,
|
||||||
|
outBus: ~manglebus1
|
||||||
|
]).play(quant:8);
|
||||||
|
|
||||||
|
"--- ~gran.set(\amp, 3);".postln;
|
||||||
|
~gran.set(\amp, 3);
|
||||||
|
|
||||||
|
~postbeats.();
|
||||||
|
wait(17);
|
||||||
|
|
||||||
|
"--- ~gran.set(\dist, 1);".postln;
|
||||||
|
~gran.set(\dist, 1);
|
||||||
|
|
||||||
|
~postbeats.();
|
||||||
|
wait(16);
|
||||||
|
|
||||||
|
"--- ~gran.set(\dist, 2);".postln;
|
||||||
|
~gran.set(\dist, 2);
|
||||||
|
|
||||||
|
~postbeats.();
|
||||||
|
wait(16);
|
||||||
|
|
||||||
|
"--- ~gran.set(\dist, 4);".postln;
|
||||||
|
~gran.set(\dist, 4);
|
||||||
|
|
||||||
|
~postbeats.();
|
||||||
|
wait(24);
|
||||||
|
|
||||||
|
"--- envnoise slidein ...".postln;
|
||||||
|
Pbindef(\envnoiseP, *[
|
||||||
|
instrument: \envnoise,
|
||||||
|
atk:16,
|
||||||
|
crv: -3,
|
||||||
|
dur: Pseq([16]),
|
||||||
|
amp:0.1,
|
||||||
|
bpff: 7500,
|
||||||
|
legato: 1
|
||||||
|
]).play(quant:8);
|
||||||
|
|
||||||
|
~postbeats.();
|
||||||
|
wait(16);
|
||||||
|
|
||||||
|
"--- ~gran.set(\dist, 3);".postln;
|
||||||
|
~gran.set(\dist, 3);
|
||||||
|
|
||||||
|
|
||||||
|
"--- stop everything. wait.".postln;
|
||||||
|
|
||||||
|
Pbindef(\fmP).stop;
|
||||||
|
Pbindef(\fmPt).stop;
|
||||||
|
Pbindef(\fmPq).stop;
|
||||||
|
Pbindef(\fmPe).stop;
|
||||||
|
~recbuf.free;
|
||||||
|
|
||||||
|
Pbindef(\fmkickP).stop;
|
||||||
|
Pbindef(\phpSnareP).stop;
|
||||||
|
Pbindef(\glcP).stop;
|
||||||
|
|
||||||
|
~postbeats.();
|
||||||
|
wait(32);
|
||||||
|
|
||||||
|
"--- ~gran.set(\dist, 1);".postln;
|
||||||
|
~gran.set(\dist, 1);
|
||||||
|
|
||||||
|
~postbeats.();
|
||||||
|
wait(24);
|
||||||
|
|
||||||
|
"--- ~gran.set(\amp, 0);".postln;
|
||||||
|
~gran.set(\amp, 0);
|
||||||
|
|
||||||
|
~postbeats.();
|
||||||
|
wait(3);
|
||||||
|
Pbindef(\fmPb).stop;
|
||||||
|
|
||||||
|
~postbeats.();
|
||||||
|
wait(64);
|
||||||
|
|
||||||
|
~postbeats.();
|
||||||
|
// END OF ROUTINE /////////////////////////// ------------------------
|
||||||
|
"<<< end of pattern Routine ---------------------------------.".postln;
|
||||||
|
}).play(quant:8);
|
||||||
|
//"<<< end of primary Routine ---------------------------------.".postln;
|
||||||
|
// reached when pattern Routine starts, in fact.
|
||||||
|
}).play;
|
||||||
|
|
||||||
|
}) // end wait for boot
|
||||||
|
)
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/*
|
||||||
|
PEER PRODUCTION LICENCE
|
||||||
|
(https://civicwise.org/peer-production-licence-_-human-readable-summary/)
|
||||||
|
|
||||||
|
You are free to:
|
||||||
|
Share — copy and redistribute the material in any medium or format
|
||||||
|
Adapt — remix, transform, and build upon the material
|
||||||
|
|
||||||
|
Under the following terms:
|
||||||
|
|
||||||
|
Attribution — You must give appropriate credit, provide a link to the
|
||||||
|
license, and indicate if changes were made. You may do so in any reasonable
|
||||||
|
manner, but not in any way that suggests the licensor endorses you or your
|
||||||
|
use.
|
||||||
|
|
||||||
|
ShareAlike — If you remix, transform, or build upon the material, you must
|
||||||
|
distribute your contributions under the same license as the original.
|
||||||
|
|
||||||
|
Non Capitalist — The commercial exploitation of this work is only allowed to
|
||||||
|
cooperatives, organizations and non-profit groups, to organizations of
|
||||||
|
self-managed workers, and where there are no exploitative relationships. Any
|
||||||
|
surplus or surplus obtained by the exercise of the rights granted by this
|
||||||
|
License on the Work must be distributed by and among the workers.
|
||||||
|
|
||||||
|
Understanding that:
|
||||||
|
|
||||||
|
Disclaimer — Some of these conditions may not apply if permission is
|
||||||
|
obtained from the copyright holder.
|
||||||
|
|
||||||
|
Public Domain — When the work or any of its elements is in the public domain
|
||||||
|
according to the applicable law, this situation will not be affected by the
|
||||||
|
license.
|
||||||
|
|
||||||
|
Other rights — The following rights are not affected by the license in any
|
||||||
|
way:
|
||||||
|
|
||||||
|
The rights derived from legitimate uses or other limitations recognized
|
||||||
|
by law are not affected by the foregoing.
|
||||||
|
|
||||||
|
The moral rights of the author.
|
||||||
|
|
||||||
|
Rights that other people may hold over the work itself or its use, such
|
||||||
|
as image or privacy rights.
|
||||||
|
|
||||||
|
Notice — When reusing or distributing the work, you must make the terms of
|
||||||
|
the license of this work very clear. The best way to do it is to link to
|
||||||
|
this page.
|
||||||
|
|
||||||
|
FULL LICENCE: https://civicwise.org/peer-production-licence/
|
||||||
|
|
||||||
|
*/
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
@ -0,0 +1,304 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
oceamelt.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
(
|
||||||
|
|
||||||
|
Routine({
|
||||||
|
|
||||||
|
"\n\n\n-------------------------------------\n>>> starting...".postln;
|
||||||
|
|
||||||
|
s.latency = 0.1;
|
||||||
|
TempoClock.tempo = 140/120;
|
||||||
|
|
||||||
|
~disdelBus.free;
|
||||||
|
~disdelBus = Bus.audio(s, 2);
|
||||||
|
|
||||||
|
~revBus.free;
|
||||||
|
~revBus = Bus.audio(s,2);
|
||||||
|
|
||||||
|
SynthDef(\fm4, {
|
||||||
|
arg gate=1, outBus=0, amp=0.1, freq=160,
|
||||||
|
atk=0, rls=0, f=9, i=0.9, noiseamt=1;
|
||||||
|
var c, m, d, snd, env, mod, modp;
|
||||||
|
|
||||||
|
c = freq; // c = carrier frequency
|
||||||
|
m = c * f; // f = ratio (factor) between carrier freq and mod freq
|
||||||
|
d = m / i; // index = ratio between depth/distance and mod freq
|
||||||
|
|
||||||
|
c = [c, c * 1.4, c * 2.6, c / 1.95];
|
||||||
|
|
||||||
|
mod = SinOsc.ar( SinOsc.ar(m, mul:d), mul: d);
|
||||||
|
modp = LFPulse.ar( SinOsc.ar(m, mul:d), mul: d);
|
||||||
|
|
||||||
|
// basic FM synthesis:
|
||||||
|
snd = SinOsc.ar( c + mod );
|
||||||
|
|
||||||
|
// but let's add more oscilators with similary modulated frequencies
|
||||||
|
snd = snd + ( LFPulse.ar(c + mod * LFNoise1.kr(7/6).range(0.99,1.01) ) * LFNoise1.ar(1/3).range(0.8,1) );
|
||||||
|
snd = snd + ( LFTri.ar(c + modp * LFNoise1.kr(7/6).range(0.99,1.01) ) * LFNoise1.ar(1/3).range(0.8,1) );
|
||||||
|
|
||||||
|
snd = Splay.ar(snd, center:LFNoise1.kr(1/10));
|
||||||
|
snd = HPF.ar(
|
||||||
|
LPF.ar(
|
||||||
|
WhiteNoise.ar(2) + Dust2.ar(300, mul:10),
|
||||||
|
EnvGen.ar(Env.perc(0, 0.05)).exprange(Rand(500,20000),200)
|
||||||
|
//* Rand(500,15000)
|
||||||
|
//15500
|
||||||
|
),
|
||||||
|
100
|
||||||
|
) * noiseamt + snd;
|
||||||
|
snd = LeakDC.ar(snd);
|
||||||
|
env = EnvGen.ar(Env.asr(atk, 1, rls, 0), gate, doneAction:2);
|
||||||
|
snd = snd * env * amp;
|
||||||
|
|
||||||
|
Out.ar(outBus, snd);
|
||||||
|
}).add;
|
||||||
|
|
||||||
|
|
||||||
|
SynthDef(\disdel, {
|
||||||
|
arg inBus, outBus=0, amp=0.5;
|
||||||
|
var in, snd, local;
|
||||||
|
|
||||||
|
in = In.ar(inBus, 2);
|
||||||
|
|
||||||
|
snd = in;
|
||||||
|
|
||||||
|
//snd = LocalIn.ar(2) + snd;
|
||||||
|
snd = snd[1] + JPverb.ar(snd[0], LFNoise0.kr(1/4).range(1,3));
|
||||||
|
snd = snd[0] + JPverb.ar(snd[1], LFNoise0.kr(1/4).range(1,3));
|
||||||
|
snd = Splay.ar(snd);
|
||||||
|
|
||||||
|
snd[0] = DelayN.ar(snd[0], 3, LFNoise0.kr(1/4).range(0.5,3));
|
||||||
|
snd[0] = Decimator.ar(snd[0], 6000, 11);
|
||||||
|
snd[0] = snd[0] + DelayN.ar(snd[0], 3, LFNoise0.kr(1/4).range(0.5,3));
|
||||||
|
snd[0] = Decimator.ar(snd[0], 9000, 11);
|
||||||
|
|
||||||
|
snd[1] = DelayN.ar(snd[1], 3, LFNoise0.kr(1/4).range(0.5,3));
|
||||||
|
snd[1] = Decimator.ar(snd[1], 12000, 14);
|
||||||
|
snd[1] = snd[0] + DelayN.ar(snd[1], 3, LFNoise0.kr(1/4).range(0.5,3));
|
||||||
|
snd[1] = Decimator.ar(snd[1], 7000, 14);
|
||||||
|
//SndOut.ar(snd.reverse, 0.4);
|
||||||
|
|
||||||
|
snd = snd * LFPulse.ar(LFNoise0.kr([1,1]).range(8,16)).range(LFNoise1.kr(0.2,1),1);
|
||||||
|
|
||||||
|
snd = snd * amp;
|
||||||
|
|
||||||
|
Out.ar(inBus, snd);
|
||||||
|
Out.ar(outBus, snd);
|
||||||
|
}).add;
|
||||||
|
|
||||||
|
|
||||||
|
SynthDef(\rev, {
|
||||||
|
arg inBus, outBus=0, amp=0.7;
|
||||||
|
var snd;
|
||||||
|
|
||||||
|
snd = In.ar(inBus, 2);
|
||||||
|
|
||||||
|
snd = snd + JPverb.ar(snd, 10);
|
||||||
|
|
||||||
|
snd = snd * amp;
|
||||||
|
Out.ar(inBus, snd);
|
||||||
|
Out.ar(outBus, snd);
|
||||||
|
}).add;
|
||||||
|
|
||||||
|
SynthDef(\gran, {
|
||||||
|
arg buf;
|
||||||
|
var snd;
|
||||||
|
|
||||||
|
snd = GrainBuf.ar(2,
|
||||||
|
trigger: Impulse.ar(LFNoise1.kr(1/10!3).exprange(80, 180) * LFNoise0.ar(100).range(0.7,1.1)),
|
||||||
|
dur: LFNoise1.ar(1).range(0.08,0.1),
|
||||||
|
sndbuf: buf,
|
||||||
|
rate:[1,1/2,2],
|
||||||
|
pos:LFNoise1.kr(1/40!3).range(0,1),
|
||||||
|
pan: LFNoise0.ar(100).range(-1,1)
|
||||||
|
);
|
||||||
|
snd = LPF.ar(snd, LFNoise1.kr(1/10!3).exprange(500,10000));
|
||||||
|
snd = Mix(snd);
|
||||||
|
snd = AnalogTape.ar(snd, 1, 1, Lag2.kr(\dist.kr(0.1), 20));
|
||||||
|
snd = JPverb.ar(snd, LFNoise1.kr(1/10!2).range(1,10)) + snd;
|
||||||
|
snd = Limiter.ar( Mix(snd * 0.3), 0.8 );
|
||||||
|
snd = snd * Env.circle([0.5,0.3,0.5],90,\cub).kr;
|
||||||
|
snd = snd * Lag2.kr(\amp.kr(0.5), \lagamp.kr(20));
|
||||||
|
|
||||||
|
Out.ar(0, snd);
|
||||||
|
}).add;
|
||||||
|
|
||||||
|
SynthDef(\recbuf, {
|
||||||
|
arg inBus, bufnum, run=1;
|
||||||
|
|
||||||
|
RecordBuf.ar(
|
||||||
|
In.ar(
|
||||||
|
inBus, 1),
|
||||||
|
bufnum, run: run);
|
||||||
|
}).add;
|
||||||
|
|
||||||
|
Pbindef(\fm4p, *[
|
||||||
|
instrument: \fm4,
|
||||||
|
dur:Pxrand([
|
||||||
|
Pseq([2, Pn(1,30), 4, Rest(28)] / 16, 4),
|
||||||
|
Pseq([Pn(2,8), Pn(1,16), 4, Rest(28)] / 16, 4),
|
||||||
|
Pseq([Pn(2,8), Pn(1,16), 4, Rest(20), Pn(4,2)] / 16, 4),
|
||||||
|
Pseq([2, Pn(1,30), 4, Rest(28), Pn(2,16)] / 16, 4),
|
||||||
|
Pseq([4, 2, 2, Pn(1,24), 4, Rest(28)] / 16, 4),
|
||||||
|
Pseq([4, 2, 2, Pn(1,24), 8, Rest(24)] / 16, 4),
|
||||||
|
Pseq([4, 2, 2, Pn(1,24), Pn(3,4), Rest(20)] / 16, 4),
|
||||||
|
Pseq([4, 2, 2, Pn(1,24), Pn(4,2), Rest(24)] / 16, 4)
|
||||||
|
], inf),
|
||||||
|
i:Prand((1..10)*0.1, inf),
|
||||||
|
f:Prand((1..10), inf),
|
||||||
|
legato:Pwhite(0.1,0.5),
|
||||||
|
atk:Pwhite(0,0.01),
|
||||||
|
rls:Pwhite(0,0.001),
|
||||||
|
octave:4,
|
||||||
|
amp:0.02,
|
||||||
|
outBus: 0,
|
||||||
|
]);
|
||||||
|
|
||||||
|
Pbindef(\fm4p2, *[
|
||||||
|
instrument: \fm4,
|
||||||
|
dur:2,
|
||||||
|
i:1,//Prand((1..10)*0.1, inf),
|
||||||
|
f:1, //Prand((1..10), inf),
|
||||||
|
//f:5,
|
||||||
|
legato:0.1,
|
||||||
|
atk:0.01,
|
||||||
|
rls:1,
|
||||||
|
octave:3,
|
||||||
|
degree: 0,
|
||||||
|
amp:0.02,
|
||||||
|
noiseamt:0,
|
||||||
|
outBus: ~revBus,//0, //Pwrand([0, ~disDel], [0.95,0.05], inf)
|
||||||
|
]);
|
||||||
|
|
||||||
|
~buf_b.free;
|
||||||
|
~buf_b = Buffer.alloc(s, s.sampleRate * 10, 1);
|
||||||
|
~buf_c.free;
|
||||||
|
~buf_c = Buffer.alloc(s, s.sampleRate * 10, 1);
|
||||||
|
|
||||||
|
1.wait;
|
||||||
|
|
||||||
|
~disdel = Synth(\disdel, [\inBus, ~disdelBus, \amp, 0.2]);
|
||||||
|
~recbuf = Synth(\recbuf, [\inBus, ~disdelBus, \bufnum, ~buf_b], addAction:\addToTail);
|
||||||
|
~gran = Synth(\gran, [\bufnum, ~buf_b, \amp, 0], addAction:\addToTail);
|
||||||
|
|
||||||
|
0.1.wait;
|
||||||
|
|
||||||
|
~reverb = Synth(\rev, [\inBus, ~revBus]);
|
||||||
|
~recbufc = Synth(\recbuf, [\inBus, ~revBus, \bufnum, ~buf_c], addAction:\addToTail);
|
||||||
|
~gran_c = Synth(\gran, [\buf, ~buf_c, \amp, 0], addAction:\addToTail);
|
||||||
|
|
||||||
|
// =========================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
">>> starting timeline, waiting on 4bar border ...".postln;
|
||||||
|
|
||||||
|
Routine({
|
||||||
|
|
||||||
|
Pbindef(\fm4p, *[outBus: 0]).play;
|
||||||
|
postln(TempoClock.beats.value);
|
||||||
|
|
||||||
|
16.wait;
|
||||||
|
postln(TempoClock.beats.value);
|
||||||
|
|
||||||
|
Pbindef(\fm4p, *[outBus: Pwrand([0, ~disdelBus], [0.7,0.3], inf),]).play;
|
||||||
|
|
||||||
|
16.wait;
|
||||||
|
|
||||||
|
postln(TempoClock.beats.value.mod(8));
|
||||||
|
~gran.set(\lagamp, 32, \amp, 8);
|
||||||
|
|
||||||
|
32.wait;
|
||||||
|
|
||||||
|
postln(TempoClock.beats.value.mod(8));
|
||||||
|
">>> gran amp set 0".postln;
|
||||||
|
s.bind({~gran.set(\lagamp, 0, \amp, 0);});
|
||||||
|
|
||||||
|
2.wait;
|
||||||
|
|
||||||
|
">>> gran amp set 16, lag 32".postln;
|
||||||
|
|
||||||
|
~gran.set(\lagamp, 32, \amp, 12);
|
||||||
|
|
||||||
|
32.wait;
|
||||||
|
|
||||||
|
postln(TempoClock.beats.value.mod(8));
|
||||||
|
">>> gran amp set 0".postln;
|
||||||
|
Pbindef(\fm4p2).play(quant:1);
|
||||||
|
s.bind({~gran.set(\lagamp, 0, \amp, 0) });
|
||||||
|
|
||||||
|
2.wait;
|
||||||
|
|
||||||
|
">>> gran + gran_c fadein".postln;
|
||||||
|
~gran.set(\lagamp, 32, \amp, 16);
|
||||||
|
~gran_c.set(\lagamp, 32, \amp, 3);
|
||||||
|
|
||||||
|
32.wait;
|
||||||
|
|
||||||
|
">>> gran amp set 0".postln;
|
||||||
|
s.bind({~gran.set(\lagamp, 0, \amp, 0)});
|
||||||
|
s.bind({~gran_c.set(\lagamp, 0, \amp, 0)});
|
||||||
|
|
||||||
|
2.wait;
|
||||||
|
|
||||||
|
">>> gran + gran_c fadein".postln;
|
||||||
|
~gran.set(\lagamp, 32, \amp, 16);
|
||||||
|
~gran_c.set(\lagamp, 32, \amp, 4);
|
||||||
|
|
||||||
|
32.wait;
|
||||||
|
|
||||||
|
">>> gran amp set 0".postln;
|
||||||
|
s.bind({~gran.set(\lagamp, 0, \amp, 0)});
|
||||||
|
s.bind({~gran_c.set(\lagamp, 0, \amp, 0)});
|
||||||
|
|
||||||
|
2.wait;
|
||||||
|
|
||||||
|
">>> gran + gran_c fadein".postln;
|
||||||
|
~gran.set(\lagamp, 32, \amp, 16);
|
||||||
|
~gran_c.set(\lagamp, 32, \amp, 4);
|
||||||
|
|
||||||
|
64.wait;
|
||||||
|
">>> stop recording. stop patterns.".postln;
|
||||||
|
s.bind({~gran.set(\lagamp, 0, \amp, 0)});
|
||||||
|
s.bind({~gran_c.set(\lagamp, 0, \amp, 1)});
|
||||||
|
~recbuf.set(\run, 0); // stop recording
|
||||||
|
~recbufc.set(\run, 0); // stop recording
|
||||||
|
Pbindef(\fm4p).stop;
|
||||||
|
Pbindef(\fm4p2).stop;
|
||||||
|
2.wait;
|
||||||
|
~gran_c.set(\lagamp, 32, \amp, 8);
|
||||||
|
|
||||||
|
128.wait;
|
||||||
|
~gran.set(\lagamp, 64, \amp, 16);
|
||||||
|
64.wait;
|
||||||
|
~gran.set(\lagamp, 64, \amp, 0);
|
||||||
|
32.wait;
|
||||||
|
|
||||||
|
Pbindef(\fm4p2).play;
|
||||||
|
s.bind({~gran_c.set(\lagamp, 0, \amp, 4)});
|
||||||
|
|
||||||
|
32.wait;
|
||||||
|
|
||||||
|
~gran_c.set(\lagamp, 32, \amp, 2);
|
||||||
|
|
||||||
|
64.wait;
|
||||||
|
|
||||||
|
Pbindef(\fm4p2).stop;
|
||||||
|
|
||||||
|
~gran_c.set(\lagamp, 16, \amp, 0);
|
||||||
|
|
||||||
|
|
||||||
|
}).play(quant:4);
|
||||||
|
|
||||||
|
}).play;
|
||||||
|
)
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
|
@ -0,0 +1,131 @@
|
||||||
|
(
|
||||||
|
/*
|
||||||
|
|
||||||
|
carbdiox.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
s.waitForBoot({
|
||||||
|
|
||||||
|
Routine({
|
||||||
|
|
||||||
|
// load synthdefs
|
||||||
|
SynthDef(\fm4, {
|
||||||
|
arg gate=1, outBus=0, amp=0.1, freq=160,
|
||||||
|
atk=5, rls=5, f=9, i=0.9;
|
||||||
|
var c, m, d, snd, env, mod, modp;
|
||||||
|
|
||||||
|
c = freq; // c = carrier frequency
|
||||||
|
m = c * f; // f = ratio (factor) between carrier freq and mod freq
|
||||||
|
d = m / i; // index = ratio between depth/distance and mod freq
|
||||||
|
|
||||||
|
c = [c, c * 2, c / 2];
|
||||||
|
|
||||||
|
mod = SinOsc.ar( SinOsc.ar(m, mul:d), mul: d);
|
||||||
|
modp = LFPulse.ar( SinOsc.ar(m, mul:d), mul: d);
|
||||||
|
|
||||||
|
// basic FM synthesis:
|
||||||
|
snd = SinOsc.ar( c + mod );
|
||||||
|
|
||||||
|
// but let's add more oscilators with similary modulated frequencies
|
||||||
|
snd = snd + ( LFPulse.ar(c + mod * LFNoise1.kr(1).range(0.99,1.05) ) * LFNoise1.ar(1/3).range(0.8,1) );
|
||||||
|
snd = snd + ( LFTri.ar(c + modp * LFNoise1.kr(1).range(0.99,1.05) ) * LFNoise1.ar(1/3).range(0.8,1) );
|
||||||
|
|
||||||
|
snd = Splay.ar(snd, center:LFNoise1.kr(1/10));
|
||||||
|
snd = LeakDC.ar(snd);
|
||||||
|
env = EnvGen.ar(Env.asr(atk, 1, rls, 0), gate, doneAction:2);
|
||||||
|
snd = snd * env * amp;
|
||||||
|
|
||||||
|
Out.ar(outBus, snd);
|
||||||
|
}).add;
|
||||||
|
|
||||||
|
// reverb synthdef
|
||||||
|
SynthDef(\revfx, { |inBus, outBus = 0, wet = 0.5, amp = 0.2|
|
||||||
|
var snd, rev;
|
||||||
|
|
||||||
|
snd = In.ar(inBus, 2);
|
||||||
|
|
||||||
|
snd = AnalogTape.ar(snd,
|
||||||
|
LFNoise1.kr(1/5).range(0.5,1),
|
||||||
|
LFNoise1.kr(1/5).range(0.5,1),
|
||||||
|
LFNoise1.kr(1/5).range(0.5,1) );
|
||||||
|
snd = LPF.ar(snd, LFNoise1.kr(1/30).exprange(500,20000));
|
||||||
|
rev = Greyhole.ar(snd, [1.4,2.05], feedback:0.5, modDepth:0.6, modFreq: 0.5) * wet + snd;
|
||||||
|
rev = rev + JPverb.ar(rev, 20, 0, 5);
|
||||||
|
rev = Splay.ar(rev);
|
||||||
|
rev = rev * amp;
|
||||||
|
|
||||||
|
Out.ar(outBus, rev);
|
||||||
|
}).add;
|
||||||
|
|
||||||
|
s.sync;
|
||||||
|
|
||||||
|
~fxBus1.free; ~fxBus1 = Bus.audio(s, 2);
|
||||||
|
~fxBus2.free; ~fxBus2 = Bus.audio(s, 2);
|
||||||
|
~fxBus3.free; ~fxBus3 = Bus.audio(s, 2);
|
||||||
|
|
||||||
|
1.wait;
|
||||||
|
|
||||||
|
//~reverb1.free;
|
||||||
|
~reverb1 = Synth(\revfx, [\inBus, ~fxBus1], addAction:\addToTail);
|
||||||
|
//~reverb2.free;
|
||||||
|
~reverb2 = Synth(\revfx, [\inBus, ~fxBus2], addAction:\addToTail);
|
||||||
|
//~reverb3.free;
|
||||||
|
~reverb3 = Synth(\revfx, [\inBus, ~fxBus3], addAction:\addToTail);
|
||||||
|
|
||||||
|
~droneP = Pbind(*[
|
||||||
|
instrument: \fm4,
|
||||||
|
legato:1,
|
||||||
|
atk:Pseq([40, Pn(20,7)]),
|
||||||
|
rls:Pseq([Pn(20,7), 0]),
|
||||||
|
i:Pwhite(0.5,1),
|
||||||
|
f:Pseq((1..5).mirror1, inf),
|
||||||
|
octave: Pdup(3, Pseq([4, [4,5], 4])),
|
||||||
|
degree:-3,
|
||||||
|
amp: 0.5,
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
1.wait;
|
||||||
|
|
||||||
|
// play it all here:
|
||||||
|
Routine({
|
||||||
|
|
||||||
|
~droneP1 = Pbindf(~droneP, *[ outBus: ~fxBus1, dur:Pseq([Pn(60,7), 60]),
|
||||||
|
postln: Pfunc({|ev|
|
||||||
|
postln(
|
||||||
|
"drone 1 ~ dur:" ++ ev.dur +
|
||||||
|
"atk:" ++ ev.atk + "rls:" ++ ev.rls +
|
||||||
|
"f:" ++ ev.f + "i:" ++ ev.i)
|
||||||
|
})] ).play;
|
||||||
|
|
||||||
|
20.wait;
|
||||||
|
|
||||||
|
~droneP2 = Pbindf(~droneP, *[ outBus: ~fxBus2, dur:Pseq([Pn(60,7), 40]),
|
||||||
|
postln: Pfunc({|ev|
|
||||||
|
postln(
|
||||||
|
"drone 2 ~ dur:" ++ ev.dur +
|
||||||
|
"atk:" ++ ev.atk + "rls:" ++ ev.rls +
|
||||||
|
"f:" ++ ev.f + "i:" ++ ev.i)
|
||||||
|
})] ).play;
|
||||||
|
|
||||||
|
20.wait;
|
||||||
|
|
||||||
|
~droneP3 = Pbindf(~droneP, *[ outBus: ~fxBus3, dur:Pseq([Pn(60,7), 20]),
|
||||||
|
postln: Pfunc({|ev|
|
||||||
|
postln(
|
||||||
|
"drone 3 ~ dur:" ++ ev.dur +
|
||||||
|
"atk:" ++ ev.atk + "rls:" ++ ev.rls +
|
||||||
|
"f:" ++ ev.f + "i:" ++ ev.i)
|
||||||
|
})] ).play;
|
||||||
|
|
||||||
|
|
||||||
|
}).play
|
||||||
|
}).play // end of Routine
|
||||||
|
}) // end of wait for boot.
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
x=(1..5);x++x.reverse
|
||||||
|
|
||||||
|
(1..5).mirror1
|
Loading…
Reference in New Issue