BandedWG inst0 => JCRev rev0 => Envelope master => Pan2 pan0 => dac; BandedWG inst1 => master => Pan2 pan1 => dac; TubeBell inst2 => Envelope env0 => rev0 => master => Pan2 pan2 => dac; TubeBell inst2a => env0 => rev0 => master => Pan2 pan2a => dac; inst2 => master => dac; inst2a => master => dac; Shakers inst3 => rev0 => master => Pan2 pan3 => dac; inst3 => pan3 => dac; BlowHole inst4 => rev0 => master => Pan2 pan4 => dac; BlowHole inst4b => rev0 => master => Pan2 pan4a => dac; 245::ms => dur beat; fun float m2f(int n) { return Std.mtof(n)+(-0.05+0.1*Std.randf()); } fun float fz(float f) { return f + Std.randf()*f/16; } fun void rest() { beat => now; } fun float pm1() { return (-0.25 + Std.randf()/2); } fun void note(StkInstrument inst, float v, int n, dur d, float pressure, float pos ) { m2f(n) => inst.freq; fz(pressure) => inst0.bowPressure; //fz(pos) => inst0.bowPosition; //fz(v) => inst.startBowing; fz(v) => inst.noteOn; d => now; // 1.0 => inst.stopBowing; } fun void line(StkInstrument inst, Pan2 pan, float vol, int root, int times) { repeat(times) { pan.pan(pm1()); note(inst, vol, root, beat, 1.0, 1.0); pan.pan(pm1()); note(inst, vol, root-3, beat*2, 0.7, 0.75); pan.pan(pm1()); rest(); pan.pan(pm1()); note(inst, vol, root-4, beat, 0.8, 0.5); pan.pan(pm1()); note(inst, vol, root-2, beat, 1.0, 0.7); pan.pan(pm1()); rest(); pan.pan(pm1()); note(inst, vol, root-3, beat*2, 0.3, 0.25); pan.pan(pm1()); } } fun void line2(StkInstrument inst, Pan2 pan, float vol, int root, int times) { repeat(times) { pan.pan(pm1()); note(inst, vol, root, beat, 0.5, 1.0); pan.pan(pm1()); note(inst, vol, root-1, beat, 0.7, 0.75); pan.pan(pm1()); note(inst, vol, root, beat, 0.8, 0.5); pan.pan(pm1()); note(inst, vol, root-1, beat, 1.0, 0.7); pan.pan(pm1()); note(inst, vol, root, beat, 0.3, 0.25); pan.pan(pm1()); note(inst, vol, root-1, beat, 0.3, 0.25); pan.pan(pm1()); note(inst, vol, root, beat, 0.3, 0.25); pan.pan(pm1()); note(inst, vol, root-1, beat, 0.3, 0.25); pan.pan(pm1()); } } dac.gain(4.3); master.duration(12*beat); master.value(0); master.target(0.5); master.keyOn(); 2::second => now; repeat(2) { spork ~ line(inst0, pan0, 0.0024, 36, 12); beat*32 => now; spork ~ line2(inst1, pan1, 1.0, 36, 12); beat*64 => now; spork ~ line(inst2, pan2, 0.025, 36+36, 16); spork ~ line(inst2a, pan2a, 0.025, 36+31, 14); env0.duration(32*beat); env0.target(0.03); env0.keyOn(); beat*64 => now; spork ~ line2(inst3, pan3, 0.03, 36+12, 16); beat*64 => now; spork ~ line(inst4, pan4, 0.00035, 36, 8); 4::ms => now; spork ~ line(inst4b, pan4a, 0.0003, 36-12, 12); beat*64 => now; spork ~ line(inst2, pan2, 0.03, 36+31, 16); beat/2 => now; spork ~ line(inst2a, pan2a, 0.03, 36+7, 14); env0.duration(32*beat); env0.target(0.03); env0.keyOn(); beat*64 => now; beat*48 => now; spork ~ line2(inst4, pan4, 0.00015, 36+3, 6); beat => now; spork ~ line(inst4b, pan4a, 0.00035, 36-8, 12); beat*64 => now; spork ~ line(inst1, pan1, 1.0, 31, 12); beat*64 => now; spork ~ line(inst3, pan3, 0.02, 36+5, 16); beat*64 => now; spork ~ line(inst2, pan2, 0.025, 36+36, 16); spork ~ line2(inst2a, pan2a, 0.025, 36+31, 14); env0.duration(32*beat); env0.target(0.03); env0.keyOn(); } master.keyOff(); master.duration(32*beat); master.target(0); master.keyOn(); (256*beat)=> now;