( /* __ ___ _ __ ___ __ _ ___ ___ ___ _ _ __ / /\ | |_) | |_/ / / | | \ __ / /\ | |\/| / / \ | |_) | |_) | |_| | | / /` /_/--\ |_| \ |_| \ /_/ |_|_/ /_/) /_/--\ |_| | \_\_/ |_| \ |_| |_| | |_| \_\_, by Luka Prinčič. https://lukaprincic.si LICENCE? Oh whatever, just take what you need from it, learn, create, publish. A lot of what's in here has been taken and learned from others and reworked in one way or another. For the sake of ___, it's copyright Luka Prinčič, released under GNU GPL licence and/or Peer Production Licence To run this album, you need SuperCollider (3.11 at the time of writing) and SC3-plugins: https://supercollider.github.io/ https://supercollider.github.io/sc3-plugins/ Once installed, open this file (it needs to have .scd extension not .txt) in SCIDE - SuperCollider code editor (development environment) and choose 'Evaluate file' from 'Language' menu. Thank you for listening! Recording of this album is available via Kamizdat record label under conditions of Creative Commons BY-SA licence. */ // ----------------------------------------------------------------------------------- // before boot, raise memory? #[\internal, \local].do { |s| s = Server.perform(s); s.options.memSize = 2097152; // 2 gigs }; Server.default.waitForBoot { fork { ">>> THIS IS THE START, MY FRIEND".postln; 0.1.wait; // prep buses and FX "--- prepping bussess ...".postln; ~mainOut.free; ~mainOut = Bus.audio(s,2); ~reverBus.free; ~reverBus = Bus.audio(s, 2); ~wranglerBus.free; ~wranglerBus = Bus.audio(s,2); 0.1.wait; // FX synthdefs "--- loading synthdefs for FX...".postln; SynthDef(\GreyholeVerb, { arg inBus, outBus, revWet=1, feedback = 0.5, lag = 10, dtime = 3, size = 4, diff = 8 ; var snd = In.ar(inBus, 2); var reverb = Greyhole.ar(snd, dtime, size: size, diff: diff, feedback: feedback); revWet = Lag.kr(revWet, lag); snd = snd + (reverb * revWet) * 0.5; Out.ar(outBus, snd); }).add; SynthDef(\dlywrangler, { arg out=0, in, wet=0.1, wet2=0.4; var snd, dly2; snd = In.ar(in,2); dly2 = CombN.ar(HPF.ar(snd,300), 1, [3/8,5/8] * LFNoise1.kr(0.4).range(0.98,1.02), 6, mul: LFNoise1.kr(0.1).range(0.4,0.1) * 2 * wet2); snd = CombN.ar(snd, 1, Lag.ar(LFNoise0.ar(1).range(0.01,0.1),0.1), 3, mul:wet) + snd; snd = Limiter.ar(snd, 0.8); snd = snd + dly2; Out.ar(out, snd); }).add; SynthDef(\mainOutFx, { arg inBus, amp=1, lag=0.5, thresh=0.8, outBus; var input, snd; input = In.ar(inBus, 2); snd = Limiter.ar(input, thresh); amp = VarLag.kr(amp+0.000001, lag, 0, \cub) - 0.000001; snd = snd * amp; snd = snd.softclip; Out.ar(outBus, snd); }).add; 0.1.wait; // effects "--- running effects ...".postln; //~greyholeVerb.free; ~greyholeVerb = Synth(\GreyholeVerb, [\inBus, ~reverBus, \outBus, ~mainOut, \revWet, 1], addAction:\addToTail); //~dlywrang1.free; ~dlywrang1 = Synth("dlywrangler", [\out, ~mainOut, \in, ~wranglerBus], addAction:\addToTail); //~mainOutFx.free; ~mainOutFx = Synth(\mainOutFx, [\inBus, ~mainOut, \outBus, 0], addAction:\addToTail); // --------------------------------------------------------------------------------- "*** setup done. onto the timeline! ...".postln; 1.wait; //~greyholeVerb.set(\revWet, 0.4); ~greyholeVerb.set(*[revWet:0.2, feedback:0.7, lag:10, dtime:0.1, size:5, diff:0.707 ]); // darksaw "--- dark saw synthdef...".postln; SynthDef(\softSaw, { arg out = 0, freq = 40, oscdetune = 0.1, amp = 1, pan = 0, gate = 1, attackTime = 0.1, susLevel = 1.0, releaseTime = 1.0, gainBus; var env, snd; oscdetune = oscdetune * 0.1; amp = amp * 0.4; env = Linen.kr(gate, attackTime, susLevel, releaseTime, doneAction:2); snd = VarSaw.ar( freq: [freq, freq * (1.003 + oscdetune)], width: SinOsc.kr(0.01,0.2).range(0.05,0.095)); snd = snd + VarSaw.ar( freq: [(freq*2 * (1.001 - oscdetune)),(freq*2 * (1 + oscdetune))], width: SinOsc.kr(0.06,0.8).range(0.2,0.8)); snd = Balance2.ar(snd.at(0), snd.at(1), pos: pan); snd = snd * amp * env * In.kr(gainBus,1); OffsetOut.ar(out, snd); }).add; ~softSawAmpBus.free; ~softSawAmpBus = Bus.control(s,1); ~softSawAmpBus.set(1); ~softSawAmpBusLiner = SynthDef(\linexamp0, { |outBus, lag, val| Out.kr(outBus, VarLag.kr(val+0.0001, lag, 0, \cub) - 0.0001) }).play(s, [outBus: ~softSawAmpBus, lag: 10, val:0]); wait(0.5); "--- be back lighter...".postln; // ----------------------------------------------- // be back lighter // synthdef SynthDef(\param, { arg freq = 100, sustain, amp, out=0; var sig; sig = LFPar.ar(freq: [freq, freq*2.02]); sig = sig * [1,0.2]; sig = (sig * 4).softclip * 0.8; //sig = LPF.ar(HPF.ar(sig, 150), 3000); sig = LPF.ar(sig, (freq * 3).min(20000)); sig = sig * EnvGen.kr(Env.perc(0, sustain, 0.5), doneAction:2) * amp; sig = Splay.ar(sig, Rand(0,0.5), 1, Rand(-0.5,0.5)); Out.ar(out, sig); }).add; 0.2.wait; //set main out gain to 0 ~mainOutFx.set(\lag, 0, \amp, 0); 0.2.wait; // start playing starting pattern Pbindef(\prand, \instrument, \param, \midinote, Prout({ var tone0, tone1, tone2, interval, freq0, delta; loop { tone0 = 0; //rrand(0,11); interval = 2; tone1 = Scale.minor(\pythagorean).at(tone0) + [0,12].choose + 0.1; tone2 = Scale.minor(\pythagorean).at(tone0 + interval) + [0,12].choose; freq0 = [tone1,tone2] + 52; freq0.yield; } }), \dur, Prand([1,2,4,8,12,16,4,6,8], inf) / 20, \amp, 1.2, \sustain, 0.2, \out, ~reverBus ).play; " . 1.0".postln; // fade in: ~mainOutFx.set(\lag, 10, \amp, 1); 30.wait; ~greyholeVerb.set(*[revWet:0.4, feedback:0.7, lag:10, dtime:0.1, size:5, diff:0.707 ]); Pbindef(\prand, \midinote, Prout({ var tone0, tone1, tone2, interval, freq0, delta; loop { tone0 = 0; //rrand(0,11); interval = rrand(2,4); tone1 = Scale.minor(\pythagorean).at(tone0) + [0,12].choose + 0.1; tone2 = Scale.minor(\pythagorean).at(tone0 + interval) + [0,12].choose; freq0 = [tone1,tone2] + 52; freq0.yield; } }), // - Pstutter(4, Prand([0,1] * 12,inf)), \sustain, Prand((2..4)/10,inf), ); " . 1.1 - interval rrand 2-4".postln; 30.wait; // -- Pbindef(\prand, \midinote, Prout({ var tone0, tone1, tone2, interval, freq0, delta; loop { tone0 = [0,2,4,6].choose; //rrand(0,11); interval = rrand(2,4); tone1 = Scale.minor(\pythagorean).at(tone0) + [0,12,24].choose + 0.1; tone2 = Scale.minor(\pythagorean).at(tone0 + interval) + [0,12,24].choose; freq0 = [tone1,tone2] + 52; freq0.yield; } }) - Pstutter(4, Prand([0,1] * 12,inf)), \sustain, Prand((4..6)/10,inf), ); " . 1.2 [0,2,4,6].choose".postln; 1.wait; "--- softdarksaw pattern...".postln; Pbindef(\sawp0, \instrument, \softSaw, \dur, 10, \attackTime, 5, \releaseTime,5, \legato,1, \degree, Pseq([ [-2,3,11,20], [-2,5,7,21] ],inf), \octave, 3, \amp, [1,0.5,0.2,0.1] * 0.7, \out, ~reverBus, \gainBus, ~softSawAmpBus ).play; wait(1); ~softSawAmpBusLiner.set(\lag, 0, \val, 0); wait(0.5); ~softSawAmpBusLiner.set(\lag, 20, \val, 1); wait(0.5); // -- 30.wait; Pbindef(\prand, \midinote, Prout({ var tone0, tone1, tone2, interval, freq0, delta; loop { tone0 = rrand(0,11); interval = rrand(2,4); tone1 = Scale.minor(\pythagorean).at(tone0) + [0,12,24].choose + 0.1; tone2 = Scale.minor(\pythagorean).at(tone0 + interval) + [0,12,24].choose; freq0 = [tone1,tone2] + 52; freq0.yield; } }) - Pstutter(4, Prand([0,1] * 12,inf)), \sustain, Prand((9..10)/10,inf), ); " . 1.3 rrand(0,11), sustain".postln; 30.wait; Pbindef(\prand, \midinote, Prout({ var tone0, tone1, tone2, interval, freq0, delta; loop { tone0 = 0; //rrand(0,2); interval = rrand(2,4); tone1 = Scale.minor(\pythagorean).at(tone0) + [0,12,24].choose + 0.1; tone2 = Scale.minor(\pythagorean).at(tone0 + interval) + [0,12,24].choose; freq0 = [tone1,tone2] + 52; freq0.yield; } }) - Pstutter(4, Prand([0,1] * 12,inf)), \sustain, Prand((3..6)/10,inf), ); " . 1.4 back to 0".postln; ~greyholeVerb.set(*[revWet:0.7, feedback:0.7, lag:10, dtime:0.1, size:5, diff:0.707 ]); ~softSawAmpBusLiner.set(\lag, 20, \val, 0.7); 30.wait; Pbindef(\prand, \midinote, Prout({ var tone0, tone1, tone2, interval, freq0, delta; loop { tone0 = 0; //rrand(0,2); interval = 4; //rrand(2,4); tone1 = Scale.minor(\pythagorean).at(tone0) + [0,12,24].choose + 0.1; tone2 = Scale.minor(\pythagorean).at(tone0 + interval) + [0,12].choose; freq0 = [tone1,tone2] + 52; freq0.yield; } }), // - Pstutter(4, Prand([0,1] * 12,inf)), \sustain, Prand((5..9)/10,inf), ); " . 1.5 interval 4".postln; ~greyholeVerb.set(*[revWet:0.5, feedback:0.7, lag:10, dtime:0.1, size:5, diff:0.707 ]); ~softSawAmpBusLiner.set(\lag, 20, \val, 1.5); 21.wait; Pbindef(\prand, \midinote, Prout({ var tone0, tone1, tone2, interval, freq0, delta; loop { tone0 = rrand(0,11); interval = rrand(2,4); tone1 = Scale.minor(\pythagorean).at(tone0) + [0,12,24].choose + 0.1; tone2 = Scale.minor(\pythagorean).at(tone0 + interval) + [0,12,24].choose; freq0 = [tone1,tone2] + 52; freq0.yield; } }) - Pstutter(4, Prand([0,1] * 12,inf)), \sustain, Prand((9..10)/10,inf), ); " . 1.6 rrand0-11".postln; 30.wait; ~greyholeVerb.set(*[revWet:0.3, feedback:0.7, lag:10, dtime:0.1, size:5, diff:0.707 ]); Pbindef(\prand, \midinote, Prout({ var tone0, tone1, tone2, interval, freq0, delta; loop { tone0 = 0; //rrand(0,11); interval = 2; tone1 = Scale.minor(\pythagorean).at(tone0) + [0,12].choose + 0.1; tone2 = Scale.minor(\pythagorean).at(tone0 + interval) + [0,12, 24].choose; freq0 = [tone1,tone2] + 52; freq0.yield; } }), \sustain, Prand((4..9)/10,inf), ).play; " . 1.7 tone0:0".postln; ~softSawAmpBusLiner.set(\lag, 20, \val, 0.5); 10.wait; ~greyholeVerb.set(*[revWet:0.6, feedback:0.7, lag:10, dtime:0.1, size:5, diff:0.707 ]); Pbindef(\prand, \midinote, Prout({ var tone0, tone1, tone2, interval, freq0, delta; loop { tone0 = 0; //rrand(0,11); interval = 2; tone1 = Scale.minor(\pythagorean).at(tone0) + [0,12, 24].choose + 0.1; tone2 = Scale.minor(\pythagorean).at(tone0 + interval) + [0,12].choose; freq0 = [tone1,tone2] + 52; freq0.yield; } }), \sustain, Prand((4..9)/10,inf), ).play; " . 1.8 24".postln; 10.wait; Pbindef(\prand, \midinote, Prout({ var tone0, tone1, tone2, interval, freq0, delta; loop { tone0 = 0; //rrand(0,11); interval = 2; tone1 = Scale.minor(\pythagorean).at(tone0) + [0,12, 24].choose + 0.1; tone2 = Scale.minor(\pythagorean).at(tone0 + interval) + [0,12, 24].choose; freq0 = [tone1,tone2] + 52; freq0.yield; } }), \sustain, Prand((4..9)/10,inf), ).play; " . 1.9 24 & 24".postln; 10.wait; Pbindef(\prand, \midinote, Prout({ var tone0, tone1, tone2, interval, freq0, delta; loop { tone0 = rrand(0,11); interval = rrand(2,4); tone1 = Scale.minor(\pythagorean).at(tone0) + [0,12,24].choose + 0.1; tone2 = Scale.minor(\pythagorean).at(tone0 + interval) + [0,12,24].choose; freq0 = [tone1,tone2] + 52; freq0.yield; } }) - Pstutter(4, Prand([0,1] * 12,inf)), \sustain, Prand((9..10)/10,inf), ); " . 1.10 rrand0-11".postln; ~softSawAmpBusLiner.set(\lag, 60, \val, 0); 30.wait; Pbindef(\sawp0).stop; ~greyholeVerb.set(*[revWet:0.8, feedback:0.7, lag:10, dtime:0.1, size:5, diff:0.707 ]); Pbindef(\prand, \midinote, Prout({ var tone0, tone1, tone2, interval, freq0, delta; loop { tone0 = 0; //rrand(0,11); interval = 2; tone1 = Scale.minor(\pythagorean).at(tone0) + [0,12].choose + 0.1; tone2 = Scale.minor(\pythagorean).at(tone0 + interval) + [0,12].choose; freq0 = [tone1,tone2] + 52; freq0.yield; } }), \sustain, Prand((2..5)/10,inf), ).play; " . 1.11 tone0".postln; 10.wait; // sure one could use Pseg here: Pbindef(\prand, \amp, -1.dbamp); 2.wait; Pbindef(\prand, \amp, -2.dbamp); 2.wait; Pbindef(\prand, \amp, -3.dbamp); 2.wait; Pbindef(\prand, \amp, -4.dbamp); 2.wait; Pbindef(\prand, \amp, -5.dbamp); 2.wait; Pbindef(\prand, \amp, -6.dbamp); 2.wait; Pbindef(\prand, \amp, -7.dbamp); 2.wait; Pbindef(\prand, \amp, -8.dbamp); 2.wait; Pbindef(\prand, \amp, -9.dbamp); 10.wait; Pbindef(\prand).stop; // gcd mod --------------------------------------------------------- "--- gcdmod...".postln; SynthDef(\gcdmod, { arg outBus, amp=0.1, gate=1; var env; var a = TDuty.ar(Dseq((0..3), inf) + 5 * SampleDur.ir); var b = TDuty.ar(Dseq((3..0), inf) + 5.01 * SampleDur.ir); var mod = 50; var t = PulseCount.ar(a) % mod; var u = PulseCount.ar(b) % mod; var n, j, d, e, c; d = LocalIn.ar(2); n = gcd(t, u + [0, 1]); e = n.linexp(0, mod, 70, 10000); j = SinOsc.ar(e); LocalOut.ar(j * d); c = CombC.ar(j, 1, [0.009,0.007,0.008, 0.006] * LFNoise1.ar([0.01,0.01]).range(1.3,0.7), 30, mul:0.05); j = j * LFNoise1.ar(0.2).range(0,0.5) + Splay.ar(c); j = Greyhole.ar(j, damp:0.5, diff:0.5 size:4); j = Limiter.ar(LPF.ar(HPF.ar(j, 100), LFNoise1.kr(0.1).exprange(200,18000)), 0.7); j = j * LFPulse.ar([2.2,4.4]*2, 0.96, width:LFNoise1.ar(0.2).range(0.8,0.95)).range(LFNoise1.ar(0.1).range(0,1),1); j = j + LFPulse.ar([2.2,4.4], 0.96, mul: LFNoise1.kr(1/10).range(0,0.5) * Line.kr(0,1,30)); j = LeakDC.ar(j); env = Linen.kr(gate, 0, 1, 0, 2); j = j * env * amp; Out.ar(outBus, j); }).add; SynthDef(\dNoz, { arg out=0, gate=1, amp=0.1, envattackTime=0.001, release=0.001; var snd, env; env = Linen.kr(gate, envattackTime, 1, release, doneAction:2); snd = WhiteNoise.ar(1); snd = snd + SinOsc.ar(SinOsc.kr(10).range(40,60), mul:0.2); snd = snd + Pulse.ar(SinOsc.kr(12).range(40,60), mul:0.1); snd = snd.clip2(0.8); snd = LPF.ar(snd, LFNoise2.ar(0.4).range(60,100), mul:3); snd = snd.dup; snd[1] = DelayL.ar(snd[1], 0.05, SinOsc.kr(0.2).range(0.001,0.003)); snd = snd * env * amp; Out.ar(out, snd); }).add; 1.wait; Pbindef(\gcdmodp, \instrument, \gcdmod, \dur, Pseq([240]), \amp, 0.7, \legato, 1, \outBus, ~mainOut, ).play; 30.wait; Pbindef(\dBoz, \instrument, \dNoz, \dur, Pseq([Rest(5), 10],14), \amp, 0.4, \legato, 1, \out, ~mainOut, ).play; "--- dBoz dNoz...".postln; wait(190); "--- akj...".postln; // AKJ -------------------------------------------------------- SynthDef(\akjDisChord, { arg freq=300, amp=0.1, out=0, gate=1; var snd, env; freq = [freq,freq*1.01]; snd = LFPar.ar(freq) * 0.3 + (LFTri.ar(freq*16/19, mul:0.3)) + (Pulse.ar(freq*21/40, mul:0.1)) + (SinOsc.ar(freq/8.01, mul:4).clip2(0.3)); env = EnvGen.kr(Env([0,1,0],[20,30], \cub, 1), gate, doneAction:2); snd = Splay.ar(snd); snd = snd * env * amp; Out.ar(out, snd); }).add; SynthDef(\akjBaz, { arg freq=300, amp=0.1, out=0, gate=1; var snd, env; snd = SinOsc.ar(freq/4, mul:0.7)!2; snd = snd * Lag.ar(LFPulse.ar(freq/8.02, 0.5).range(1,0),0.005); snd = snd.softclip(0.5) * 1.5 ; env = Linen.kr(gate, 0,1,0, 2); snd = snd * env * amp; Splay.ar(snd); Out.ar(out, snd); }).add; SynthDef(\akjClick, { arg out=0, gate=1, freq=440, amp=0.1, releaseTime=0.1; var snd, env; snd = LFPulse.ar([freq, freq * 2], width: LFNoise1.ar(0.1).exprange(0.001,0.004)); snd = snd + (WhiteNoise.ar(1) * snd); snd = HPF.ar(snd, 200); env = EnvGen.ar(Env.perc(0,releaseTime)); snd = snd * env * amp * Linen.kr(gate, 0, 1, releaseTime, 2); snd = Splay.ar(snd); Out.ar(out, snd); }).add; wait(0.2); Pbindef(\akjDisChordp, *[ instrument: \akjDisChord, freq:300, dur: Pseq([260]), legato: 1.1, amp: 0.8, out: ~mainOut ]).play; wait(60); Pbindef(\akjClickp, *[ instrument: \akjClick, dur: Pseq([ Pn(1/8, 7), Rest(1/8), // 1 Rest(1), // 1 Pn(1/4, 3), Rest(3/8), Pn(1/8, 1), Pn(1/4, 3), Rest(3/8), Pn(1/8, 1), Pn(1/4, 3), Rest(4/8), Pn(1/8, 7), Rest(1/8), Prand([ Rest(1), Pn(1/6,6) ]), Pn(1/8, 3), Rest(1/8), Prand([ Rest(1.25), Pn(1/4, 5) ]), Prand([ Pn(1/8, 3), Pn(1/16, 6) ]), Rest(1/8), ],inf), amp: 9/20, releaseTime: 0.3, freq:1, out: ~mainOut ]).play; wait(60); Pbindef(\akjBazp, *[ instrument: \akjBaz, freq: 300, dur: 10, amp: 0.3, legato: 0.20, out: ~mainOut ]).play; wait(120); Pbindef(\akjClickp).stop; Pbindef(\akjBazp).stop; wait(30); "--- shippo...".postln; // SHIPPO ----------------------------------------------------------- SynthDef(\shippo, { arg amp=0.1, gate=1, out=0, freq=100; var snd, env, rev; freq = [freq/2, freq * 0.99, freq * 1.51]; snd = Pulse.ar( freq * LFNoise1.ar(1/10).range(1,1.03), mul:0.4 ) ; // Lag.ar(LFPulse.ar(1/5, iphase:0.98, width:0.1)); snd = Splay.ar(snd,spread:0.6); snd = LPF.ar(snd, LFNoise1.ar(1/4).exprange(500,10000)); env = EnvGen.kr(Env.adsr(0.001,0,1, 0.1, 1), gate, doneAction:0); snd = snd * env; snd = snd; rev = Array.fill (8, { CombL.ar( snd, 0.2, LFNoise1.ar(1/3).range(0.98,1.02) * rrand(0.01, 0.3), 7) }); rev = Splay.ar(rev); rev = LeakDC.ar(rev); rev = HPF.ar(rev, 100); snd = snd + rev; snd = Limiter.ar(snd, 0.8); snd = snd * amp; DetectSilence.ar(snd, doneAction:2); Out.ar(out, snd); }).add; wait(0.1); Pbindef(\shippoP, *[ instrument: \shippo, degree: 4, octave: 3, //dur: Pseq([3,5,10] / 8, inf), dur: Pseq([4,8,12] / 8, inf), legato:0.3, amp: 0.1, out: ~mainOut ]); Pbindef(\shippoP).quant(1); Pbindef(\shippoP).play; Pbindef(\akjDisChordp).stop; wait(10); Pbindef(\shippoP, \amp, 0.2); wait(3); Pbindef(\shippoP, \amp, 0.3); wait(3); Pbindef(\shippoP, \amp, 0.4); wait(3); Pbindef(\shippoP, \amp, 0.5); wait(3); Pbindef(\shippoP, \amp, 0.6); wait(20); // midline --------------------------------------------------------- "--- sawline ...".postln; SynthDef(\sawLine, { arg out=0, freq=440, gate=1, amp=1, alag=10; var snd, env, gen, numosc; numosc = 10; env = Env.adsr(20, 0, 1, 30, 1, \sin); gen = EnvGen.kr(env, gate, doneAction:2); //faderosc = SinOsc.ar(1/60).range(-1,2).min(1).max(0); snd = Array.fill(numosc, { var local, lfreq; lfreq = [freq, freq*2.01, freq/1.99 ]; //lfreq = [freq, freq * 1.98, freq * 0.51]; //lfreq = freq; local = Saw.ar(rrand(lfreq, lfreq * 1.02 ) * LFNoise1.kr(0.3).range(1, 1.01), -10.dbamp * [0.5, 0.3, 0.3]); local = Mix(local); }); snd = Splay.ar(snd); snd = LPF.ar(snd, LFNoise1.ar(0.06).exprange(3000,10000)); snd = CombL.ar(snd, 1, LFNoise1.ar(0.1).range([0.5,0.65],[0.53,0.68]), 15, -1.dbamp) + snd; snd = snd * gen; snd = snd * Lag.kr(amp, alag); Out.ar(out, snd); }).add; wait(0.5); Pbindef(\midlineP, \instrument, \sawLine, \dur, 8, \degree, 6, \octave, 7, \out, ~reverBus, \amp, 0.4, \ctranspose, 6-12, \scale, Scale.minor(\just), ).play; // -------------------------------------------------------------------- wait(30); Pbindef(\midlineP, \degree, 1); wait(20); Pbindef(\midlineP, \degree, 4); wait(20); Pbindef(\midlineP, \degree, 6); wait(20); Pbindef(\midlineP, \degree, 4); wait(10); Pbindef(\midlineP, \octave, [5,7]); wait(20); Pbindef(\shippoP).stop; wait(5); // --- wrangle mel ------------------------------------------------------ "--- wranglemel ...".postln; SynthDef(\sin1, { arg freq=440, out=0, gate=1, amp=0.1, release=0, cutoff=10, rq=0.5; var snd, env; freq = [freq,freq*1.01]; env = Linen.kr(gate, attackTime: 0.001, releaseTime: release, doneAction:2); snd = SinOsc.ar(freq) + Saw.ar(freq*1.004, mul:0.3) + Pulse.ar(freq*0.996, mul:0.4); snd = snd + snd.fold2(0.65); snd = (snd * 0.5) + (snd.wrap2(0.64) * 0.5) * 2; cutoff = cutoff * 0.1; cutoff = freq.pow(cutoff); cutoff = cutoff.max(100); cutoff = cutoff.min(18000); snd = RLPF.ar(snd, cutoff, rq); snd = snd * env; snd = snd * amp; OffsetOut.ar(out, snd); }).add; wait(0.5); // basics Pbindef(\y3, \instrument, \sin1, \degree, Pseq( [ 0, 2, -1, 5, -2, 6 ], inf), \ctranspose, 6-12, \octave, 5, \scale, Scale.minor(\just), \mtranspose, 0, \cutoff, Pstutter(16, Pseq([Pseq((13..18)),Pseq((17..12))].min(11),inf)), \rq, Prand([0.2,0.3,0.5]*1,inf), \legato, Pseq([Prand([1,0.7]), 0.6, 0.9, 0.4, 0.6] * 0.2, inf), \release, 0.1, \dur, 1/8, \amp, [0.2,0.2,0.1] * Pseq([Prand([1,0.7]), 0.8, 0.9], inf) * 0.4, \dlywet, Pstutter(8, Pfunc({~dlywrang1.set(\wet, rrand(0, ((0..1) * 0.1).choose ) ) })), \out, ~wranglerBus, ); Pbindef(\y3).quant=1; Pbindef(\y3).play; wait(20); Pbindef(\midlineP, \degree, Pseq([6,1,4], inf), \dur, 40 ); Pbindef(\midlineP, \amp, 0.1 ); Pbindef(\y3, \cutoff, Pstutter(16, Pseq([Pseq((13..18)),Pseq((17..12))].min(13),inf))); Pbindef(\y3, \legato, Pseq([Prand([1,0.7]), 0.6, 0.9, 0.4, 0.6] * 0.3, inf)); wait(15); Pbindef(\y3, \cutoff, Pstutter(16, Pseq([Pseq((13..18)),Pseq((17..12))].min(14),inf))); Pbindef(\y3, \legato, Pseq([Prand([1,0.7]), 0.6, 0.9, 0.4, 0.6] * 0.4, inf)); wait(15); Pbindef(\y3, \cutoff, Pstutter(16, Pseq([Pseq((13..18)),Pseq((17..12))].min(15),inf))); Pbindef(\y3, \legato, Pseq([Prand([1,0.7]), 0.6, 0.9, 0.4, 0.6] * 0.5, inf)); Pbindef(\y3, \octave, [4,5]); Pbindef(\y3, \degree, Pseq( [ [7,0], 2, -1, Prand([4,5]), Prand([-2,Pseq([2,6])]) ], inf)); wait(30); Pbindef(\y3, \cutoff, Pstutter(16, Pseq([Pseq((13..18)),Pseq((17..12))].min(16),inf))); Pbindef(\y3, \legato, Pseq([Prand([1,0.7]), 0.6, 0.9, 0.4, 0.6] * 0.6, inf)); Pbindef(\y3, \octave, [4,5,6]); Pbindef(\y3, \mtranspose, Pstutter(16, Pseq([Pn(0,4), 3,5],inf))); wait(30); Pbindef(\y3, \mtranspose, Pstutter(16, Pseq([7, Pn(0,3), 3, 5 ],inf))); // --- whitenoise hihat ---------------------------------------------------- "--- wHat ...".postln; SynthDef(\wHat, { arg outBus=0, amp=0.1, freq=2000, rq=0.5, gate=1, release=0.002, pan=0; var snd, env; env = EnvGen.kr(Env.cutoff(release), gate, doneAction:2); snd = BPF.ar(WhiteNoise.ar, freq, rq, amp); snd = HPF.ar(snd, 1000); snd = snd * env; OffsetOut.ar(outBus, Pan2.ar(snd,pan)); }).add; Pbindef(\wHatp, \instrument, \wHat, \dur, 1/8, \freq, Prand([1,2,3,4] * 300 + 2500, inf), \rq, Prand([0.8,0.7,0.6], inf), \pan, Prand((1..10) * 0.1 - 0.5,inf), \amp, Prand((1..10) * 0.02 + 0.3,inf), \outBus, ~mainOut, // wrangler? \legato, Pseq([Pn(0.05,7),Prand((1..10)/80+0.05,inf)],inf), ); Pbindef(\wHatp).quant(1); wait(22/8); Pbindef(\wHatp).play; wait(30); Pbindef(\midlineP).stop; //wait(30); Pbindef(\wHatp, \legato, Pseq([ Pseq((1..24)/24,1), Pseq([Pn(0.05,7),Prand((1..10)/80+0.05,inf)],inf)])); wait(24/8); Pbindef(\y3, \cutoff, Pstutter(16, Pseq([Pseq((13..18)),Pseq((17..12))].min(17),inf))); Pbindef(\y3, \legato, Pseq([Prand([1,0.7]), 0.6, 0.9, 0.4, 0.6] * 0.7, inf)); Pbindef(\y3, \octave, [4,5,6] + Pwrand([0,2,1, 3],[0.7,0.1,0.1,0.1],inf)); wait(30); Pbindef(\y3, \cutoff, Pstutter(16, Pseq([Pseq((13..18)),Pseq((17..12))].min(18),inf))); Pbindef(\y3, \legato, Pseq([Prand([1,0.7]), 0.6, 0.9, 0.4, 0.6] * 0.8, inf)); Pbindef(\y3, \octave, Pstutter(32, Pseq( [5, [4,5], [4,5,6] ], inf), inf) + Pwrand( [0,1,1,-1], [0.7,0.1,0.1,0.1], inf)); Pbindef(\y3, \dlywet, Pstutter(8, Pfunc({~dlywrang1.set(\wet, rrand(0, ((0..4) * 0.1).choose ) ) }))); wait(30); Pbindef(\y3, \legato, Pseq([Prand([1,0.7]), 0.6, 0.9, 0.4, 0.6] * 0.9, inf)); Pbindef(\y3, \octave, Pstutter(32, Pseq( [5, [4,5], [4,5,6] ], inf), inf) + Pwrand( [0,1,2,-1], [0.7,0.1,0.1,0.1], inf)); wait(30); Pbindef(\wHatp, \legato, Pseq([ Pseq((1..24)/24,1), Pseq([Pn(0.05,7),Prand((1..10)/80+0.05,inf)],inf)])); wait(20/8); Pbindef(\wHatp).stop; Pbindef(\y3, \legato, Pseq([Prand([1,0.7]), 0.6, 0.9, 0.4, 0.6] * 0.3, inf)); Pbindef(\y3, \cutoff, Pstutter(16, Pseq([Pseq((13..18)),Pseq((17..12))].min(14),inf))); wait(20); Pbindef(\y3, \legato, Pseq([Prand([1,0.7]), 0.6, 0.9, 0.4, 0.6] * 0.6, inf)); Pbindef(\y3, \degree, Pseq( [ 0, 2, -1, 5, -2, 6 ], inf)); Pbindef(\y3, \octave, [4,5]); //Pbindef(\y3, \octave, [4,5,6] + Pwrand([0,2,1, 3],[0.7,0.1,0.1,0.1],inf)); Pbindef(\y3, \dlywet, Pstutter(8, Pfunc({~dlywrang1.set(\wet, rrand(0, ((3..9) * 0.1).choose ) ) }))); wait(30); ~dlywrang1.set(\wet2, 1); wait(4); Pbindef(\y3).stop; wait(4); // --- lcmnoi ---------------------------------------------------------------------- "--- lcmnoi ...".postln; SynthDef(\lcmnoise, { arg gate=1, outBus, amp1=0, amp2=1, amp=0.1; var snd, revchain, env; snd = [ tanh(lcm(SinOsc.ar( LFNoise0.kr(LFNoise0.kr(1/10).exprange(0.1,1)).exprange(1,15000) ).range(-100,100).round(1),SinOsc.ar( LFNoise0.kr(LFNoise0.kr(1/10).exprange(0.1,1)).exprange(1,15000) ).range(-100,100).round(1))*0.0001), tanh(lcm(Saw.ar( LFNoise0.kr(LFNoise0.kr(1/10).exprange(0.1,1)).exprange(1,15000) ).range(-100,100).round(1),LFCub.ar( LFNoise0.kr(LFNoise0.kr(1/10).exprange(0.1,1)).exprange(1,15000) ).range(-100,100).round(1))*0.0001) ] ; snd = BHiPass.ar(snd, 180); snd = snd.softclip * 0.8; snd = Splay.ar(snd, spread:1); revchain = snd * EnvGen.ar(Env.perc(0, 0.1, Rand(10,10000), 4)); revchain = Greyhole.ar( in: revchain, delayTime: LFNoise1.ar(1).range(0.0001,0.2), damp: 0.5, size: LFNoise1.ar(0.1).exprange(0.0001,5), feedback: 0.95); revchain = LeakDC.ar(revchain); revchain = Limiter.ar(revchain) * LFNoise1.ar([1,1]).range(0,0.9); snd = snd * LFNoise0.ar([0.9,0.8]).range(0,2); snd = (snd * amp1) + (revchain * amp2); snd = snd.softclip * 0.8; env = Linen.kr(gate, 0, 1, 0, 2); snd = snd * amp * env; Out.ar(outBus, snd); //snd = LPF.ar(snd.softclip, LFNoise1.ar(0.1).exprange(10000,20000)) * 0.8; }).add; wait(0.5); Pbindef(\lcmnoip, \instrument, \lcmnoise, \dur, Pseq([ Pseq([ Prand([Pseq([0.01,0.01]),0.02]), Pn(0.05,19), 9.03 ], 20), // 20 x 10 30]), \amp, 1, \amp1, Pseq([1,0.1],inf), \amp2, Pseq([0.6,1],inf), \legato, 1, \out, ~mainOut, ).play; 160.wait; "--- s1distdron...".postln; // S1 DISTORTED DRONE ----------------------------------------------------- SynthDef(\s1Dist, { arg freq=440, gate=1, out=0, amp=0.1, ampBus, d1 = 5, d2 = 1, d3=5, ffreq=200, ffreqBus; var snd = Saw.ar([freq, freq*1.01]); var env = Linen.kr(gate, releaseTime: 0.1, doneAction:2); snd = snd + SinOsc.ar([freq*0.99, freq]); snd = snd + Pulse.ar([freq*0.99, freq]); snd = snd.clip2(LFNoise1.ar(0.3).range(0.3,0.8)) * d1; snd = snd.wrap2(LFNoise1.ar(0.3).range(0.3,0.8)) * d2; snd = snd.fold2(LFNoise1.ar(0.3).range(0.3,0.8)) * d3; snd = LeakDC.ar(snd); ffreq = In.kr(ffreqBus, 1); ffreq = ffreq.max(20); snd = LPF.ar(snd, ffreq); snd = Limiter.ar(snd); snd = Splay.ar(snd); amp = In.kr(ampBus, 1); Out.ar(out, snd*env*amp); }).add; ~s1DistAmpBus.free; ~s1DistAmpBus = Bus.control(s,1); ~s1DistAmpBus.set(0); ~s1DistAmpLiner = SynthDef(\linexamp, { |outBus, lag, val| Out.kr(outBus, VarLag.kr(val+0.0001, lag, 0, \cub) - 0.0001 * 0.9) }).play(s, [outBus: ~s1DistAmpBus, lag: 10, val:0]); ~s1DistFfreqBus.free; ~s1DistFfreqBus = Bus.control(s,1); ~s1DistFfreqBus.set(100); ~s1DistFfreqLiner = SynthDef(\linexamp, { |outBus, lag, val| Out.kr(outBus, VarLag.kr(val+0.0001, lag, 0, \cub) - 0.0001) }).play(s, [outBus: ~s1DistFfreqBus, lag: 10, val:200]); wait(0.5); Pbindef(\s1DistP, \instrument, \s1Dist, \degree, -1, \dur, 2, \octave, [2,3], \d1, Prand((1..5),inf), \d2, Prand((1..5),inf), \d3, 5, \legato, 1, // needs wrangled delay! \out, ~wranglerBus, \dlywet, Pstutter(8, Pfunc({~dlywrang1.set(\wet, rrand(0, ((3..6) * 0.1).choose ) ) })), \ampBus, ~s1DistAmpBus, \ffreqBus, ~s1DistFfreqBus ).play; wait(1); ~s1DistAmpLiner.set(\lag, 40, \val, 0.4); wait(20); ~s1DistFfreqLiner.set(\lag, 40, \val, 500); wait(40); ~s1DistFfreqLiner.set(\lag, 10, \val, 1500); wait(30); ~s1DistFfreqLiner.set(\lag, 10, \val, 7500); wait(20); ~s1DistFfreqLiner.set(\lag, 1, \val, 700); wait(10); ~s1DistFfreqLiner.set(\lag, 5, \val, 2700); wait(10); ~s1DistFfreqLiner.set(\lag, 1, \val, 400); wait(10); ~s1DistFfreqLiner.set(\lag, 1, \val, 6400); wait(10); ~s1DistFfreqLiner.set(\lag, 1, \val, 15400); wait(5); ~s1DistFfreqLiner.set(\lag, 7, \val, 1000); wait(20); ~s1DistFfreqLiner.set(\lag, 7, \val, 3000); wait(10); ~s1DistFfreqLiner.set(\lag, 7, \val, 400); wait(20); ~s1DistFfreqLiner.set(\lag, 1, \val, 20000); wait(5); SynthDef(\dustnoise, { arg outBus=0, gate=1, amp=0.1, release=1, density=1; var snd, env; env = Linen.kr(gate, 0, 1, release, 2); snd = WhiteNoise.ar * LFPulse.ar(0.06, width:0.02) * -25.dbamp; snd = HPF.ar(snd, 2000); snd = snd + Dust.ar(LFNoise1.ar(0.1).range(1,100) * density, mul:0.2); snd = Pan2.ar(snd, LFNoise1.kr(0.1).range(-0.5,0.5)); snd = snd * env * amp; OffsetOut.ar(outBus, snd); }).add; wait(0.5); Pbindef(\dustnoiseP, \instrument, \dustnoise, \amp, 1, \dur, 30, \legato, 1, \release, 0.1, \density, 10, ).play; ~s1DistFfreqLiner.set(\lag, 7, \val, 1000); wait(20); ~s1DistFfreqLiner.set(\lag, 20, \val, 300); wait(20); ~s1DistFfreqLiner.set(\lag, 5, \val, 3300); wait(5); ~s1DistFfreqLiner.set(\lag, 5, \val, 150); wait(5); Pbindef(\dustnoiseP, \density, 4); ~s1DistAmpLiner.set(\lag, 15, \val, 0.5); wait(15); "--- padme ...".postln; // padme ----------------------------------------------------------------------------------- SynthDef(\padme, { arg out=0, gate=1, amp=1, alag=10, freq; var sum, snd0, env, gen, numosc; numosc = 10; env = Env.adsr(20, 0, 1, 30, 1, \cub); gen = EnvGen.kr(env, gate, doneAction:2); snd0 = Array.fill(numosc, { var lfreq, local; lfreq = [freq, freq * 1.5, freq * 3, freq * 4]; local = Saw.ar(rrand(lfreq, lfreq * 1.03 ) * LFNoise1.kr(0.3).range(1, 1.03), -10.dbamp); local = Mix(local); }); snd0 = Splay.ar(snd0); snd0 = LPF.ar(snd0, LFNoise1.ar(0.06).exprange(300,10000)); snd0 = CombL.ar(snd0, 1, LFNoise1.ar(0.05).range([0.5,0.65],[0.53,0.68]), 15, -1.dbamp) + snd0; sum = snd0 * gen; sum = sum * Lag.kr(amp, alag); Out.ar(out, sum); }).add; wait(0.2); Pbindef(\padmeP, \instrument, \padme, \freq, Pseq([50, 80],inf), \dur, 30, \legato, 1.2, \amp, 0.9, \out, ~mainOut ).play; ~s1DistAmpLiner.set(\lag, 20, \val, 0); wait(15); Pbindef(\s1DistP).stop; ~s1DistAmpLiner.free; ~s1DistFfreqLiner.free; wait(30); wait(30); Pbindef(\dustnoiseP, \density, 1); wait(110); Pbindef(\padmeP, \freq, Pseq([80],inf)); wait(20); Pbindef(\padmeP, \amp, 0.4); Pbindef(\dustnoiseP, \amp, Pseg(Pseq([1,0]), 90, \cub) ); // ??? // -- Soft dark saw --------------------------------------- "--- soft dark saw...".postln; Pbindef(\sawp1, *[ instrument: \softSaw, dur: 10, attackTime: 5, releaseTime:5, legato:1, degree: Pseq([ [-2,3,11,20], [-2,5,7,21] ],inf), octave: 3, amp: [1,0.5,0.2,0.1] * 0.7, out: ~reverBus, gainBus: ~softSawAmpBus ] ).play; wait(1); ~softSawAmpBusLiner.set(\lag, 0, \val, 0); wait(0.5); ~softSawAmpBusLiner.set(\lag, 20, \val, 1); wait(0.5); wait(30); Pbindef(\padmeP, \amp, 0.2); wait(60); Pbindef(\padmeP).stop; Pbindef(\dustnoiseP).stop; wait(30); Pbindef(\sawp1, \amp, [1,0.5,0.2,0.1] * 0.5); wait(15); ~greyholeVerb.set(*[revWet:0.5, feedback:0.8, lag:10, dtime:0.1, size:5, diff:0.707 ]); "--- lorenz patterns...".postln; // -- lorenz patterns ------------------------------------------ SynthDef(\blipo, { | out, freq = 440, amp = 0.1, nharms = 10, pan = 0, gate = 1, sustain, attack=0.1 | var audio = Blip.ar(freq * (SinOsc.kr(3).range(1,1.01)), nharms, amp); var env = Linen.kr(gate, attackTime: attack, releaseTime: sustain, doneAction: Done.freeSelf); OffsetOut.ar(out, Pan2.ar(audio, pan, env) ); }).add; wait(0.5); ~dotsP = Pbind( \dur, Pflatten(1, Plorenz() * 1), \attack, 0.01, \octave, 3, \amp, 0.4, \nharms, Prand((2..7),500) ); ~linesP = Pbind( \dur, Pflatten(1, Plorenz() * 5), \attack, 3, \octave, Prand([2,3,4],inf), \nharms, Prand((1..4),80), \amp, 0.3 ); ~highP = Pbind( \dur, Pflatten(1, Plorenz() * 5), \attack, 3, \octave, 5, \nharms, Prand((1..3),50), \amp, 0.03 ); // just plays out! ~lorenzP = Pbindf( Ptpar([ 0, ~dotsP, 60, ~linesP, 160, ~highP]), \instrument, \blipo, \degree, (Pflatten(1, Plorenz()) * 18).asInteger, \mtranspose, Prand([Pn(0,24),Pn(2,24),Pn(4,24)], inf), \detune, Prand([0,1,0.5,1.5], inf), \scale, Scale.major(\pythagorean), \legato, Prand((4..7),inf) * 0.2, \pan, Prand((-10..10),inf) * 0.1, \out, ~reverBus ).play; wait(140); ~softSawAmpBusLiner.set(\lag, 120, \val, 0); wait(120); Pbindef(\sawp1).stop; while({ ~lorenzP.isPlaying }, { wait(1); }); wait(10); // fade out ~mainOutFx.set(\lag, 10, \amp, 0); wait(5); ////////////////////////////////////////////////////////////////////////// "<<< THIS IS THE END, MY FRIEND.\n---------------------------------\n\n".postln; s.freeAll; ""; }; }; );