// time 800::ms => dur T; T - (now % T) => now; // patch SawOsc s => LPF f => ADSR e => JCRev r => dac; // set envelope e.set( 10::ms, 5::ms, .4, 10::ms ); .02 => r.mix; .25 => r.gain; // infinite time loop int p; while( true ) { // play trigger( Std.rand2(4, 6)*12 => p, Std.rand2f(.5,.6), 50::ms ); p * 50.0 => f.freq; 1 + 20.0/p => f.Q; // wait 350::ms => now; } fun void trigger( float pitch, float vel, dur T ) { // trigger pitch => Std.mtof => s.freq; vel => s.gain; // open e.keyOn(); // wait T - e.releaseTime() => now; // close e.keyOff(); // wait e.releaseTime() => now; }