// the Dinky class Dinky { // synthesis patch Impulse i => BiQuad f => Envelope e; // set filter parameters .99 => f.prad; 1 => f.eqzs; .2 => f.gain; // set the envelope .004::second => e.duration; public void radius( float rad ) { rad => f.prad; } public void gain( float g) { g => i.gain; } public void connect( UGen ugen ) { e => ugen; } // trigger public void trigger( float freq ) { 1.0 => i.next; freq => f.pfreq; e.keyOn(); } // trigger public void trigger( int pitch ) { trigger( Std.mtof( pitch ) ); } // keyOff public void keyOff() { e.keyOff(); } } // instantiate a Dinky Dinky dink; // connect Gain g => NRev r => dac; // mix .05 => r.mix; // dry g => dac; // connect dink.connect( g ); // set the radius dink.radius( .999 ); 130::ms => dur D; play( 80, D ); play( 82, D ); play( 84, D ); play( 85, D ); play( 87, D ); play( 85, D ); play( 83, D ); play( 82, D ); play( 80, D ); // wait 2::second => now; // play fun void play( int pitch, dur T ) { // trigger dink.trigger( pitch ); // let time pass T - (10::ms) => now; // close the envelope dink.keyOff(); // let a bit more time pass 10::ms => now; }