diff --git a/ark_d.scd b/ark_d.scd index 2943194..07eed37 100644 --- a/ark_d.scd +++ b/ark_d.scd @@ -3,842 +3,1206 @@ // Ark/D, amorphic (2020) // =========================================================== +// before boot, raise memory +#[\internal, \local].do { |s| + s = Server.perform(s); + s.options.memSize = 2097152; // 2 gigs +}; + Server.default.waitForBoot { - "Init.scd".loadRelative; - "init.scd".loadRelative; -} + 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); + snd = snd * amp; + 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); + + 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]); + sig = sig * [1,0.1]; + sig = (sig * 4).softclip * 0.8; + //sig = LPF.ar(HPF.ar(sig, 150), 3000); + sig = LPF.ar(sig, (freq * 4).min(20000)); + sig = sig * EnvGen.kr(Env.perc(0, sustain, 0.5), doneAction:2) * amp; + sig = Splay.ar(sig, 0.2); + 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, + \sustain, 0.2, + //\out, ~verbDelayBus + \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.5, + \out, ~reverBus, + \gainBus, ~softSawAmpBus + ).play; + + wait(1); + + ~softSawAmpBusLiner.set(\lag, 0, \val, 0); + wait(0.5); + ~softSawAmpBusLiner.set(\lag, 20, \val, 0.8); + 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 tone0 = rrand(0,11) + longer 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.5); + + 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); + + 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), + //\amp, Env(#[1,1,0.2], #[10,20]) + ).play; " . 1.11 tone0".postln; + + 10.wait; + 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); + 2.wait; Pbindef(\prand, \amp, -10.dbamp); + 2.wait; Pbindef(\prand, \amp, -11.dbamp); + 2.wait; Pbindef(\prand, \amp, -12.dbamp); + 2.wait; Pbindef(\prand, \amp, -13.dbamp); + 2.wait; Pbindef(\prand, \amp, -14.dbamp); + 2.wait; Pbindef(\prand, \amp, -15.dbamp); + + 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; "--- gcdmodp...".postln; + + + 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([Pseq([1,2,3]/8, 2), Pseq([1,2,1,2,1,1]/8,3), Pseq([1]/8, 4), Pseq([1]/4, 2), ],inf), + //dur: Pseq([Pn(1/8, 31), Rest(1/8)],inf), + //dur: Pseq([Pn(1/3, 31), Rest(1/8)],inf), + //amp: Prand([5,7,8,9]/20, inf), + amp: Prand([9]/20, inf), + 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(30); + + 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(30); + + 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(30); + + 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(25/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(10); + + 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(20); + + 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([ + Prand([Pseq([0.01,0.01]),0.02]), + Pn(0.05,19), + 9.03 + ], 20), // 20 x 10 + + \amp, 1, + \amp1, Pseq([1,0.1],inf), + \amp2, Pseq([0.6,1],inf), + \legato, 1, + \out, ~mainOut, + ).play; "--- lcmnoip...".postln; + + // progression into delays/reverbs? + // any added sounds? + + 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) + }).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, 20, \val, 0.4); wait(20); + ~s1DistFfreqLiner.set(\lag, 20, \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.7, + \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.2); + + // -- 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.2 ); + + ~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(70); + + ~softSawAmpBusLiner.set(\lag, 120, \val, 0); + wait(120); + Pbindef(\sawp1).stop; + + while({ ~lorenzP.isPlaying }, { wait(1); }); + wait(30); + + ////////////////////////////////////////////////////////////////////////// + + "<<< THIS IS THE END, MY FRIEND.\n---------------------------------\n\n".postln; + s.freeAll; + ""; + }; + +}; ); + + + + + // debug/meter -s.meter; s.scope(2); s.plotTree; +s.meter; s.scope(2); +s.plotTree; -/* -ELEMENTS -- two chord pad -- param/bebacklight (needs granulator?) -- s1 distorted drone -- shippo -- lcm noise -- gcdfeedmodsin + low rumble? -- klickyarj + lcm noise? -- lorenz pattern -*/ - - -// -/////////////////////////////////////////////////////////////////////////////////////////////// -// GCD SINMODFEED ///////////////////////////////////////////////////////////////////////////////////////// -// feedback of modulated SinOsc - -// low rumble 0 ------------------------------------ -( -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; -); -( -// "LFTri bass drum kick" - by luka@lukaprincic.si -SynthDef(\tribd, { - arg out=0, gate=1, freq=77, amp=0.1; - var snd,snd1, aenv, fenv, senv; - - fenv = Env(levels:[2, 1.2, 0], times: [0.1, 0.4]).kr; - freq = [freq,freq*2] * fenv; - freq = freq.max(10); - - snd = LFTri.ar(freq) + SinOsc.ar(freq) * [1,0.3]; - snd1 = SinOsc.ar(190, mul:3) * EnvGen.ar(Env.perc(releaseTime:0.1), gate) ; - snd = snd.sum * 0.9; - snd = LPF.ar(snd, freq * 4); - - snd = snd + RLPF.ar( BrownNoise.ar(1), - Env(levels:[2000,500,90], times:[0.01,0.05]).kr, 0.3 ); - - snd = snd + ( BPF.ar(WhiteNoise.ar(0.5), 3000) - * Env([1,1,0], [0.004,0.005]).kr ); - snd = snd + ( BPF.ar(WhiteNoise.ar(0.5), 7000) - * Env([1,1,0], [0.003,0.001]).kr ); - - aenv = Env([1,1,0], [0.2,2], curve: -9).kr; - snd = snd1 + snd * aenv; - snd = Limiter.ar(snd, 8); - - senv = Linen.kr(releaseTime: 0.1, gate: gate, doneAction: Done.freeSelf); - snd = LeakDC.ar(snd); - snd = snd * amp * senv; - snd = Pan2.ar(snd, pos:0); - snd = snd.clip2; - Out.ar(out, snd); -}).add; -); - - - -//////////////////////////////////////////////////////////////////////////////////////////////////////// -( -~clk3 = TempoClock.new(2.2); -//~myClock = TempoClock.new(2.2); - -//~clk3 = TempoClock.tempo= 2.2 / 1; -{ // routine starts here - 1.wait; - Ndef(\gcdmod).proxyspace.clock = ~clk3; - Ndef(\gcdmod).proxyspace.quant = 1; - Ndef(\gcdmod, { - 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.5, 0.55); - 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); - - // Out.ar(0, j * EnvGate()) - }); - - Ndef(\gcdkick).proxyspace.clock = ~clk3; - Ndef(\gcdkick).proxyspace.quant = 1; - Pdef(\gcdkick, { - Pbind(*[ - instrument: \tribd, - dur: Pseq([ - Rest(32), - Pseq( - [ - Prand( [ Pseq([1.5,1.5]), 3 ] ), - 3, - Prand([ - 4, - Pn(1,3), - Pn(Pseq([1/2,1,Prand([1/2,1.5])]),1) - ]) - ] / 2, 32) - ],inf), - //dur: 1, - //dur: Pseq([1.5,1,1.5,1/2,2,1/2,1.5,1/2,1/4,1/2,1/4,3],inf), - freq:77 + Prand((1..10)/5, inf), - octave:2, - amp:0.1 - ]) - };); - Ndef(\gcdkick).mold(2, \audio, \elastic); - Ndef(\gcdkick)[0] = Pdef(\gcdkick); - - - Pbindef(\n1, - \instrument, \dNoz, - \dur, Pseq([20,Rest(10)],inf), - \amp, 0.5, - \legato, 1, - ); - //Pdef(\n1).stop; - //Pdef(\n1).clear; - - 1.wait; - - s.makeBundle(0.25, { - Pdef(\n1).play(~clk3, quant:1); - Ndef(\gcdmod).play; - Ndef(\gcdkick).play; - }); - -}.fork(~clk3) -) -/////////////////////////////////////////////////////////////////////////////////////// - -// rumblw -Pdef(\n1).quant = 1; - -Pdef(\n1).play(~clk3, quant:1); - -q = Pbind(*[ - instrument: \tribd, - // dur: Pseq([ - // Prand([ - // Pseq([1.5,1.5]), - // 3]), - // 3,4 - // ] / 4,inf), - dur: 1, - dur: Pseq([3,1/2,1/2],inf), - freq:77, - octave:2, - amp:0.2 -]).play(~clk3, quant:1); -//Pdef(\kicka2).play(quant:[8,0]); -) - -{LFPulse.ar(iphase:0.99)}.plot - -x.release - -( -Pbindef(\n1, - \instrument, \dNoz, - \dur, Pseq([20,Rest(10)],inf), - \amp, 0.5, - \legato, 1, -) -) -Pdef(\n1).stop; -Pdef(\n1).clear; - -( -Pbindef(\kicka2, *[ - instrument: \tribd, - // dur: Pseq([ - // Prand([ - // Pseq([1.5,1.5]), - // 3]), - // 3,4 - // ] / 4,inf), - dur: 4, - //dur: Pseq([3,1/3,1/3,1/3],inf), - freq:77, - octave:2, - amp:0.2 - -]); -) -Pdef(\kicka2).clear - - - -// 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 (16, { - CombL.ar( - snd, - 0.2, - LFNoise1.ar(1/3).range(0.98,1.02) * rrand(0.01, 0.3), - 10) - }); - 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; -) - - -~clksh = TempoClock.new(1); -Pdef(\shippoP).play(~clksh); -Pdef(\shippoP).stop; -( -Pbindef(\shippoP, *[ - instrument: \shippo, - degree: 4, - octave: 3, - dur: Pseq([1,2,3], inf), - legato:0.2, - amp: 0.5 -]); -) -Pdef(\shippoP).clear - - - -// 4. dec. 2020 ///////////////////////////////////////////////////////////////// - -//AKJ to pattern femalemalenonbinary - -( -SynthDef(\akj1, { - 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 = Linen.kr(gate, attackTime:1, releaseTime:3, doneAction:2); - snd = Splay.ar(snd); - snd = snd * env * amp; - Out.ar(out, snd); -}).add; -) - -( -SynthDef(\akjbz, { - arg freq=300, amp=0.1, out=0, gate=1; - var snd, env; - - //freq = [freq, freq*2.02, freq*1.98, freq]; - snd = SinOsc.ar(freq/4, mul:0.7)!2; - //snd = snd * [1, 0.1, 0.1, 1]; - 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 + (snd.wrap2 * 0.54)).softclip; - - snd = snd * env * amp; - - Splay.ar(snd); - Out.ar(out, snd); - //LFPulse.ar(0.275, width:0.25).range(0,1); - -}).add -) - -( -SynthDef(\click1, { - 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); - //snd = Limiter.ar((snd * 5)); - - 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 -) - - -// -- disonant chord + click + bazz ------------------------------- -TempoClock.tempo=1 -// disonchord -Pdef(\akj1p).play; -( -Pbindef(\akj1p, *[ - instrument: \akj1, - freq:300, - dur:5, - legato: 1, - amp: 1 -])) -Pdef(\akj1p).stop; - - -// click -Pdef(\clickp).play(quant:4); -Pdef(\clickp).stop(quant:4); -( -Pbindef(\clickp, *[ - instrument: \click1, - dur: Pseq([Pseq([1,2,3]/8, 2), Pseq([1,2,1,2,1,1]/8,3), Pseq([1]/8, 4), Pseq([1]/16, 2), ],inf), - //dur: Pseq([Pn(1/8, 31), Rest(1/8)],inf), - amp: Prand([5,7,8,9]/10, inf), - releaseTime: 0.3, - freq:1 - -]) -) - -// deep bass -- -Pdef(\akjbp).play(quant:4) -( -Pbindef(\akjbp, *[ - instrument: \akjbz, - freq: 300, - dur: 8, - amp: 0.5, - legato: 0.20 -]) -) -Pdef(\akjbp).stop - -// ---------------------------------------------------------------------------- - - - - - - - - - -// high pitched noise/pulse ------------------------------- -( -SynthDef(\x44y, { - arg out=0, gate=1, amp=0.9; - var snd, env; - env = Linen.kr(gate, releaseTime: 0.001, doneAction:2); - snd = Pulse.ar([1234,2345,3456,4567,5678,8912,11023] - * LFNoise0.ar(freq:Array.fill(7, {rrand(1,10)})).range(0.8,1.2), mul:0.2).sum; - snd = snd + WhiteNoise.ar(0.2); - snd = HPF.ar(snd, 8000); - //snd = snd * LFSaw.kr(0.5,iphase:1).exprange(0.00001,1); - snd = snd * amp * env; - snd = snd.dup; - Out.ar(out, snd); -}).add; -) - -Pdef(\x44yp).play; -Pdef(\x44yp).quant = 4; -( -Pbindef(\x44yp, - * [ - instrument: \x44y, - dur: 1/8, - legato: Prand([ - Pn(0.1,16), - Pseq([Pn(0.1, 4), 0.5], 4), - Pseq([Pn(0.1, 2), 0.5, Pn(0.1, 4), 0.5], 4) - ],inf), - amp: 1, - ] -) -) -Pdef(\x44yp).stop -Pdef(\x44yp).clear - - - -( -Pbindef(\x99, - * [ - instrument: \tribd, - octave:3, - degree: Prand([1,2,3]/10,inf), - //dur: Pseq([3,2,Prand([2,3]),3,2,2]/8, inf), - dur: Pseq([3,2,Prand([4,3]),3,2,4]/4, inf), - amp: 0.1 - ] -).play -) - - - - -///////////////////////////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////////////////////////// - - - -// kao bassline? -( -SynthDef(\bz2, { - arg out=0, gate=1, freq=440, amp=0.1, releaseTime=0.1, cutoff=1, frq=1; - var env,snd, ffreq; - ffreq = freq * cutoff * 10; - ffreq = ffreq.clip(50,18000); - env = Linen.kr(gate, releaseTime: releaseTime, doneAction: Done.freeSelf); - snd = Pulse.ar([freq,freq*1.01]); - snd = snd + Saw.ar([freq*0.99, freq], mul:2); - snd = RLPF.ar(in: snd, - freq: ffreq, - rq: frq); - - snd = Limiter.ar(snd, 0.7); - snd = snd * env * amp; - snd = Splay.ar(snd); - snd = HPF.ar(snd, 50); - Out.ar(out, snd); - -}).add -) -// -- bassline pattern -Pdef(\bslp).play(quant:4) -Pdef(\bslp).stop -Pbindef(\bslp, *[ dur: Pseq([1,2,4] / [4,2,2,1]/4, inf),]).play(quant:4) -Pbindef(\bslp, *[ dur: Pseq([2,1,1]/4, inf),]).play(quant:8) -( -Pbindef(\bslp, *[ - instrument: \bz2, - legato: Prand((1..5)*0.03, inf), - cutoff: Prand([0.6,1,2,3,4,5,7,12]/2,inf), - frq: Prand((4..7)/10, inf), - degree: Pseq([0,2,3,Prand([8,4,2])] + 0,inf), - octave: [3,3.3,4], - amp:0.2, - releaseTime:0.1 -]).play(quant:4) -) - -( // klick? -SynthDef(\akjklik, { - arg freq=2, amp=0.1, out=0, gate=1; - var snd, env; - - snd = LFPulse.ar([freq, freq * 2], width: LFNoise1.ar(0.1).exprange(0.001,0.004)); - env = Linen.kr(gate, 0, 1, 0.01, doneAction:2); - - snd = snd * env * amp; - Out.ar(out, snd); - -}).add; -) - - - -// ----------------------------------- - - -//////////////////////////////////////////////////////////////////////////////////////////////// - - -( - -var clck1 = TempoClock.new(120/60); -var clck2 = TempoClock.new(70/60); - -{ - - x = Pbind( \degree, Pseq((0..12)) ).play(clck1); - 4.wait; - x.stop; - postln(Date.getDate.format("time: %H:%M:%S --------------------")); - -}.fork(clck1); - -{ - y = Pbind( \degree, Pseq((0..12)+7) ).play(clck2); - 4.wait; - y.stop; - postln(Date.getDate.format("time: %H:%M:%S --------------------")); - -}.fork(clck2); - -postln("end line out of forks"); -) - -( -/*var date = Date.getDate; -date.format("%H%M%S").postln; -date.rawSeconds.postln; - date.rawSeconds.postln;*/ -~frames=(Date.getDate.rawSeconds).asString.reverse.at((0..3)).postln; -postln(Date.getDate.format("%H:%M:%S")); -""; -) -.stamp.postln - -[1,2,3].asCompileString.postln; -s.freqscope - -"this sentence has thirty-nine letters".reverse.at((0..3)); -"this sentence has thirty-nine letters".padLeft(39, "-+"); -"this sentence more than thirteen letters".padRight(13, "-+"); // nothing to pad. - - - - - -////////////////////////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - -//////// EXPERIMENTS! ////////////////////////////////////////////////////////// - - -// 24.nov 2020: - -// clicky dissonance / akj ------------------------------------ -Ndef(\akj).play -Ndef(\akj).stop -Ndef(\akj).fadeTime=5; -( -Ndef(\akj, { - var freq=300, snd; - 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)) - + (LFPulse.ar([2.2,4.4]*2, width: LFNoise1.ar(0.1).exprange(0.001,0.004))) - ; - - snd = Splay.ar(snd); - //snd = LeakDC.ar(snd); - snd = snd + (Greyhole.ar(snd) * 0.1); - snd = snd + (SinOsc.ar(freq/4, mul:0.7) * LFPulse.ar(0.275, width:0.25).range(0,1)); - - //snd = Limiter.ar(snd, 0.5) * 1.5; - - (snd * 0.6 + (snd.wrap2 * 0.14)).softclip * 1; - - //(snd * 0.6).softclip; - -}) -) - - - - - - - - - - - - - - - - -// ------------------------------------------------------- - -TempoClock.tempo = 120/120; - -( -SynthDef(\h991, { - arg out=0, freq=90, gate=1, amp; - var snd, env; - - env = Linen.kr(gate, doneAction:2); - - freq = freq * XLine.ar(1,0.4, 5); - snd = SinOsc.ar(freq); - snd = BHiPass4.ar(snd, 40); - snd = snd + LPF.ar(Pulse.ar([freq, freq*1.01], 0.01, mul:0.4), freq * 32); - snd = snd + (LFTri.ar([freq*1.01,freq]) + SinOsc.ar(freq, mul:10).max(-0.5).min(0.5)).clip2(0.5); - - snd = snd + Pulse.ar(freq, mul:0.2); - snd = snd + Impulse.ar(freq, mul:2); - - snd = BLowPass4.ar(snd, SinOsc.kr(LFNoise0.kr(8).range(1,8)).range(300,LFNoise1.kr(1).range(1000,10000)), rq:0.7); - - - snd= snd * -6.dbamp; - snd = snd * env * amp; - snd = Splay.ar(snd); - Out.ar(out,snd); -}).add; -) - - -Pdef(\h991p).play; -Pdef(\h991p).quant = 4; - -( -Pbindef(\h991p, *[ - instrument: \h991, - dur: 4, - octave: 3, - legato: 0.89, - amp: 1 -]) -) -Pdef(\h991p).clear - - - - - -//////////////////////////////////////////////////////////////////////////////// -( -// SC808 drum snare -SynthDef.new(\sc808sn, { - arg amp=2, tone=340, tone2=189, snappy=0.7, gate=1, amp2=1, out=0; - var noiseEnv, atkEnv, sig, noise, osc1, osc2, sum; - noiseEnv = EnvGen.kr(Env.perc(0.001, 4.2, 1, -115), doneAction:0); - atkEnv = EnvGen.kr(Env.perc(0.001, 0.8,curve:-95), doneAction:2); - noise = WhiteNoise.ar; - noise = HPF.ar(noise, 1800); - noise = LPF.ar(noise, 8850); - noise = noise * noiseEnv * snappy; - osc1 = SinOsc.ar(tone2, pi/2) * 0.6; - osc2 = SinOsc.ar(tone, pi/2) * 0.7; - sum = (osc1+osc2) * atkEnv * amp2; - sig = Pan2.ar(((noise*1) + sum) * amp * 2.5, 0); - sig = HPF.ar(sig, 340); - Out.ar(out, sig); -}).add -) - - - - - - - - - - -~delay1 = Bus.audio(s, 2); - -( -SynthDef(\dlywrangler, { - arg out=0, in; - var snd; - snd = In.ar(in,2); - snd = CombL.ar(snd, 1, Lag.ar(LFNoise0.ar(1).range(0.01,0.1),0.01), 3, mul:0.4) + snd; - Out.ar(out, snd); -}).add; -) - -~dlywrang1 = Synth(\dlywrangler, [\out, 0, \in, ~delay1]); -~dlywrang1.free - -( -Pbindef(\hhp1, - * [ - instrument: \sc808hh, - //dur: Pseq([Rest(1/32), 3/32], inf), - dur: 1/16, - //amp: Prand([1,2,3]/3, inf), - amp: Pseq([1, 0.2],inf), - out: Pwrand([~delay1,0],[0.7,0.3],inf), - pan: Pfunc({rrand(-0.6,0.6)}) - ] -).play -) - -( -Pbindef(\snp1, - *[ - instrument: \sc808sn, - dur: Pseq([Rest(1),Pxrand([1,1.5,0.5,Pn(0.5,4),Pn(0.25,2),Pn(0.25,2),Pn(0.25,2)])]/2,inf), - amp: Prand([1,2,3]*0.05+0.8,inf), - tone: 340, - tone2: 189, //Pxrand([2,3,4,5,6,7] * 100, inf), - snappy: 0.3, - //out: Prand([0,~delay1],inf) - out: 0 - ] -).play -) - -( -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, - out: ~delay2 - ] -).play -) -~delay2 = Bus.audio(s,2); -( -SynthDef(\wiDel, { - var snd = In.ar(\in.kr, 2); - snd = CombL.ar(snd, 1, SinOsc.ar(0.02,[0,pi/2]).range(0.5,0.6), 10, mul:1) + snd; - Out.ar(\out.kr(0), snd); -}).add; -) -~widel1.free -~widel1 = Synth(\wiDel, [\in, ~delay2, \out, 0]); - - - -//////////////////////// -s.meter - - - - - - - - - - -// BASSLINE + MELODIC LINES with buffer cycler - -Pdef(\x32).play -Pdef(\x32).fadeTime = 0; -( -Pdef(\x32, - Pbind( - \instrument, \bufCyc, - \bufnum, [~getSmp.value("0043"),~getSmp.value("0043")], - \octave, [3,2,4], - \degree, Pseq([2,2,4,1], inf), - \detune, [0.1,0], - \chanDetune, 20, - \dur, Pseq([0.20,0.40,0.60],inf), - \legato, 1, - \amp, [0.3,0.5,0.1] * 0.5, - \releaseTime, 0.01 - )).play.quant_(8); -) - -Pdef(\x33).play -Pdef(\x33).fadeTime = 0; -( -Pdef(\x33, - Pbind( - \instrument, \bufCyc, - \bufnum, [~getSmp.value("blended_0001"),~getSmp.value("0023")], - //\bufnum, ~getSmp.value("raw"), - - \degree, Pseq([[4,9],2,8,4,1], inf), - - \octave, Prand([[6,5,7],[4,5,7],[7,5,4]]-0 ,inf), - \mtranspose, Pseq([Pn([1],10),Pn([0],10)],inf), - \detune, [0,0.3], - \chanDetune, Pseq([-10,0,5,10,-5],inf), - \dur, Pseq([1,2,3] * 0.2,inf), - \legato, 0.1, - \amp, [0.3,0.5,0.1] * 0.1, - \releaseTime, Prand([1,2,3,4],inf) - )); -) - - - -