s.boot; // load instrument and presets ( var perc_gen_source = (("SC_ALGS_PATH".getenv)+/+"synths/perc_gen/instr.scd").load; ~perc_gen_dict = NodeDictionary.newFrom(perc_gen_source); ~perc_gen_presets = (("SC_ALGS_PATH".getenv)+/+"synths/perc_gen/presets.scd").load; ) ~perc_gen_presets.do({ |preset| preset.key.postln; // Make Ndef with same name as preset name ~perc_gen_dict.makeSourceNDef(preset.key); // Apply settings preset.value.do({|v| Ndef(preset.key).set(v[0], v[1])}); Ndef(preset.key).play; }); // add some Tdefs Tdef(\kick, { loop{ Ndef(~perc_gen_presets[0].key).set(\amp, 8.dbamp); Ndef(~perc_gen_presets[0].key).set(\gate, 1); 1.wait; } }).play; Tdef(\kick2, { (1/3).wait; loop{ Ndef(~perc_gen_presets[0].key).set(\amp, 4.dbamp); Ndef(~perc_gen_presets[0].key).set(\gate, 1); 1.wait; } }).play; Tdef(\hat, { var amps = Pseq([1, 1, 0, 1, 0, 1]).loop.asStream; loop{ Ndef(~perc_gen_presets[1].key).set(\gate, 1); Ndef(~perc_gen_presets[1].key).set(\amp, -6.dbamp * amps.next); (1/6).wait; } }).play; Tdef(\snare, { loop{ Ndef(~perc_gen_presets[4].key).set(\amp, -8.dbamp); Ndef(~perc_gen_presets[4].key).set(\gate, 1); (4/3).wait; } }).play; Tdef(\wood, { var amps = Pbjorklund(4, 7).loop.asStream; loop{ Ndef(~perc_gen_presets[3].key).set(\gate, 1); Ndef(~perc_gen_presets[3].key).set(\amp, -6.dbamp * amps.next); (1/8).wait; } }).play; Ndef(\fx).ar(2); Ndef(\fx, { var in = \in.ar([0, 0]); var t1 = \t1.kr(0.5); var t2 = \t2.kr(0.5); [in[0] + CombC.ar(in[0], 1.0, t1, 2.0), in[1] + CombC.ar(in[1], 1.0, t2, 2.0)]; }); Ndef(\fx).play; ( // WORKS ONLY FOR LAST! [0, 1, 3, 4].do({ |index| Ndef(\fx) <<>.in Ndef(~perc_gen_presets[index].key); }); ) // constrol fx delay time Tdef(\fxdelay, { var dTimes1 = Pseq([1/8, 1/16, 1/3]).loop.asStream; var dTimes2 = Pseq([1/16, 1/3, 1/8]).loop.asStream; loop{ Ndef(\fx).set(\t1, dTimes1); Ndef(\fx).set(\t2, dTimes2); (4/3).wait; } }).play; ( Ndef(\fx2).ar(2); Ndef(\fx2, { var in = \in.ar([0, 0]); var sig = PitchShift.ar(in, 0.2, Lag.kr(LFSaw.kr(0.1).range(0.2, 0.25)), 1/2); sig = DiodeRingMod.ar(sig, LFPulse.ar(160)); FreeVerb.ar(sig, 0.8, 1.0, 0.25) * 10; }); Ndef(\fx2).play; ) Ndef(\fx2) <<>.in Ndef(~perc_gen_presets[1].key) Tdef(\fxswitch, { var source = Pseq([1, 3]).loop.asStream; loop{ Ndef(\fx2) <<>.in Ndef(~perc_gen_presets[source.next].key); 6.wait; } }).play; Tdef(\fxswitch).stop ( Ndef.clear; Tdef.clear; )