import pitaru.sonia_v2_9.*; // NEEDED TO IMPORT THE SONIA LIBRARY INTO PROCESSING float x; // X VARIABLE float y; // Y VARIABLE float w; // WIDTH VARIABLE float h; // HEIGHT VARIABLE float maxVol = 350; // SETS THE MAX VOLUME float numBars = 16; // SETS THE NUMBER OF BARS IN THE SPECTRUM int numImages = 19; // VARIABLE FOR NUMBER OF IMAGES float demishedRate = 8; // DEMINISHE VARIABLE INORDER TO BRING BARS DOWN SLOWLY //*************************************** ARRAYS ********************************************************** PImage[] images = new PImage[19]; // ARRAY USED TO LOAD 19 IMAGES USED TO MAKE ME GO UP AND DOWN PImage[] currentImage = new PImage[19]; // ARRAY OF THE CURRENT IMAGE NEEDED AT THAT PARTICULAR // POINT IN THE FFT VALUE BEING PRODUCED float[] vol = new float[16]; // ARRAY OF THE 16 FFT VALUES IN ORDER TO KNOW WHEN EACH // PICTURE SHOULD BE SHOWN float[] actualvol = new float[16]; // ACTUAL VOLUME boolean[] holdVal = new boolean[16]; // ARRAY SETUP INORDER TO HOLD THE FRAME FOR ONE FRAME //**************************************** SETUP *********************************************************** void setup(){ size(1500,500); // SIZE OF THE SCREEN framerate(30); // FRAMERATE OF THE MOVIE Sonia.start(this); // START SONIA ENGINE LiveInput.start(16); // START LIVEINPUT AND RETURN 16 FFT FREQUENCY BANDS. (MUST BE A DIVISIBLE OF 16????) LiveInput.useEqualizer(true); //FUNCTION WHICH USES AN EQUALIZER ON THE FFT SIGNAL background(0,30,0); //******************************* LOAD ALL 13 IMAGES ***************************************************** images[0] = loadImage("image1.jpg"); images[1] = loadImage("image2.jpg"); images[2] = loadImage("image3.jpg"); images[3] = loadImage("image4.jpg"); images[4] = loadImage("image5.jpg"); images[5] = loadImage("image6.jpg"); images[6] = loadImage("image7.jpg"); images[7] = loadImage("image8.jpg"); images[8] = loadImage("image9.jpg"); images[9] = loadImage("image10.jpg"); images[10] = loadImage("image11.jpg"); images[11] = loadImage("image12.jpg"); images[12] = loadImage("image13.jpg"); images[13] = loadImage("image14.jpg"); images[14] = loadImage("image15.jpg"); images[15] = loadImage("image16.jpg"); images[16] = loadImage("image17.jpg"); images[17] = loadImage("image18.jpg"); images[18] = loadImage("image19.jpg"); } //************************************ DRAWS THE IMAGES ****************************************************** void draw(){ background(0,30,0); getSpectrum(); // SHOW FFT READINGS setImages(); // DETERMINES WHICH IMAGE TO PULL DEPENDING ON // THE FFT VALUE BEING PRODUCED for(int i = 0; i < numBars; i++){ image(currentImage[i],i*width/numBars,0,width/numBars,height); // THE FOR LOOP DETERMINING WHICH IMAGE TO DISPLAY } } //************************* DISPLAY IMAGES ACCORDING TO THE FFT READINGS *********************************** void setImages() { for(int i = 0; i < numBars; i++){ // FOR LOOP TO HOLD FOR ONE FRAME AT PEAK if (holdVal[i] == true) { holdVal[i] = false; } else { // ACTUAL VOLUME MINUS THE DEMINISHING RATE TO SLOWLY DECREASE THE BARS actualvol[i] = actualvol[i] - demishedRate; } if (actualvol[i] <= 0) { // INORDER TO MAKE SURE IF ACTUAL VOLUME EQUALS ZERO IT WON'T REMAIN AT ZERO actualvol[i] = 0; } if (actualvol[i] < vol[i]) { actualvol[i] = vol[i]; holdVal[i] = true; } if (i == 0) { println(actualvol[i]); } if (actualvol[i] < maxVol/numImages * 1){ currentImage[i] = images[0]; } else if (actualvol[i] < maxVol/numImages * 2){ currentImage[i] = images[1]; } else if (actualvol[i] < maxVol/numImages * 3){ currentImage[i] = images[2]; } else if (actualvol[i] < maxVol/numImages * 4){ currentImage[i] = images[3]; } else if (actualvol[i] < maxVol/numImages * 5){ currentImage[i] = images[4]; } else if (actualvol[i] < maxVol/numImages * 6){ currentImage[i] = images[5]; } else if (actualvol[i] < maxVol/numImages * 7){ currentImage[i] = images[6]; } else if (actualvol[i] < maxVol/numImages * 8){ currentImage[i] = images[7]; } else if (actualvol[i] < maxVol/numImages * 9){ currentImage[i] = images[8]; } else if (actualvol[i] < maxVol/numImages * 10){ currentImage[i] = images[9]; } else if (actualvol[i] < maxVol/numImages * 11){ currentImage[i] = images[10]; } else if (actualvol[i] < maxVol/numImages * 12){ currentImage[i] = images[11]; } else if (actualvol[i] < maxVol/numImages * 13){ currentImage[i] = images[12]; } else if (actualvol[i] < maxVol/numImages * 14){ currentImage[i] = images[13]; } else if (actualvol[i] < maxVol/numImages * 15){ currentImage[i] = images[14]; } else if (actualvol[i] < maxVol/numImages * 16){ currentImage[i] = images[15]; } else if (actualvol[i] < maxVol/numImages * 17){ currentImage[i] = images[16]; } else if (actualvol[i] < maxVol/numImages * 18){ currentImage[i] = images[17]; } else { currentImage[i] = images[18]; } } } //********************************* GETSPECTRUM VALUES FOR FFT ********************************************* void getSpectrum(){ LiveInput.getSpectrum(); // GET THE SPECTRUM LEVEL FROM A LIVE INPUT for(int i = 0; i < 16; i++){ // LOOPS THROUGH THE 16 SPECTRUMS SET ABOVE vol[i] = LiveInput.spectrum[i]; // VOL ARRAY THAT PULLS VALUES FROM THE 16 SPECTRUM ARRAY ABOVE // println(LiveInput.spectrum); // PRINTS THE FFT VALUES FROM THE MICROPHONE } } //********************** SOMETHING THAT HAS TO BE DONE FOR THE SONIA LIBRARY ******************************* public void stop(){ Sonia.stop(); super.stop(); }