Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Author: fBlah
- import java.awt.*;
- import java.awt.image.*;
- import processing.serial.*;
- import ddf.minim.*;
- import ddf.minim.analysis.*;
- import controlP5.*;
- DisposeHandler dh;
- Minim minim;
- AudioInput in;
- FFT fft;
- AudioPlayer song;
- float[] peaks;
- int peak_hold_time = 10; // how long before peak decays
- int[] peak_age; // tracks how long peak has been stable, before decaying
- // how wide each 'peak' band is, in fft bins
- int binsperband = 10;
- int peak = 25;
- int peaksize; // how many individual peak bands we have (dep. binsperband)
- float gain = 40; // in dB
- float dB_scale = 2.0; // pixels per dB
- int buffer_size = 1024; // also sets FFT size (frequency resolution)
- float sample_rate = 44100;
- int spectrum_height = 200; // determines range of dB shown
- int spectrum_width = 128; // determines how much of spectrum we see
- int sampleRate = 44100;
- int timeSize = 1024;
- //-
- ControlP5 cp5;
- boolean AmbiLight = true, Case = true, AvgCase = false, Random = false, MusicC = false, MusicA = false, Rythm = false, Once = true, Auto = false, Glow = false, bAlt = false, gAlt = false;
- BufferedImage screenshot;
- int fps = 7;
- int R,G,B;
- int rp, gp, bp; //mode 14 , 15
- short aR = 250,aG = 0,aB = 0; //mode 14 , 15
- int cR = 0,cG = 0,cB = 0; // Average of ambilight
- float inc = 0.1;
- float angle = 0;
- int aAge = 3;
- int type = 0;
- int maxtype = 2;
- int gtn = 1000, gtf;//GlowTime on/off
- int mode = 5;
- int maxmode = 20;
- int timeCur, timeLast, lastGlow;
- int peakA;
- int portNo = 1;
- int noFails = 0;
- /*
- // using 12 RGB LEDs
- static final int led_num_x = 4;
- static final int led_num_y = 4;
- static final int leds[][] = new int[][] {
- {1,3}, {0,3}, // Bottom edge, left half
- {0,2}, {0,1}, // Left edge
- {0,0}, {1,0}, {2,0}, {3,0}, // Top edge
- {3,1}, {3,2}, // Right edge
- {3,3}, {2,3}, // Bottom edge, right half
- };
- */
- // using 25 RGB LEDs
- static final int led_num_x = 28;
- static final int led_num_y = 14;
- int leds[][] = new int[][] {
- {6+1,11+1}, {5+1,11+1}, {4+1,11+1}, {3+1,11+1}, {2+1,11+1}, {1+1,11+1}, {0+1,11+1}, {0+1,10+1}, {0+1,9+1}, {0+1,8+1}, {0+1,7+1}, // Bottom edge, left half
- {0+1,6+1}, {0+1,5+1}, {0+1,4+1}, {0+1,3+1}, {0+1,2+1}, {0+1,1+1}, {0+1,0+1}, {1+1,0+1}, {2+1,0+1}, {3+1,0+1},
- {4+1,0+1}, {5+1,0+1}, {6+1,0+1}, {7+1,0+1}, {8+1,0+1}, {9+1,0+1}, {10+1,0+1}, {11+1,0+1}, {12+1,0+1}, {13+1,0+1},
- {14+1,0+1}, {15+1,0+1}, {16+1,0+1}, {17+1,0+1}, {18+1,0+1}, {19+1,0+1}, {20+1,0+1}, {21+1,0+1}, {22+1,0+1}, {23+1,0+1},
- {24+1,0+1}, {25+1,0+1}, {25+1,1+1}, {25+1,2+1}, {25+1,3+1}, {25+1,4+1}, {25+1,5+1}, {25+1,6+1}, {25+1,7+1}, {25+1,8+1},
- {25+1,9+1}, {25+1,10+1}, {25+1,11+1}, {24+1,11+1}, {23+1,11+1}, {22+1,11+1}, {21+1,11+1}, {20+1,11+1}, {19+1,11+1}
- };
- static final short fade = 70;
- static final int minBrightness = 120;
- // Preview windows
- int window_width;
- int window_height;
- int preview_pixel_width;
- int preview_pixel_height;
- int[][] pixelOffset = new int[leds.length][256];
- // RGB values for each LED
- short[][] ledColor = new short[leds.length][3],
- prevColor = new short[leds.length][3];
- short chassis[] = { 255, 0, 0 } ;
- int ABright = 0, CBright = 0, CBrightt = 0, ABrightt = 0;
- byte[][] gamma = new byte[256][3];
- byte[] serialData = new byte[ leds.length * 3 + 2 + 3 + 2];
- int data_index = 0;
- //creates object from java library that lets us take screenshots
- Robot bot;
- // bounds area for screen capture
- Rectangle dispBounds;
- // Monitor Screen information
- GraphicsEnvironment ge;
- GraphicsConfiguration[] gc;
- GraphicsDevice[] gd;
- Serial port;
- void setup(){
- timeCur = timeLast = millis();
- dh = new DisposeHandler(this);
- frameRate(fps);
- int[] x = new int[16];
- int[] y = new int[16];
- minim = new Minim(this);
- // use the getLineIn method of the Minim object to get an AudioInput
- in = minim.getLineIn(Minim.MONO,1024,44100);
- fft = new FFT(in.bufferSize(), in.sampleRate());
- fft.window(FFT.HAMMING);
- // initialize peak-hold structures
- peaksize = 1+Math.round(fft.specSize()/binsperband);
- peaks = new float[peaksize];
- peak_age = new int[peaksize];
- // calculate averages based on a miminum octave width of 11 Hz
- // split each octave into 1 bands - this should result in 12 averages
- fft.logAverages(11, 1); // results in 12 averages, each corresponding to an octave, the first spanning 0 to 11 Hz.
- //-
- cp5 = new ControlP5(this);
- cp5.addButton("AmbiLight",10,20,60,50,20);//ambilight mode
- cp5.addButton("Case",10,80,60,30,20);// chassis light on off
- cp5.addButton("AvgCase",10,80,40,40,20);// chassis light based on ambilight
- cp5.addButton("Random",10,120,60,40,20);//chassis light random
- cp5.addButton("MusicC",10,170,60,40,20);//chassis light based on music frequency
- cp5.addButton("MusicA",10,220,60,40,20);//chassis light based on music beat
- cp5.addButton("Glow",10,220,40,30,20);// glow
- cp5.addButton("T",10,250,40,15,20);// glow type breathe, strobe 1, strobe 2
- cp5.addButton("Rythm",10,270,60,50,20);// music mode for ambilight
- cp5.addButton("M",10,320,60,15,20);// Mode of rythm 20 modes/visualizations
- cp5.addButton("A",10,335,60,15,20);// auto Mode
- cp5.addSlider("ABright",0,255,120,20,100,10,100);//ambilight brightness
- cp5.addSlider("CBright",0,255,120,50,100,10,100);//chassis light brightness
- cp5.addSlider("R",0,255,120,80,100,10,100);//chassis light red component
- cp5.controller("R").setColorForeground(#FC0000);
- cp5.addSlider("G",0,255,120,110,100,10,100);//chassis light green
- cp5.controller("G").setColorForeground(#0BFC00);
- cp5.addSlider("B",0,255,120,140,100,10,100);// chassis light blue
- cp5.controller("B").setColorForeground(#002CFC);
- cp5.addSlider("gtn",0,10000,120,170,100,10,100);//Strobe light on and off times is ms n -on f - off
- cp5.addSlider("gtf",0,10000,120,200,100,10,100);//Strobe light on and off times is ms
- ABright = CBright = 120;
- R = 185; //For the scrolly
- G = 75; //
- B = 10; //
- //-
- // ge - Grasphics Environment
- ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
- // gd - Grasphics Device
- gd = ge.getScreenDevices();
- DisplayMode mode = gd[0].getDisplayMode();
- dispBounds = new Rectangle(0, 0, mode.getWidth(), mode.getHeight());
- // Preview windows
- window_width = mode.getWidth()/5;
- window_height = mode.getHeight()/5;
- preview_pixel_width = window_width/led_num_x;
- preview_pixel_height = window_height/led_num_y;
- // Preview window size
- size(window_width, window_height);
- //standard Robot class error check
- try {
- bot = new Robot(gd[0]);
- }
- catch (AWTException e) {
- println("Robot class not supported by your system!");
- exit();
- }
- float range, step, start;
- for(int i=0; i<leds.length; i++) { // For each LED...
- // Precompute columns, rows of each sampled point for this LED
- // --- for columns -----
- range = (float)dispBounds.width / led_num_x;
- // we only want 256 samples, and 16*16 = 256
- step = range / 16.0;
- start = range * (float)leds[i][0] + step * 0.5;
- for(int col=0; col<16; col++) {
- x[col] = (int)(start + step * (float)col);
- }
- // ----- for rows -----
- range = (float)dispBounds.height / led_num_y;
- step = range / 16.0;
- start = range * (float)leds[i][1] + step * 0.5;
- for(int row=0; row<16; row++) {
- y[row] = (int)(start + step * (float)row);
- }
- // ---- Store sample locations -----
- // Get offset to each pixel within full screen capture
- for(int row=0; row<16; row++) {
- for(int col=0; col<16; col++) {
- pixelOffset[i][row * 16 + col] = y[row] * dispBounds.width + x[col];
- }
- }
- }
- // Open serial port. this assumes the Arduino is the
- // first/only serial device on the system. If that's not the case,
- // change "Serial.list()[0]" to the name of the port to be used:
- // you can comment it out if you only want to test it without the Arduino
- port = new Serial(this, Serial.list()[portNo], 115200);
- // A special header expected by the Arduino, to identify the beginning of a new bunch data.
- serialData[0] = 'a';
- serialData[1] = 'd';
- //song = minim.loadFile("beat.mp3");
- //song.play();
- }
- void draw(){
- clear();
- timeCur = millis();
- // perform a forward FFT on the samples in input buffer
- fft.forward(in.mix);
- float avg = 0.0;
- cR = cG = cB = 0;
- if(Auto&&Rythm)
- {
- if(timeCur - timeLast > random(random(1000000)))
- {
- mode = (int)random(maxmode+1);
- aR = (short)random(256);
- aG = (short)random(256);
- aB = (short)random(256);
- timeCur = timeLast = millis();
- }
- }
- if(MusicC||MusicA||Rythm)
- {
- for(int i = 0; i < peaksize; ++i) {
- // update decays
- if (peak_age[i] < peak_hold_time) {
- ++peak_age[i];
- } else {
- peaks[i] -= 50.0;//aging rate
- if (peaks[i] < 0) { peaks[i] = 0; }
- }
- }
- for(int i = 0; i < spectrum_width; i++) {
- float val = dB_scale*(20*((float)Math.log10(fft.getBand(i))) + gain);
- if (fft.getBand(i) == 0) { val = -200; } // avoid log(0)
- int y = spectrum_height - Math.round(val);
- if (y > spectrum_height) { y = spectrum_height; }
- // update the peak record
- // which peak bin are we in?
- int peaksi = i/binsperband;
- if (val > peaks[peaksi]) {
- peaks[peaksi] = val;
- // reset peak age counter
- peak_age[peaksi] = 0;
- }
- }
- if(MusicC)
- {
- chassis[0] = chassis[1] = chassis[2] = (byte)0;
- for(int i = 0; i < 3; i++) {
- chassis[0] += peaks[i]/2.2;
- }
- for(int i = 3; i < 11; i++) {
- chassis[1] += peaks[i]/4;
- }
- for(int i = 12; i < 52; i++) {
- chassis[2] += peaks[i]*2.2;
- }
- for(int i = 0; i < 3; i++){
- if(chassis[i] < 170)
- chassis[i] = 0;
- }
- //delay(100);
- }
- else
- {
- chassis[0] = (byte)R;
- chassis[1] = (byte)G;
- chassis[2] = (byte)B;
- }
- for (int i = 0; i < 12; i++) { // 12 is the number of bands
- int lowFreq;
- if ( i == 0 ) {
- lowFreq = 0;
- }
- else {
- lowFreq = (int)((sampleRate/2) / (float)Math.pow(2, 12 - i));
- }
- int hiFreq = (int)((sampleRate/2) / (float)Math.pow(2, 11 - i));
- // we're asking for the index of lowFreq & hiFreq
- int lowBound = fft.freqToIndex(lowFreq); // freqToIndex returns the index of the frequency band that contains the requested frequency
- int hiBound = fft.freqToIndex(hiFreq);
- //println("range " + i + " = " + "Freq: " + lowFreq + " Hz - " + hiFreq + " Hz " + "indexes: " + lowBound + "-" + hiBound);
- // calculate the average amplitude of the frequency band
- float avg1 = fft.calcAvg(lowBound, hiBound);
- //println(avg1);
- avg = max(avg,avg1);
- }
- }
- else
- {
- chassis[0] = (byte)R;
- chassis[1] = (byte)G;
- chassis[2] = (byte)B;
- }
- if(Random){
- chassis[0]=(short)(random(245)+10);
- chassis[1]=(short)(random(245)+10);
- chassis[2]=(short)(random(245)+10);
- }
- if(AmbiLight)
- {
- //get screenshot into object "screenshot" of class BufferedImage
- screenshot = bot.createScreenCapture(dispBounds);
- }
- // Pass all the ARGB values of every pixel into an array
- int[] screenData = ((DataBufferInt)screenshot.getRaster().getDataBuffer()).getData();
- data_index = 2; // 0, 1 are predefined header
- for(int i=0; i<leds.length; i++) { // For each LED...
- int r = 0;
- int g = 0;
- int b = 0;
- if(AmbiLight)
- {
- for(int o=0; o<256; o++)
- { //ARGB variable with 32 int bytes where
- int pixel = screenData[ pixelOffset[i][o] ];
- r += pixel & 0x00ff0000;
- g += pixel & 0x0000ff00;
- b += pixel & 0x000000ff;
- }
- // Blend new pixel value with the value from the prior frame
- cR += ledColor[i][0] = (short)(((( r >> 24) & 0xff) * (255 - fade) + prevColor[i][0] * fade) >> 8);
- cG += ledColor[i][1] = (short)(((( g >> 16) & 0xff) * (255 - fade) + prevColor[i][1] * fade) >> 8);
- cB += ledColor[i][2] = (short)(((( b >> 8) & 0xff) * (255 - fade) + prevColor[i][2] * fade) >> 8);
- }
- if(Rythm)
- {
- if(mode < 2)
- {
- if(Once)
- {
- r = (int)(avg + abs(in.left.get(1) * 100 + in.left.get(2) * 50 + in.right.get(1) * 50 + in.right.get(2) * 50 - random(avg)));
- g = (int)(avg + abs(in.left.get(5) * 50 + in.left.get(6) * 100 + in.right.get(5) * 50 + in.right.get(6) * 50 - random(avg)));
- b = (int)(avg + abs(in.left.get(9) * 50 + in.left.get(10) * 50 + in.right.get(9) * 100 + in.right.get(10) * 50 - random(avg)));
- if(mode == 0)
- {
- prevColor[2][0] = prevColor[1][0] = prevColor[0][0] = (short)(r);
- prevColor[2][1] = prevColor[1][1] = prevColor[0][1] = (short)(g);
- prevColor[2][2] = prevColor[1][2] = prevColor[0][2] = (short)(b);
- for(int k = 0 ; k < 3; k++)
- for(int j = leds.length - 1; j > 0; j--)
- {
- prevColor[j][0]=prevColor[j - 1][0];
- prevColor[j][1]=prevColor[j - 1][1];
- prevColor[j][2]=prevColor[j - 1][2];
- }
- }
- if(mode == 1)
- {
- prevColor[leds.length - 1][0] = (short)(r);
- prevColor[leds.length - 1][1] = (short)(g);
- prevColor[leds.length - 1][2] = (short)(b);
- for(int k = 0 ; k < 3; k++)
- for(int j = 1; j < leds.length ; j++)
- {
- prevColor[j - 1][0]=prevColor[j][0];
- prevColor[j - 1][1]=prevColor[j][1];
- prevColor[j - 1][2]=prevColor[j][2];
- }
- }
- Once = false;
- }
- ledColor[i][0] = (short)(prevColor[i][0]);
- ledColor[i][1] = (short)(prevColor[i][1]);
- ledColor[i][2] = (short)(prevColor[i][2]);
- }
- if(mode == 2)
- {
- if(i < leds.length/2)
- {
- if(abs(in.left.get(1) * 100) > i)
- r = (int)(avg + abs(in.left.get(1) * 100 + in.left.get(2) * 100));
- else
- r = (int)(avg);
- if(abs(in.left.get(5) * 100) > i)
- g = (int)(avg + abs(in.left.get(8) * 100 + in.left.get(9) * 100));
- else
- g = (int)(avg);
- if(abs(in.left.get(8) * 100) > i)
- b = (int)(avg + abs(in.left.get(15) * 100 + in.left.get(16) * 100));
- else
- b = (int)(avg);
- }else{
- if(abs(in.right.get(1) * 100) > (leds.length - i))
- r = (int)(avg + abs(in.right.get(1) * 100 + in.right.get(2) * 100));
- else
- r = (int)(avg);
- if(abs(in.right.get(5) * 100) > (leds.length - i))
- g = (int)(avg + abs(in.right.get(8) * 100 + in.right.get(9) * 100));
- else
- g = (int)(avg);
- if(abs(in.right.get(8) * 100) > (leds.length - i))
- b = (int)(avg + abs(in.right.get(15) * 100 + in.right.get(16) * 100));
- else
- b = (int)(avg);
- }
- if(AmbiLight)
- {
- ledColor[i][0] += (short)(((r) * (255 - fade) + prevColor[i][0] * fade) >> 8);
- ledColor[i][1] += (short)(((g) * (255 - fade) + prevColor[i][1] * fade) >> 8);
- ledColor[i][2] += (short)(((b) * (255 - fade) + prevColor[i][2] * fade) >> 8);
- }else{
- ledColor[i][0] = (short)(((r) * (255 - fade) + prevColor[i][0] * fade) >> 8);
- ledColor[i][1] = (short)(((g) * (255 - fade) + prevColor[i][1] * fade) >> 8);
- ledColor[i][2] = (short)(((b) * (255 - fade) + prevColor[i][2] * fade) >> 8);
- }
- }
- //Volume style
- if(mode == 3)
- {
- if(Once)
- {
- Once = false;
- int tavg = (int)avg;
- tavg = tavg % (leds.length/2);
- if(tavg > peakA)
- peakA = tavg;
- else
- peakA -= (int)(peakA - tavg)/2;
- if(peakA < 0)
- peakA = 0;
- for(int j = 0; j < peakA; j++)
- {
- prevColor[j][0] = aR;
- prevColor[j][1] = aG;
- prevColor[j][2] = aB;
- }
- for(int j = leds.length - 1; j > leds.length - 1 - peakA; j--)
- {
- prevColor[j][0] = aR;
- prevColor[j][1] = aG;
- prevColor[j][2] = aB;
- }
- for(int j = peakA; j <= leds.length - 1 - peakA; j++)
- {
- prevColor[j][0] = 0;
- prevColor[j][1] = 0;
- prevColor[j][2] = 0;
- }
- }
- ledColor[i][0] = (short)(prevColor[i][0]);
- ledColor[i][1] = (short)(prevColor[i][1]);
- ledColor[i][2] = (short)(prevColor[i][2]);
- }
- //Glowy
- if(mode == 4)
- {
- if(Once)
- {
- Once = false;
- int lr, lg, lb, rr, rg ,rb;
- int tavg = (int)avg/2;
- for(int j = 0; j < leds.length; j++)
- {
- prevColor[j][0] = (short)(prevColor[j][0]*.70);
- prevColor[j][1] = (short)(prevColor[j][1]*.70);
- prevColor[j][2] = (short)(prevColor[j][2]*.70);
- }
- for(int j = 0; j < leds.length; j++)
- {
- prevColor[j][0] += tavg;
- prevColor[j][1] += tavg;
- prevColor[j][2] += tavg;
- }
- lr = (int)(avg + abs(in.left.get(1) * 100 + in.left.get(2) * 50 - random(avg)) + 50);
- lg = (int)(avg + abs(in.left.get(5) * 50 + in.left.get(6) * 100 - random(avg)) + 50);
- lb = (int)(avg + abs(in.left.get(9) * 100 + in.left.get(10) * 50 - random(avg)) + 50);
- rr = (int)(avg + abs(in.right.get(1) * 100 + in.right.get(2) * 50 - random(avg)) + 50);
- rg = (int)(avg + abs(in.right.get(5) * 50 + in.right.get(6) * 100 - random(avg)) + 50);
- rb = (int)(avg + abs(in.right.get(9) * 100 + in.right.get(10) * 50 - random(avg)) + 50);
- peakA = 1;// += random(100);
- if(true)//(peakA%2) == 1)
- {
- prevColor[0][0] = (short)(lr);
- prevColor[0][1] = (short)(lg);
- prevColor[0][2] = (short)(lb);
- for(int j = leds.length/2; j > 0; j--)
- {
- prevColor[j][0]=prevColor[j - 1][0];
- prevColor[j][1]=prevColor[j - 1][1];
- prevColor[j][2]=prevColor[j - 1][2];
- }
- }
- if(true)//(peakA % 2) == 0)
- {
- prevColor[leds.length - 1][0] = (short)(rr);
- prevColor[leds.length - 1][1] = (short)(rg);
- prevColor[leds.length - 1][2] = (short)(rb);
- for(int j = leds.length/2; j < leds.length; j++)
- {
- prevColor[j - 1][0]=prevColor[j][0];
- prevColor[j - 1][1]=prevColor[j][1];
- prevColor[j - 1][2]=prevColor[j][2];
- }
- }
- }
- ledColor[i][0] = (short)(prevColor[i][0]);
- ledColor[i][1] = (short)(prevColor[i][1]);
- ledColor[i][2] = (short)(prevColor[i][2]);
- }
- if(mode == 5||mode == 16||mode == 17||mode == 18||mode == 19||mode == 20)
- {
- if(Once)
- {
- Once = false;
- int lr = 0, lg = 0, lb = 0, rr = 0, rg = 0 ,rb = 0;
- int tavg = (int)avg/2;
- for(int j = 0; j < leds.length; j++)
- {
- prevColor[j][0] = (short)(prevColor[j][0]*.70);
- prevColor[j][1] = (short)(prevColor[j][1]*.70);
- prevColor[j][2] = (short)(prevColor[j][2]*.70);
- }
- for(int j = 0; j < leds.length; j++)
- {
- prevColor[j][0] += tavg;
- prevColor[j][1] += tavg;
- prevColor[j][2] += tavg;
- }
- if(mode == 5)
- {
- lr = (int)(peaks[0]);
- rr = (int)(peaks[0]);
- }
- if(mode == 16)
- {
- lg = (int)(peaks[2] + peaks[3] + peaks[4]);
- rg = (int)(peaks[2] + peaks[3] + peaks[4]);
- }
- if(mode == 17)
- {
- lb = (int)(peaks[5] + peaks[6] + peaks[7] + peaks[8] + peaks[9] + peaks[10]);
- rb = (int)(peaks[5] + peaks[6] + peaks[7] + peaks[8] + peaks[9] + peaks[10]);
- }
- if(mode == 18)
- {
- lg = (int)(peaks[2] + peaks[3] + peaks[4]);
- rg = (int)(peaks[2] + peaks[3] + peaks[4]);
- lb = (int)(peaks[5] + peaks[6] + peaks[7] + peaks[8] + peaks[9] + peaks[10]);
- rb = (int)(peaks[5] + peaks[6] + peaks[7] + peaks[8] + peaks[9] + peaks[10]);
- }
- if(mode == 19)
- {
- lg = (int)(peaks[2] + peaks[3] + peaks[4]);
- rg = (int)(peaks[2] + peaks[3] + peaks[4]);
- lr = (int)(peaks[0]);
- rr = (int)(peaks[0]);
- }
- if(mode == 20)
- {
- lr = (int)(peaks[0]);
- rr = (int)(peaks[0]);
- lb = (int)(peaks[5] + peaks[6] + peaks[7] + peaks[8] + peaks[9] + peaks[10]);
- rb = (int)(peaks[5] + peaks[6] + peaks[7] + peaks[8] + peaks[9] + peaks[10]);
- }
- peakA = 1;// += random(100);
- if(true)//(peakA%2) == 1)
- {
- prevColor[0][0] = (short)(lr);
- prevColor[0][1] = (short)(lg);
- prevColor[0][2] = (short)(lb);
- for(int j = leds.length/2; j > 0; j--)
- {
- prevColor[j][0]=prevColor[j - 1][0];
- prevColor[j][1]=prevColor[j - 1][1];
- prevColor[j][2]=prevColor[j - 1][2];
- }
- }
- if(true)//(peakA % 2) == 0)
- {
- prevColor[leds.length - 1][0] = (short)(rr);
- prevColor[leds.length - 1][1] = (short)(rg);
- prevColor[leds.length - 1][2] = (short)(rb);
- for(int j = leds.length/2; j < leds.length; j++)
- {
- prevColor[j - 1][0]=prevColor[j][0];
- prevColor[j - 1][1]=prevColor[j][1];
- prevColor[j - 1][2]=prevColor[j][2];
- }
- }
- }
- ledColor[i][0] = (short)(prevColor[i][0]);
- ledColor[i][1] = (short)(prevColor[i][1]);
- ledColor[i][2] = (short)(prevColor[i][2]);
- }
- if(mode == 6||mode == 7)
- {
- if(avg>peak)
- {
- Once = true;
- peak++;
- }else{
- Once = false;
- peak-=2;
- if(peak<10)
- peak = 10;
- }
- if(Once)
- {
- r = (int)(avg + abs(in.left.get(1) * 100 + in.left.get(2) * 50 + in.right.get(1) * 50 + in.right.get(2) * 50 - random(avg)));
- g = (int)(avg + abs(in.left.get(5) * 50 + in.left.get(6) * 100 + in.right.get(5) * 50 + in.right.get(6) * 50 - random(avg)));
- b = (int)(avg + abs(in.left.get(9) * 50 + in.left.get(10) * 50 + in.right.get(9) * 100 + in.right.get(10) * 50 - random(avg)));
- if(mode == 6)
- {
- //prevColor[2][0] = prevColor[1][0] =
- prevColor[0][0] = (short)(r);
- //prevColor[2][1] = prevColor[1][1] =
- prevColor[0][1] = (short)(g);
- //prevColor[2][2] = prevColor[1][2] =
- prevColor[0][2] = (short)(b);
- for(int k = 0 ; k < 3; k++)
- for(int j = leds.length - 1; j > 0; j--)
- {
- prevColor[j][0]=prevColor[j - 1][0];
- prevColor[j][1]=prevColor[j - 1][1];
- prevColor[j][2]=prevColor[j - 1][2];
- }
- }
- if(mode == 7)
- {
- prevColor[leds.length - 1][0] = (short)(r);
- prevColor[leds.length - 1][1] = (short)(g);
- prevColor[leds.length - 1][2] = (short)(b);
- for(int k = 0 ; k < 3; k++)
- for(int j = 1; j < leds.length ; j++)
- {
- prevColor[j - 1][0]=prevColor[j][0];
- prevColor[j - 1][1]=prevColor[j][1];
- prevColor[j - 1][2]=prevColor[j][2];
- }
- }
- Once = false;
- }
- ledColor[i][0] = (short)(prevColor[i][0]);
- ledColor[i][1] = (short)(prevColor[i][1]);
- ledColor[i][2] = (short)(prevColor[i][2]);
- }
- if(mode == 8||mode == 9)
- {
- if(avg>peak)
- {
- peak++;
- Once = true;
- }else{
- peak-=2;
- Once = false;
- if(peak<10)
- peak = 10;
- }
- if(Once)
- {
- r = (int)(avg + abs(in.left.get(1) * 100 + in.left.get(2) * 50 + in.right.get(1) * 50 + in.right.get(2) * 50 - random(avg)));
- g = (int)(avg + abs(in.left.get(5) * 50 + in.left.get(6) * 100 + in.right.get(5) * 50 + in.right.get(6) * 50 - random(avg)));
- b = (int)(avg + abs(in.left.get(9) * 50 + in.left.get(10) * 50 + in.right.get(9) * 100 + in.right.get(10) * 50 - random(avg)));
- }else{
- r = g = b = 0;
- }
- if(mode == 8)
- {
- //prevColor[2][0] = prevColor[1][0] =
- prevColor[0][0] = (short)(r);
- //prevColor[2][1] = prevColor[1][1] =
- prevColor[0][1] = (short)(g);
- //prevColor[2][2] = prevColor[1][2] =
- prevColor[0][2] = (short)(b);
- for(int k = 0 ; k < 1; k++)
- for(int j = leds.length - 1; j > 0; j--)
- {
- prevColor[j][0]=prevColor[j - 1][0];
- prevColor[j][1]=prevColor[j - 1][1];
- prevColor[j][2]=prevColor[j - 1][2];
- }
- }
- if(mode == 9)
- {
- prevColor[leds.length - 1][0] = (short)(r);
- prevColor[leds.length - 1][1] = (short)(g);
- prevColor[leds.length - 1][2] = (short)(b);
- for(int k = 0 ; k < 1; k++)
- for(int j = 1; j < leds.length ; j++)
- {
- prevColor[j - 1][0]=prevColor[j][0];
- prevColor[j - 1][1]=prevColor[j][1];
- prevColor[j - 1][2]=prevColor[j][2];
- }
- }
- Once = false;
- ledColor[i][0] = (short)(prevColor[i][0]);
- ledColor[i][1] = (short)(prevColor[i][1]);
- ledColor[i][2] = (short)(prevColor[i][2]);
- }
- if(mode == 10||mode == 11)
- {
- if(avg>(peak))
- {
- peak+=50;
- Once = true;
- r = (int)(avg + abs(in.left.get(1) * 100 + in.left.get(2) * 50 + in.right.get(1) * 50 + in.right.get(2) * 50 - random(avg)));
- g = (int)(avg + abs(in.left.get(5) * 50 + in.left.get(6) * 100 + in.right.get(5) * 50 + in.right.get(6) * 50 - random(avg)));
- b = (int)(avg + abs(in.left.get(9) * 50 + in.left.get(10) * 50 + in.right.get(9) * 100 + in.right.get(10) * 50 - random(avg)));
- }else{
- peak-=2;
- Once = false;
- r = g = b = 1;
- if(peak<10)
- peak = 10;
- }
- if(Once)
- {
- if(mode == 10)
- {
- //prevColor[2][0] = prevColor[1][0] =
- prevColor[0][0] = (short)(r);
- //prevColor[2][1] = prevColor[1][1] =
- prevColor[0][1] = (short)(g);
- //prevColor[2][2] = prevColor[1][2] =
- prevColor[0][2] = (short)(b);
- for(int k = 0 ; k < 2; k++)
- for(int j = leds.length - 1; j > 0; j--)
- {
- prevColor[j][0]=prevColor[j - 1][0];
- prevColor[j][1]=prevColor[j - 1][1];
- prevColor[j][2]=prevColor[j - 1][2];
- }
- }
- if(mode == 11)
- {
- prevColor[leds.length - 1][0] = (short)(r);
- prevColor[leds.length - 1][1] = (short)(g);
- prevColor[leds.length - 1][2] = (short)(b);
- for(int k = 0 ; k < 2; k++)
- for(int j = 1; j < leds.length ; j++)
- {
- prevColor[j - 1][0]=prevColor[j][0];
- prevColor[j - 1][1]=prevColor[j][1];
- prevColor[j - 1][2]=prevColor[j][2];
- }
- }
- }
- Once = false;
- ledColor[i][0] = (short)(prevColor[i][0]);
- ledColor[i][1] = (short)(prevColor[i][1]);
- ledColor[i][2] = (short)(prevColor[i][2]);
- }
- if(mode == 12||mode == 13)
- {
- if(avg>(peak))
- {
- peak+=100;
- Once = true;
- r = (int)(avg + abs(in.left.get(1) * 100 + in.left.get(2) * 50 + in.right.get(1) * 50 + in.right.get(2) * 50 - random(avg)));
- g = (int)(avg + abs(in.left.get(5) * 50 + in.left.get(6) * 100 + in.right.get(5) * 50 + in.right.get(6) * 50 - random(avg)));
- b = (int)(avg + abs(in.left.get(9) * 50 + in.left.get(10) * 50 + in.right.get(9) * 100 + in.right.get(10) * 50 - random(avg)));
- }else{
- peak-=2;
- //Once = false;
- r = g = b = 1;
- if(peak<10)
- peak = 10;
- }
- if(Once)
- {
- if(mode == 12)
- {
- //prevColor[2][0] = prevColor[1][0] =
- prevColor[0][0] = (short)(r);
- //prevColor[2][1] = prevColor[1][1] =
- prevColor[0][1] = (short)(g);
- //prevColor[2][2] = prevColor[1][2] =
- prevColor[0][2] = (short)(b);
- for(int k = 0 ; k < 1; k++)
- for(int j = leds.length - 1; j > 0; j--)
- {
- prevColor[j][0]=prevColor[j - 1][0];
- prevColor[j][1]=prevColor[j - 1][1];
- prevColor[j][2]=prevColor[j - 1][2];
- }
- }
- if(mode == 13)
- {
- prevColor[leds.length - 1][0] = (short)(r);
- prevColor[leds.length - 1][1] = (short)(g);
- prevColor[leds.length - 1][2] = (short)(b);
- for(int k = 0 ; k < 1; k++)
- for(int j = 1; j < leds.length ; j++)
- {
- prevColor[j - 1][0]=prevColor[j][0];
- prevColor[j - 1][1]=prevColor[j][1];
- prevColor[j - 1][2]=prevColor[j][2];
- }
- }
- }
- Once = false;
- ledColor[i][0] = (short)(prevColor[i][0]);
- ledColor[i][1] = (short)(prevColor[i][1]);
- ledColor[i][2] = (short)(prevColor[i][2]);
- }
- if(mode == 14||mode == 15)
- {
- if(avg>(peak))
- {
- peak+=100;
- Once = true;
- if(abs((aR + aG +aB) - (rp + gp + bp)) < 5)
- {
- rp = (int)(avg + abs(in.left.get(1) * 100 + in.left.get(2) * 50 + in.right.get(1) * 50 + in.right.get(2) * 50 - random(avg)));
- gp = (int)(avg + abs(in.left.get(5) * 50 + in.left.get(6) * 100 + in.right.get(5) * 50 + in.right.get(6) * 50 - random(avg)));
- bp = (int)(avg + abs(in.left.get(9) * 50 + in.left.get(10) * 50 + in.right.get(9) * 100 + in.right.get(10) * 50 - random(avg)));
- }
- }else{
- peak-=2;
- //Once = false;
- }
- if(aR != rp)
- aR += (rp-aR)/2;
- if(aG != gp)
- aG += (gp-aG)/2;
- if(aB != bp)
- aB += (bp-aB)/2;
- if(peak<10)
- peak = 10;
- if(Once)
- {
- if(mode == 14)
- {
- //prevColor[2][0] = prevColor[1][0] =
- prevColor[0][0] = (short)(aR);
- //prevColor[2][1] = prevColor[1][1] =
- prevColor[0][1] = (short)(aG);
- //prevColor[2][2] = prevColor[1][2] =
- prevColor[0][2] = (short)(aB);
- for(int k = 0 ; k < 1; k++)
- for(int j = leds.length - 1; j > 0; j--)
- {
- prevColor[j][0]=prevColor[j - 1][0];
- prevColor[j][1]=prevColor[j - 1][1];
- prevColor[j][2]=prevColor[j - 1][2];
- }
- }
- if(mode == 15)
- {
- prevColor[leds.length - 1][0] = (short)(aR);
- prevColor[leds.length - 1][1] = (short)(aG);
- prevColor[leds.length - 1][2] = (short)(aB);
- for(int k = 0 ; k < 1; k++)
- for(int j = 1; j < leds.length ; j++)
- {
- prevColor[j - 1][0]=prevColor[j][0];
- prevColor[j - 1][1]=prevColor[j][1];
- prevColor[j - 1][2]=prevColor[j][2];
- }
- }
- }
- Once = false;
- ledColor[i][0] = (short)(prevColor[i][0]);
- ledColor[i][1] = (short)(prevColor[i][1]);
- ledColor[i][2] = (short)(prevColor[i][2]);
- }
- }
- serialData[data_index++] = (byte)(ledColor[i][0]*0.76);
- serialData[data_index++] = (byte)ledColor[i][1];
- serialData[data_index++] = (byte)ledColor[i][2];
- float preview_pixel_left = (float)dispBounds.width /5 / led_num_x * leds[i][0] ;
- float preview_pixel_top = (float)dispBounds.height /5 / led_num_y * leds[i][1] ;
- color rgb = color(ledColor[i][0], ledColor[i][1], ledColor[i][2]);
- fill(rgb);
- rect(preview_pixel_left, preview_pixel_top, preview_pixel_width, preview_pixel_height);
- }
- if(Case)
- {
- if(AvgCase)
- {
- chassis[0] = (byte)(cR/leds.length);
- chassis[1] = (byte)(cG/leds.length);
- chassis[2] = (byte)(cB/leds.length);
- //println("R "+ cR/leds.length);
- }
- serialData[data_index++] = (byte)chassis[0];
- serialData[data_index++] = (byte)chassis[1];
- serialData[data_index++] = (byte)chassis[2];
- }else{
- serialData[data_index++] = serialData[data_index++] = serialData[data_index++] = 0;
- }
- if(!Once)
- Once = true;
- if(MusicA)
- {
- CBrightt -= 160;
- if(avg>peak)
- {
- CBrightt = 255;
- peak++;
- }else{
- peak-=2;
- if(peak<10)
- peak = 10;
- if(CBrightt < 0)
- CBrightt = 0;
- }
- if(MusicA)
- serialData[data_index++] = (byte)ABright;
- else
- serialData[data_index++] = (byte)ABright;
- serialData[data_index] = (byte)CBrightt;
- }else{
- serialData[data_index++] = (byte)ABright;
- serialData[data_index] = (byte)CBright;
- }
- if(Glow)
- {
- if(type == 0)
- {
- serialData[185] *= abs(sin(angle));
- serialData[186] *= abs(sin(angle));
- angle += inc;
- }
- if(type == 1)
- {
- if(bAlt)
- {
- serialData[185] = 0;
- serialData[186] = 0;
- }
- if(abs(timeCur - lastGlow) > gtn)
- {
- lastGlow = timeCur;
- bAlt = !bAlt;
- }
- }
- if(type == 2)
- {
- if(bAlt)
- {
- serialData[185] = 0;
- serialData[186] = 0;
- }
- if(gAlt)
- {
- if(abs(timeCur - lastGlow) > gtn)
- {
- lastGlow = timeCur;
- bAlt = !bAlt;
- gAlt = !gAlt;
- }
- }else{
- if(abs(timeCur - lastGlow) > gtf)
- {
- lastGlow = timeCur;
- bAlt = !bAlt;
- gAlt = !gAlt;
- }
- }
- println(serialData[185]);
- }
- }
- if(port != null) {
- // wait for Arduino to send data
- for(;;){
- if(port.available() > 0){
- int inByte = port.read();
- if (inByte == 121)
- {noFails = 0;break;}
- }
- //println(++noFails);
- if(noFails > 1000)
- {
- //port.stop();
- //port = new Serial(this, Serial.list()[portNo], 115200);
- noFails = 0;
- }
- }
- port.write(serialData); // Issue data to Arduino
- }
- if(noFails > 1000)
- {
- //port.stop();
- //port = new Serial(this, Serial.list()[portNo], 115200);
- noFails = 0;
- }
- // Benchmark, how are we doing?
- println(frameRate);
- arraycopy(ledColor, 0, prevColor, 0, ledColor.length);
- }
- void stop()
- {
- // always close Minim audio classes when you finish with them
- in.close();
- minim.stop();
- super.stop();
- }
- public void AmbiLight()
- {
- AmbiLight=!AmbiLight;
- for(int i=0; i<leds.length; i++) {
- data_index = 2; // 0, 1 are predefined header
- ledColor[i][0] = 0;
- ledColor[i][1] = 0;
- ledColor[i][2] = 0;
- }
- }
- public void Rythm()
- {
- //AmbiLight = false;
- Rythm = !Rythm;
- }
- public void Case()
- {
- Case = !Case;
- }
- public void AvgCase()
- {
- AvgCase = !AvgCase;
- }
- public void Random()
- {
- Random = !Random;
- }
- public void MusicC()
- {
- MusicC = !MusicC;
- }
- public void MusicA()
- {
- MusicA = !MusicA;
- }
- public void M()
- {
- mode++;
- if(mode > maxmode)
- mode = 0;
- }
- public void A()
- {
- Auto=!Auto;
- }
- public void Glow()
- {
- Glow=!Glow;
- }
- public void T()
- {
- type++;
- if(type > maxtype)
- type = 0;
- }
- /*
- // Fill the dots one after the other with a color
- public void colorWipe(uint32_t c, uint8_t wait) {
- for(uint16_t i=0; i<strip.numPixels(); i++) {
- strip.setPixelColor(i, c);
- strip.show();
- //chassisIdle();
- delay(wait);
- }
- }
- void rainbow(uint8_t wait) {
- uint16_t i, j;
- for(j=0; j<256; j++) {
- for(i=0; i<strip.numPixels(); i++) {
- strip.setPixelColor(i, Wheel((i+j) & 255));
- }
- //chassisIdle();
- strip.show();
- delay(wait);
- }
- }
- // Slightly different, this makes the rainbow equally distributed throughout
- void rainbowCycle(uint8_t wait) {
- uint16_t i, j;
- for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
- for(i=0; i< strip.numPixels(); i++) {
- strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
- }
- //chassisIdle();
- strip.show();
- delay(wait);
- }
- }
- //Theatre-style crawling lights.
- void theaterChase(uint32_t c, uint8_t wait) {
- for (int j=0; j<10; j++) { //do 10 cycles of chasing
- for (int q=0; q < 3; q++) {
- for (int i=0; i < strip.numPixels(); i=i+3) {
- strip.setPixelColor(i+q, c); //turn every third pixel on
- }
- strip.show();
- //chassisIdle();
- delay(wait);
- for (int i=0; i < strip.numPixels(); i=i+3) {
- strip.setPixelColor(i+q, 0); //turn every third pixel off
- }
- }
- }
- }
- //Theatre-style crawling lights with rainbow effect
- void theaterChaseRainbow(uint8_t wait) {
- for (int j=0; j < 256; j++) { // cycle all 256 colors in the wheel
- for (int q=0; q < 3; q++) {
- for (int i=0; i < strip.numPixels(); i=i+3) {
- strip.setPixelColor(i+q, Wheel( (i+j) % 255)); //turn every third pixel on
- }
- strip.show();
- //chassisIdle();
- delay(wait);
- for (int i=0; i < strip.numPixels(); i=i+3) {
- strip.setPixelColor(i+q, 0); //turn every third pixel off
- }
- }
- }
- }
- // Input a value 0 to 255 to get a color value.
- // The colours are a transition r - g - b - back to r.
- uint32_t Wheel(byte WheelPos) {
- if(WheelPos < 85) {
- return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
- } else if(WheelPos < 170) {
- WheelPos -= 85;
- return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
- } else {
- WheelPos -= 170;
- return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
- }
- }
- */
- public class DisposeHandler {
- DisposeHandler(PApplet pa)
- {
- pa.registerMethod("dispose", this);
- }
- public void dispose()
- {
- AmbiLight = false;
- Case = false;
- ABright = CBright = 0;
- for(int i=0;i < 5; i++)
- draw();
- // Place here the code you want to execute on exit
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement