import ddf.minim.analysis.*; import ddf.minim.*; import processing.opengl.*; Minim minim; AudioPlayer audioPlayer; FFT fft; BeatDetect beatDetect; int iNumAverages = 128; ViewManager viewManager; float fTime = 0; int iMouseDX = 0; int iMouseDY = 0; Scene[] aScenes; int iCurrentScene; int iNumScenes = 4; int iBackgroundR = 25; int iBackgroundG = 10; int iBackgroundB = 0; Transition CurrentTransition; boolean bTransitionActive; boolean bTransitionOutActive; ////////////////////////////////////////// void setup() { // size(1440/2, 900/2, OPENGL); size(480, 640, OPENGL); minim = new Minim(this); audioPlayer = minim.loadFile("4mat-(Day01)-Black_Lipstick.mp3", 512); audioPlayer.loop(); fft = new FFT(audioPlayer.bufferSize(), audioPlayer.sampleRate()); fft.linAverages(iNumAverages); beatDetect = new BeatDetect(audioPlayer.bufferSize(), audioPlayer.sampleRate()); beatDetect.setSensitivity(300); viewManager = new ViewManager(); aScenes = new Scene[iNumScenes]; aScenes[0] = new SceneTentacles(); aScenes[1] = new SceneCrosses(); aScenes[2] = new SceneParticles(); aScenes[3] = new SceneTargets(); iCurrentScene = 3; bTransitionActive = false; bTransitionOutActive = false; } ////////////////////////////////////////// void drawSpectrum() { viewManager.SetViewType(2); rectMode(CORNERS); fill(120); stroke(0); float fW = (float)(width+1) / (float)iNumAverages; for(int i = 0; i < fft.avgSize(); i++) { rect(i*fW, height, (i+1)*fW, height - fft.getAvg(i)*5); } box(50); } ////////////////////////////////////////// void draw() { fTime += 1.0f / 60.0f; iMouseDX = mouseX - pmouseX; iMouseDY = mouseY - pmouseY; background(iBackgroundR, iBackgroundG, iBackgroundB); fft.forward(audioPlayer.mix); beatDetect.detect(audioPlayer.mix); // drawSpectrum(); // /* if (beatDetect.isKick()) { print("scene kick\n"); aScenes[iCurrentScene].Kick(); } if (beatDetect.isHat()) { print("scene fastkick\n"); aScenes[iCurrentScene].FastKick(); } if (beatDetect.isSnare()) { print("scene change\n"); NextScene(); } // */ aScenes[iCurrentScene].Draw(); if (bTransitionActive) { CurrentTransition.Draw(); if (CurrentTransition.CanTransition()) { int iOldScene = iCurrentScene; do { iCurrentScene = (int)random(iNumScenes); } while (iCurrentScene == iOldScene); bTransitionActive = false; bTransitionOutActive = true; aScenes[iCurrentScene].Start(); } } else if (bTransitionOutActive) { CurrentTransition.Draw(); if (CurrentTransition.HasTransitioned()) { bTransitionOutActive = false; } } } ////////////////////////////////////////// void keyPressed() { if (key == 'k') { aScenes[iCurrentScene].Kick(); } if (key == 'h') { aScenes[iCurrentScene].FastKick(); } else if (key == 's') { NextScene(); } } ////////////////////////////////////////// void NextScene() { if (!bTransitionActive && !bTransitionOutActive) { switch ((int)random(5)) { case 0: CurrentTransition = new TransitionScale(); break; case 1: CurrentTransition = new TransitionFill(); break; default: CurrentTransition = new Transition(); break; } bTransitionActive = true; } }