void kick( float time, float dur, float amp ) { mainOut.playNote( time, dur, new Kick(amp) ); } void snare( float time, float amp ) { mainOut.playNote( time, 0.3f, new Snare(amp) ); } void hat( float time, float amp ) { mainOut.playNote( time, 0.5f, new Hat(amp) ); } class Kick implements Instrument { Line freqSweep; Line ampSweep; Oscil osc; Kick( float amp ) { osc = new Oscil( 60.f, 1.f, Waves.TRIANGLE ); ampSweep = new Line( 1.f, amp, 0.f ); freqSweep = new Line( 1.f, 120.f, 10.f ); } void noteOn( float dur ) { freqSweep.setLineTime( dur ); ampSweep.setLineTime( dur ); freqSweep.patch( osc.frequency ); ampSweep.patch( osc.amplitude ); ampSweep.activate(); freqSweep.activate(); osc.patch( mainOut ); } void noteOff() { osc.unpatch( mainOut ); } } class Snare implements Instrument { Noise noize; Multiplier noizeAmp; Line ampSweep; Delay echo; BandPass filt; Snare( float amp ) { noize = new Noise( amp, Noise.Tint.PINK ); noizeAmp = new Multiplier( 1.f ); echo = new Delay( 0.01f, 0.2f, true, true ); filt = new BandPass( 1000.f, 500.f, mainOut.sampleRate() ); noize.patch( noizeAmp ).patch( echo ).patch( filt ); } void noteOn( float dur ) { ampSweep = new Line( dur * 0.2f ); ampSweep.patch( noizeAmp.amplitude ); ampSweep.activate(); filt.patch( mainOut ); } void noteOff() { filt.unpatch( mainOut ); } } class Hat implements Instrument { Noise noize; Multiplier noizeAmp; Line ampSweep; HighPassSP filt; Hat( float amp ) { noize = new Noise( amp, Noise.Tint.WHITE ); noizeAmp = new Multiplier( 1.f ); ampSweep = new Line( 0.01, 1.f, 0.f ); filt = new HighPassSP( 10000, mainOut.sampleRate() ); noize.patch( noizeAmp ).patch( filt ); ampSweep.patch( noizeAmp.amplitude ); } void noteOn( float dur ) { ampSweep.activate(); filt.patch( mainOut ); } void noteOff() { filt.unpatch( mainOut ); } }