// time 800::ms => dur T; 4 => int N; (N*T) - (now % (N*T)) => now; // patch SndBuf buffy => Gain g => Envelope e => dac; buffy => LPF f => dac; 4 => f.Q; 24 => Std.mtof => f.freq; .2 => f.gain; 1.0 => g.gain; 0 => buffy.gain; // read "data/kick2.wav" => buffy.read; 1 => float gain; // envelope to avoid clicks 1::ms => e.duration; // infinite time loopint p; while( true ) { repeat(3) trigger( .2, .6, T ); trigger( .2, Std.rand2f(.6,.8), T/4 ); trigger( .2, .25, T/2 ); trigger( .2, .4, T/4 ); while( maybe && maybe ) { trigger( .2, .5, T/4 ); trigger( .2, .2, T/4 ); T*3 => now; trigger( .2, .3, T/2 ); } } fun void trigger( float pitch, float vel, dur T ) { // ramp down e.keyOff(); e.duration() => now; e.keyOn(); pitch => buffy.rate; vel* gain => buffy.gain; 0 => buffy.pos; T - e.duration() => now; }