import ddf.minim.*; import ddf.minim.analysis.*; Minim minim; AudioPlayer player; BeatDetect beat; BeatListener bl; SoundInfo si; Sprite visual; char mode = '1'; float levelcompose = 200; void setup() { size(500, 300); colorMode(RGB, 255); background(0); minim = new Minim(this); player = minim.loadFile("Heartland.mp3"); player.loop(); beat = new BeatDetect(player.bufferSize(), player.sampleRate()); beat.setSensitivity(300); si = new SoundInfo(); bl = new BeatListener(beat, player); player.play(); textFont(createFont("Arial", 12)); visual = new StormDraw(si); isConstruct = true; } void draw() { if ( beat.isKick() ) si.kick = 100; if ( beat.isSnare() ) si.snare = 100; if ( beat.isHat() ) si.hat = 100; si.level = player.mix.level() * levelcompose; si.kick = constrain(si.kick * 0.95, 0, 100); si.snare = constrain(si.snare * 0.95, 0, 100); si.hat = constrain(si.hat * 0.95, 0, 100); renderMode(); fill(0); noStroke(); rectMode(CORNER); rect(0,0,width, 50); rect(0,height-50, width, 50); } boolean isConstruct = false; int blendMode = 1; void keyPressed() { if(key == ','){ levelcompose = (max(levelcompose - 1, 1)); fill(255,255,255); text(levelcompose, 400, 280); } if(key == '.'){ levelcompose = levelcompose + 1; fill(255,255,255); text(levelcompose, 400, 280); } if(mode != key && int(key) > 47 && int(key) < 50) { if(visual != null) visual.reset(); mode = key; isConstruct = false; switch(mode){ case '0' : visual = new Test(si); isConstruct = true; break; case '1' : visual = new StormDraw(si); isConstruct = true; break; } } switch(int(key)){ case 33 : blendMode = 1; println("blendMode fast blur"); break; case 64 : blendMode = 2; println("blendMode lighten"); break; case 35 : blendMode = 3; println("blendMode darken "); break; case 36 : blendMode = 4; println("blendMode cut"); break; case 37: blendMode = 5; println("blendMode none"); break; } } void renderMode() { if(isConstruct){ if(blendMode == 4){ visual.render(true); } else { visual.render(false); } } switch(blendMode){ case 1 : fastBluring(); break; case 2 : lighten(); break; case 3 : darken(); break; case 4 : // break; } } void stop() { // always close Minim audio classes when you are done with them player.close(); // always stop Minim before exiting minim.stop(); // this closes the sketch super.stop(); } void fastBluring() { int pixelTmpA, pixelTmpR, pixelTmpG, pixelTmpB; int upNum, downNum, i; loadPixels(); for (int y=0; y>8)&0xFF)) + ((((pixels[i]&0x0000ff00)>>8)&0xFF) << 1) + ((((pixels[i+1]&0x0000ff00)>>8)&0xFF)); pixelTmpR = ((((pixels[i-1]&0x00ff0000)>>16)&0xFF)) + ((((pixels[i]&0x00ff0000)>>16)&0xFF) << 1) + ((((pixels[i+1]&0x00ff0000)>>16)&0xFF)); pixelTmpA = ((((pixels[i-1]&0xff000000)>>24)&0xFF)) + ((((pixels[i]&0xff000000)>>24)&0xFF) << 1) + ((((pixels[i+1]&0xff000000)>>24)&0xFF)); pixelTmpR >>= 2; pixelTmpG >>= 2; pixelTmpB >>= 2; pixelTmpA >>= 2; pixels[i] = (((0xff & pixelTmpA)<<24) | ((0xff & pixelTmpR)<<16) | ((0xff & pixelTmpG)<<8) | (0xff & pixelTmpB)); } } for (int x=0; x>8)&0xFF)) + ((((pixels[i]&0x0000ff00)>>8)&0xFF) << 1) + ((((pixels[downNum]&0x0000ff00)>>8)&0xFF)); pixelTmpR = ((((pixels[upNum]&0x00ff0000)>>16)&0xFF)) + ((((pixels[i]&0x00ff0000)>>16)&0xFF) << 1) + ((((pixels[downNum]&0x00ff0000)>>16)&0xFF)); pixelTmpA = ((((pixels[upNum]&0xff000000)>>24)&0xFF)) + ((((pixels[i]&0xff000000)>>24)&0xFF) << 1) + ((((pixels[downNum]&0xff000000)>>24)&0xFF)); pixelTmpR >>= 2; pixelTmpG >>= 2; pixelTmpB >>= 2; pixelTmpA >>= 2; pixels[i] = (((0xff & pixelTmpA)<<24) | ((0xff & pixelTmpR)<<16) | ((0xff & pixelTmpG)<<8) | (0xff & pixelTmpB)); } } updatePixels(); } void lighten() { int startNum = width*0; int endNum = width*(height-0); int upNum, downNum, i; int pixelTmpR, pixelTmpG, pixelTmpB; loadPixels(); for (i=startNum; i>8) + 1; pixelTmpR = ((pixels[i]&0x00ff0000)>>16) + 1; pixelTmpR = (int)min(pixelTmpR, 255); pixelTmpG = (int)min(pixelTmpG, 255); pixelTmpB = (int)min(pixelTmpB, 255); pixels[i] = (((0xff)<<24) | ((0xff & pixelTmpR)<<16) | ((0xff & pixelTmpG)<<8) | (0xff & pixelTmpB)); } updatePixels(); } void darken() { int startNum = width*0; int endNum = width*(height-0); int upNum, downNum, i; int pixelTmpR, pixelTmpG, pixelTmpB; loadPixels(); for (i=startNum; i>8) - 2; pixelTmpR = ((pixels[i]&0x00ff0000)>>16) - 2; pixelTmpR = (int)max(pixelTmpR, 0); pixelTmpG = (int)max(pixelTmpG, 0); pixelTmpB = (int)max(pixelTmpB, 0); pixels[i] = (((0xff)<<24) | ((0xff & pixelTmpR)<<16) | ((0xff & pixelTmpG)<<8) | (0xff & pixelTmpB)); } updatePixels(); }