import com.sun.image.codec.jpeg.*; import java.awt.image.*; import java.util.Collections; import ddf.minim.*; import ddf.minim.analysis.*; int w= 800; int h= 600; int _w= w/6; int _h= h/2; boolean frame_set= true; boolean doInit= true; int sensitivity= 1000; float quality= 0.2; ArrayList idx_top= new ArrayList(); ArrayList idx_btm= new ArrayList(); ArrayList active= new ArrayList(6); Minim minim; AudioInput in; BeatDetect bLeft, bRight; int bufSize= 2048; int l, r; PGraphics img; PImage jpg; void setup(){ size(w, h); background(0); stroke(255); minim = new Minim(this); //minim.debugOn(); in= minim.getLineIn(Minim.STEREO, bufSize); for(int i=0; i<6; i++){ idx_top.add(i); idx_btm.add(i); active.add(false); } img= createGraphics(w, h, P2D); bLeft= new BeatDetect(in.bufferSize(), in.sampleRate()); bLeft.setSensitivity(sensitivity); bRight= new BeatDetect(in.bufferSize(), in.sampleRate()); bLeft.setSensitivity(sensitivity); l= 0; r= 0; frameRate(12); } void draw(){ boolean isClick = false; bLeft.detect(in.left); bRight.detect(in.right); frame.setLocation(1280, 0); active.set(0, bLeft.isKick()); active.set(1, bLeft.isSnare()); active.set(2, bLeft.isHat()); active.set(3, bRight.isKick()); active.set(4, bRight.isSnare()); active.set(5, bRight.isHat()); if((Boolean) active.get(0)){ Collections.shuffle(idx_top); isClick= isClick || true; } if((Boolean) active.get(3)){ Collections.shuffle(idx_btm); isClick= isClick || true; } img.beginDraw(); img.background(0); for(int i=0; i<6;i++){ int idx_t= (Integer) idx_top.get(i); int idx_b= (Integer) idx_btm.get(i); if((Boolean) active.get(idx_t)){ img.rect(idx_t*_w, 0, _w, _h); } if((Boolean) active.get(idx_b)){ img.rect(idx_t*_w, _h-1, _w, _h); } } img.endDraw(); if(isClick || doInit){ jpg= CAA(bufferImage(img, quality), w, h); doInit= false; } img.blend(jpg, 0, 0, w, h, 0,0, w, h, DARKEST); image(img, 0, 0); } void keyPressed(){ int value= key-48; if(value==0){ value= 10; } bLeft.setSensitivity(value*100); bRight.setSensitivity(value*100); } public void init() { frame.removeNotify(); frame.setUndecorated(true); super.init(); } void stop(){ in.close(); minim.stop(); super.stop(); } byte[] bufferImage(PImage srcimg, float quality) { ByteArrayOutputStream out = new ByteArrayOutputStream(); BufferedImage img = new BufferedImage(srcimg.width, srcimg.height, 2); img = (BufferedImage) createImage(srcimg.width,srcimg.height); for (int i = 0; i < srcimg.width; i++) for (int j = 0; j < srcimg.height; j++) img.setRGB(i, j, srcimg.pixels[j * srcimg.width + i]); try { JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); JPEGEncodeParam encpar = encoder.getDefaultJPEGEncodeParam(img); encpar.setQuality(quality, false); encoder.setJPEGEncodeParam(encpar); encoder.encode(img); } catch (FileNotFoundException e) { System.out.println(e); } catch (IOException ioe) { System.out.println(ioe); } return out.toByteArray(); } PImage CAA(byte[] bytes, int width, int height){ PImage img; String bin; color[] bits= { color(0), color(255) }; int _width= ceil(sqrt(bytes.length*6)); int _height= ceil (bytes.length*8/_width); //int _height= h; //int _width= ceil(bytes.length*8/_height); img= createImage(_width, _height, RGB); img.loadPixels(); for(int i=0; i