// ideas: /* - bassline - harmonic line/melody - long strings - low - kick, hihat, perc, snare. - effects? - buses! - prep underlaying elements. - preload samples - preload synthdefs - preload Pdefs - print or note patterns and ideas on paper. - train 3x at least. print out. */ ( // preload samples var smpPath = PathName(thisProcess.nowExecutingPath.dirname +/+ "smp"); // load samples "\n--- load samples: ...".postln; // free all buffers to restart buffer count ~smpBuffers.do(_.free); // create Dictionary ~smpBuffers = Dictionary(); // iterate over each file in the folder smpPath.filesDo({ |smpfile,i| // tell me what you are loading: postln(" " + i + smpfile.fileName ); // add a sample into a buffer, store object to Dictionary ~smpBuffers.add(smpfile.fileName -> Buffer.readChannel(s, smpfile.fullPath, channels:[0])); }); // function to partially match filename for buffers ~getSmp = { |regexp| ~smpBuffers.detect { |buf| regexp.matchRegexp(buf.path) } }; // counter for 9 minutes ~counter = Routine { (9 * 60).do( { arg item; var timeleft = (9*60)-item; if (timeleft.mod(10)==0, {postln("--- toGo:" + ((9*60)-item) + "---")}); 1.wait; } ); (1000).do({ 100.do({post("..time is up!!!!!")}); 1.wait; }); }; // ~counter.play // ~counter.stop /////////////////////////////////////////////////////////////////////////// // Synthdefs predefined postln("--- synthdefs ..."); // synthdefs? SynthDef(\bufCyc, { arg bufnum, gate=1, freq=440, chanDetune=1, out=0, amp = 1, attackTime=0.01, releaseTime=1, lpf=10; var snd, env, lpfreq; env = Linen.kr(gate, attackTime:attackTime, releaseTime:releaseTime, doneAction:2); freq = [freq, freq * (1 + (chanDetune * 0.0005))]; snd = BufRd.ar( numChannels: 1, bufnum: bufnum, phase: LFSaw.ar(freq).range(0, BufFrames.ir(bufnum)), loop: 1, interpolation: 2); lpfreq = freq * lpf; lpfreq = lpfreq.max(100); lpfreq = lpfreq.min(18000); snd = LPF.ar(snd, lpfreq); snd = snd * amp * env; Out.ar(out, snd); }).add; SynthDef(\smplr, {|out = 0, revBus, bufnum = 0, gate = 1, amp = 1, pan = 0, rate = 1, revWet = 0 | var snd, env; snd = PlayBuf.ar(1, bufnum, BufRateScale.kr(bufnum) * rate, loop: 0); env = EnvGen.kr(envelope: Env.cutoff(0.001,1), gate: gate, doneAction:Done.freeSelf); snd = snd * env * amp; snd = Pan2.ar(snd, pan); Out.ar(out, snd); //Out.ar(revBus * revWet, snd); }).add; /////////////////////////////////////////////////////////////////////////// // pdef predefined postln("--- pdefs ..."); Pdef(\bsln1, Pbind( \instrument, \bufCyc, \bufnum, [~getSmp.("0043"),~getSmp.("0043")], \octave, [3,2], \detune, [0.1,0], \chanDetune, 20, \legato, 0.2, \amp, [0.3,0.9,0.1] * 0.5, \releaseTime, 0.1, \degree, 2, // \dur, 1 )).quant_(2); Pdef(\strng1, Pbind( \instrument, \bufCyc, \bufnum, [~getSmp.("sincyc06"),~getSmp.("sincyc06")], //\dur, Pseq([3/4,2/4,1/4]*2/3,inf), //\degree, Pseq([[4,9],2,8,4,1], inf), //\octave, Prand([[6,5,7],[4,5,7],[7,5,4]],inf), \octave, 4, //\mtranspose, Pstutter(12, Pseq([1,0,-2,3,-3],inf)), \detune, [0,0.3,-0.3], \chanDetune, Pseq([-10,0,5,10,-5],inf), \amp, [0.3,0.5,0.1] * 0.15, \legato, 0.1, \releaseTime, Prand([1,2,3,4],inf) )).quant_(8); // ===================================================================== // percussion with sampler // ===================================================================== Pdef(\bd1, Pbind( \instrument, \smplr, \bufnum, ~getSmp.("bd01"), //\dur, Pseq([3/4, 1, 1, 1, 1/4],inf), //\dur, Pseq([3/4, 1, 1, 1, 1/4],inf), \amp, 0.6 ) ).quant_(8); /* Pdef(\bd2, Pbind( \instrument, \smplr, \bufnum, ~getSmp.("bd02"), \dur, Pseq([1+(1/4), 1, 1, 1/4],inf), \amp, 0.5 ) ).quant_(8); Pdef(\bd3, Pbind( \instrument, \smplr, \bufnum, ~getSmp.("bd03"), \dur, Pseq([1+(1/4), 1, 1, 1/4],inf), \amp, 0.5 ) ).quant_(8); */ Pdef(\hh1, Pbind( \instrument, \smplr, \bufnum, ~getSmp.("hh01"), \dur, 1/2, \amp, Prand([1,1.2,0.8]*0.5,inf), \rate, Prand([0.99,1,1.01],inf), \pan, Prand([-0.2, 0, 0.2], inf) ) ).quant_(8); Pdef(\hh2, Pbind( \instrument, \smplr, \bufnum, ~getSmp.("hh02"), \dur, 1/2, \amp, Prand([1,1.2,0.8] * 0.7,inf), \rate, Prand([0.99,1,1.01],inf), \pan, Prand([-0.2, 0, 0.2], inf) ) ).quant_(8); Pdef(\hh3, Pbind( \instrument, \smplr, \bufnum, ~getSmp.("hh03"), \dur, 1/4, \amp, Prand([1,1.2,0.8]*0.2,inf), \rate, Prand([0.99,1,1.01],inf), \pan, Prand([-0.2, 0, 0.2], inf) ) ).quant_(8); Pdef(\oh1, Pbind( \instrument, \smplr, \bufnum, ~getSmp.("oh01"), \dur, Pseq([Rest(13/4),3/4],inf), \amp, 0.4, \pan, 0 ) ).quant_(8); Pdef(\oh2, Pbind( \instrument, \smplr, \bufnum, ~getSmp.("oh02"), \dur, Pseq([Rest(13/4),3/4],inf), \amp, 0.4, \pan, 0 ) ).quant_(8); Pdef(\oh3, Pbind( \instrument, \smplr, \bufnum, ~getSmp.("oh03"), \dur, Pseq([Rest(13/4),3/4],inf), \amp, 0.4, \pan, 0 ) ).quant_(8); Pdef(\sn1, Pbind( \instrument, \smplr, \bufnum, ~getSmp.("sn01"), //\dur, Pseq([Rest(1),1],inf), //\dur, Pseq([Rest(1),1],inf), \amp, 1 ) ).quant_(8); Pdef(\sn2, Pbind( \instrument, \smplr, \bufnum, ~getSmp.("sn02"), \dur, Pseq([Rest(1),1],inf), \amp, 0.5 ) ).quant_(8); Pdef(\sn3, Pbind( \instrument, \smplr, \bufnum, ~getSmp.("sn03"), \dur, Pseq([Rest(1),1],inf), \amp, 2 ) ).quant_(8); Pdef(\perc1, Pbind( \instrument, \smplr, \bufnum, ~getSmp.("perc07"), //\dur, Pseq([2],inf), \dur, 1, \amp, 0.6, \rate, Prand((90..110) * 0.01,inf) ) ).quant_(8); Pdef(\perc2, Pbind( \instrument, \smplr, \bufnum, ~getSmp.("perc03"), //\dur, Pseq([ Pn(1/2,6), 1/4, 1/2, 1/4 ],inf), \dur, 1, \amp, 0.7, \rate, Prand([0.8,0.9,1,1.1,1.2,1.5],inf) )).quant_(8); Pdef(\perc3, Pbind( \instrument, \smplr, \bufnum, ~getSmp.("perc05"), \dur, Pseq([ Pn(1/2,6), 1/4, 1/2, 1/4 ],inf), // \amp, 0.5, \rate, Prand((90..110) * 0.01,inf), \pan, Prand([-0.2, 0, 0.2], inf) )).quant_(8); Pdef(\cl1, Pbind( \instrument, \smplr, \bufnum, ~getSmp.("cl01"), \dur, Pseq([ Rest(1), 1.5 ],inf), \amp, 1, // \rate, Prand([0.8,0.9,1,1.1,1.2,1.5],inf) ) ).quant_(8); Pdef(\cl2, Pbind( \instrument, \smplr, \bufnum, ~getSmp.("cl04"), \dur, Pseq([ Rest(1.5), 3/4 ],inf), \amp, 1, // \rate, Prand([0.8,0.9,1,1.1,1.2,1.5],inf) )).quant_(8); Pdef(\cl3, Pbind( \instrument, \smplr, \bufnum, ~getSmp.("cl05"), \dur, Pseq([ Rest(3/4), 6/4],inf), // \amp, 0.5, \rate, Prand((90..110) * 0.01,inf), // \pan, Prand([-0.2, 0, 0.2], inf) )).quant_(8); Pdef(\gl1, Pbind( \instrument, \smplr, \bufnum, ~getSmp.("gl01"), \dur, Pseq([1,3,2,3 ] / 3,inf), \amp, 1, // \rate, Prand([0.8,0.9,1,1.1,1.2,1.5],inf) ) ).quant_(8); //Pdef(\gl1).play //s.scope(4) Pdef(\gl2, Pbind( \instrument, \smplr, \bufnum, ~getSmp.("gl04"), \dur, Pseq([ 3,4,2,3,1 ] / 2,inf), \amp, 1, // \rate, Prand([0.8,0.9,1,1.1,1.2,1.5],inf) )).quant_(8); Pdef(\gl3, Pbind( \instrument, \smplr, \bufnum, ~getSmp.("gl05"), \dur, Pseq([ 4,3,4,3,4,2,1 ] / 4,inf), // \amp, 0.5, \rate, Prand((90..110) * 0.01,inf), // \pan, Prand([-0.2, 0, 0.2], inf) )).quant_(8); postln("--- init finished."); ""; ); ////////////////////////////////////////////////////////////////////////////////// // pre-score help! 100.do({post("... hola every1, I'm Luka. Luka P. :)")}) ~counter.reset ~counter.play ~counter.stop Ndef(\n1).play Ndef(\n1).fadeTime = 15 ( Ndef(\n1, { var flt1, flt2, flt3, snd = WhiteNoise.ar; flt1 = BPF.ar(snd, LFNoise1.ar(0.1).range(100,1000), 0.3); flt2 = BPF.ar(snd, LFNoise1.ar(0.1).range(100,1000), 0.3); flt3 = BPF.ar(snd, LFNoise1.ar(0.1).range(100,1000), 0.3); snd = flt1 + flt2 + flt3; snd!2 * 0.5; }); ) // possible development Pdef(\bsln1).play; ( Pbindef(\bsln1, \dur, Pseq([1,2,3] * 1/4, inf), \degree, Pstutter(2, Pxrand([1,2,3,0] , inf)), \mtranspose, Pstutter(20, Pxrand([1,2,3], inf) ), \legato, Pxrand([1,2,3]*0.3, inf), \amp, [0.3,0.9,0.1] * 0.5, ) ) Pdef(\strng1).play ( Pbindef(\strng1, \degree, Pseq([[9,4],2,8,4,1], inf), \dur, Pseq([3,2,1]*2/8, 3), \mtranspose, Pstutter(10,Pseq([1,0,-2,3,-3],inf)), \ctranspose, Pseq([Pn(0,60), Pn(7,60)],inf), //later!!! \octave, Pseq([[4,5,6],[5,6,7],[7,4,5]]-1,inf), \octave, [3,4], \legato, 0.1, ) ) Pbindef(\bd1, \dur, Pseq([3/4, 1, 1, 1, 1/4], inf)) Pbindef(\bd1, \dur, Pseq([3/4, 1, 1/2, 1/2, 1, 1/4], inf)) Pbindef(\bd1, \dur, Pseq([1/2], inf)) Pdef(\bd1).play Pdef(\bd1).clear Pbindef(\hh1, \dur, 1/2) Pdef(\hh1).play Pbindef(\hh2, \dur, Pseq([Rest(1/4),1/4],inf)) Pdef(\hh2).play Pbindef(\hh3, \dur, 1/4) Pbindef(\hh3, \dur, 1/8) Pbindef(\hh3, \dur, 1/6) Pbindef(\hh3, \dur, 1/3) Pbindef(\hh3, \dur, Pxrand([Pn(1/8, 16), Pn(1/6,12)],inf) Pbindef(\hh3, \dur, Pseq([Pxrand([Pn(1/8, 16), Pn(1/6,12)], 8), Rest(8)],inf)) Pdef(\hh3).play Pdef(\hh3).stop Pdef(\hh3).clear Pbindef(\perc1, \dur, Pseq([2,1.5],inf)) Pdef(\perc1).play Pbindef(\perc2, \dur, Pseq([ Pn(1/2, 3), 1/4, 1/8, 1/4 ],inf)) Pdef(\perc2).play Pbindef(\sn1, \dur, Pseq([Rest(1),1,Rest(1), Prand([1,1/2],1)],inf) ) Pdef(\sn1).play Pbindef(\sn2, \dur, Pseq([Rest(1),1, 1/2, 2, 1/2, 1/4],inf)) Pdef(\sn2).play; //////////////////////////////////////////////// ( Pdef(\bsln1).stop; Pdef(\bd1).stop; Pdef(\bd2).stop; Pdef(\hh1).stop; Pdef(\hh2).stop; Pdef(\hh3).stop; Pdef(\sn1).stop; Pdef(\sn2).stop; Pdef(\perc1).stop; Pdef(\perc2).stop; )