«SELFSTEP» by Alexander Zhagun-Linnik
on 16 Mar'18 13:19 ina simple self-playing piece with generative patterning
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
(
/**
* SELFSTEP by Alexander Zhagun-Linnik, 2018
* a simple self-playing piece with generative patterning
**/
{
var scale = Scale.harmonicMinor;
var time = 1.5; // beat length in seconds multiplied by 2
// define synths
SynthDef(\pls, {arg freq=220, out=0, amp=0.7, res=0.5;
var sig, env;
sig = LFPulse.ar(Line.ar(freq, freq/4, Rand(0.01, 0.1)), 0, Rand(0.01, 0.99), amp);
sig = RLPF.ar(sig, freq*5*Line.kr(1, 0, Rand(0.1, 0.9)), res);
env = Env.perc(0.001, Rand(0.1, 0.8)).kr(2);
sig = (sig * env * 2).softclip;
sig = Pan2.ar(sig, Rand(-0.5, 0.5));
Out.ar(out, sig);
}).add;
SynthDef(\kck, {arg freq=220, out=0, amp=0.9;
var sig, env;
sig = SinOsc.ar(Line.ar(freq, freq/4, Rand(0.01, 0.1)), 0, 0.5, amp);
sig = RLPF.ar(sig, freq*8*Line.kr(1, 0, Rand(0.01, 0.3)));
env = Env.perc(0.001, Rand(0.01, 0.5), 0.5).kr(2);
sig = (sig * env * 4).softclip;
sig = Pan2.ar(sig, Rand(-0.3, 0.3));
Out.ar(out, sig);
}).add;
SynthDef(\sin, {arg freq=110, out=0, amp=0.9, gate=1;
var sig;
sig = SinOsc.ar(freq, 0, amp)*Env.adsr.kr(2, gate);
sig = RHPF.ar(sig, LFDNoise3.ar(Rand(0.01, 16), freq).abs, LFDNoise3.ar(Rand(0.01, 3), 1).abs)*0.1;
sig = Pan2.ar(sig, Rand(-0.9, 0.9)).softclip;
Out.ar(out, sig);
}).add;
SynthDef(\snr, {arg freq=220, out=0, amp=1.0;
var sig, env;
sig = WhiteNoise.ar(1);
sig = RLPF.ar(sig, freq*6*Line.ar(1, 0, Rand(0.01, 0.3)), Rand(0.4, 0.6));
env = Env.perc(0.001, Rand(0.01, 0.2)).kr(2);
sig = (sig * env * amp * 8).softclip;
sig = Pan2.ar(sig, Rand(-0.5, 0.5));
Out.ar(out, sig);
}).add;
SynthDef(\hgh, {arg freq=220, out=0, amp=1.0, res=0.5;
var sig, env;
sig = WhiteNoise.ar(1);
sig = RHPF.ar(sig, freq*40*Line.ar(0.5, 1, Rand(0.01, 0.1)), res);
env = Env.perc(0.001, Rand(0.01, 0.1)).kr(2);
sig = (sig * env * amp * 2).softclip;
sig = Pan2.ar(sig, Rand(-0.7, 0.7));
Out.ar(out, sig);
}).add;
s.sync; // wait for server to load synthdefs
// define patterns...
Ppar([
Pbind(
\instrument, \kck,
\dur, Prand([time/2, time/2, time/2, time/2, time/4, time/8], inf),
\scale, scale,
\degree, Pbrown(0, 8, Prand([1, 2], inf)),
\octave, 4,
),
Pbind(
\instrument, \pls,
\dur, Prand([time/8, time/4], inf),
\scale, scale,
\degree, Pbrown(0, 12, Prand([1, 2, 3], inf)),
\octave, 4,
\res, Pfunc({(SystemClock.seconds*0.03).sin.abs})
),
Pbind(
\instrument, \pls,
\dur, Prand([time/2, time, time/4, time/8], inf),
\scale, scale,
\degree, Pbrown(0, 12, Prand([1, 2, 3, 4, 5], inf)),
\octave, 5,
\res, Pfunc({(SystemClock.seconds*0.5).sin.abs})
),
Pbind(
\instrument, \sin,
\dur, Prand([1, 2, 4, 8], inf),
\scale, scale,
\degree, Pbrown(0, 12, Prand([1, 2, 3, 4, 5], inf)),
\octave, 5,
\amp, Pfunc({0.3.rand})
),
Pbind(
\instrument, \sin,
\dur, Prand([1, 2, 4, 8], inf),
\scale, scale,
\degree, Pbrown(0, 12, Prand([1, 2, 3, 4, 5], inf)),
\octave, 5,
\amp, Pfunc({0.3.rand})
),
Pbind(
\instrument, \snr,
\dur, Prand([time, time, time, time, time/8, time/4], inf),
\scale, scale,
\degree, Pbrown(0, 12, Prand([1, 2, 3], inf)),
\octave, 5,
),
Pbind(
\instrument, \hgh,
\dur, Prand([time/8], inf),
\scale, scale,
\degree, Prand(Array.fill(8, {arg i;i}), inf),
\octave, Prand(Array.fill(6, {arg i;i}), inf),
\res, Pfunc({(SystemClock.seconds*0.3).sin.abs}),
)
]).play; // ...and start playing
}.fork;
)
reception
Nice. Line 31 I changed to PMOsc. That sings a bit more :)