import krister.Ess.*; AudioInput in; int bufferSize; FFT analysis; BeatDetect frame; boolean equalize = false; boolean limit = false; boolean useSmooth = true; float dampAmt = 1.0; boolean useAvg = false; int numAvg = 64; float upMult = 0.95; int kp = 0; int sp = 0; int hp = 0; int op = 0; void setup() { size(800, 600); framerate(40); // smooth(); Ess.start(this); Ess.masterVolume(1); bufferSize = 1024; in = new AudioInput(bufferSize); analysis = new FFT(bufferSize); analysis.smooth = useSmooth; analysis.equalizer(equalize); analysis.noLimits(); analysis.damp(dampAmt); analysis.averages(numAvg); analysis.updateMultiplier = upMult; frame = new BeatDetect(in.size, in.sampleRate); frame.detectMode("FREQ_ENERGY"); in.start(); } void draw() { background(0); if ( frame.isOnset() ) { drawBall(650, 150); op = 3; } else if ( op > 0 ) { drawBall(650, 150); op--; } if ( frame.isKick() ) { drawBall(50, 150); kp = 3; } else if ( kp > 0 ) { drawBall(50, 150); kp--; } if ( frame.isSnare() ) { drawBall(250, 150); sp = 3; } else if ( sp > 0 ) { drawBall(250, 150); sp--; } if ( frame.isHat() ) { drawBall(450, 150); hp = 3; } else if ( hp > 0 ) { drawBall(450, 150); hp--; } // draw spectrum translate(5, 0); stroke(255); if ( useAvg ) { strokeWeight(3); for (int i = 0; i < analysis.averages.length; i++) { line(i*6, 0, i*6, analysis.averages[i]*100); } } else { strokeWeight(1); for (int i = 0; i < analysis.spectrum.length; i++) { line(i*2, 0, i*2, analysis.spectrum[i]*100); } } translate(-5, 0); // draw lines for eq stroke(0, 0, 255); strokeWeight(1); line(0, 10, width, 10); stroke(0, 255, 0); line(0, 50, width, 50); stroke(255, 0, 0); line(0, 100, width, 100); // draw onset graph frame.drawGraph(); } void drawBall(int x, int y) { noStroke(); fill(255); ellipse(x, y, 20, 20); } void keyPressed() { if ( key == 'a' ) { useAvg = (useAvg ? false : true); } if ( key == 'e' ) { equalize = (equalize ? false : true); analysis.equalizer(equalize); } if ( key == 'l' ) { if ( limit ) { analysis.noLimits(); limit = false; } else { analysis.limits(); limit = true; } } if ( key == 'f' ) { dampAmt += 0.1; if ( dampAmt > 1 ) dampAmt = 1; println("Damp amount changed to " + dampAmt + "."); analysis.damp(dampAmt); //frame.spect.damp(dampAmt); } if ( key == 'd' ) { dampAmt -= 0.1; if ( dampAmt < 0 ) dampAmt = 0; println("Damp amount changed to " + dampAmt + "."); analysis.damp(dampAmt); //frame.spect.damp(dampAmt); } if ( key == '1' ) { frame.detectMode("SOUND_ENERGY"); } if ( key == '2' ) { frame.detectMode("FREQ_ENERGY"); } } public void audioInputData(AudioInput theInput) { analysis.getSpectrum(in); frame.detect(in); } public void stop() { Ess.stop(); super.stop(); }