Minimでビートを検知する

中心の円は,外側からキック,スネア,ハイハットが検知されたかを表している. 周りの四角形は,各周波数帯でビートが検知されたかを表している.
/** * BeatDetection * * @author aa_debdeb * @date 2015/12/20 */ import ddf.minim.*; import ddf.minim.analysis.*; import ddf.minim.effects.*; import ddf.minim.signals.*; import ddf.minim.spi.*; import ddf.minim.ugens.*; Minim minim; AudioInput in; BeatDetect beat; int sensitivity; void setup(){ size(500, 500); minim = new Minim(this); in = minim.getLineIn(Minim.STEREO, 1024); beat = new BeatDetect(); beat.detectMode(BeatDetect.FREQ_ENERGY); sensitivity = 300; beat.setSensitivity(sensitivity); } void draw(){ background(255); beat.detect(in.mix); fill(128); text("sensitivity(+/-): " + sensitivity + "mills", 20, 30); translate(width/2, height/2); float initialAngle = (TWO_PI / (beat.detectSize() + 1) / 2.0); for(int i = 0; i < beat.detectSize(); i++){ pushMatrix(); rotate(i * (TWO_PI / beat.detectSize()) + initialAngle); if(beat.isOnset(i)){ noStroke(); fill(128); } else { stroke(128); noFill(); } rect(100, -5, 100, 10); popMatrix(); } noStroke(); if(beat.isKick()){ fill(192); ellipse(0, 0, 160, 160); } if(beat.isSnare()){ fill(128); ellipse(0, 0, 100, 100); } if(beat.isHat()){ fill(96); ellipse(0, 0, 60, 60); } } void keyPressed(){ switch(key){ case '+': sensitivity += 10; break; case '-': sensitivity -= 10; break; default: return; } if(sensitivity < 0){ sensitivity = 0; } else if(sensitivity > 1000){ sensitivity = 1000; } beat.setSensitivity(sensitivity); }