Skip to content

Instantly share code, notes, and snippets.

@frogwoo
Created September 6, 2016 14:16
Show Gist options
  • Save frogwoo/b8c03747b2b73a1dc62b7ee0a33d5199 to your computer and use it in GitHub Desktop.
Save frogwoo/b8c03747b2b73a1dc62b7ee0a33d5199 to your computer and use it in GitHub Desktop.
Code for music visualisation on the Pi-Lite with Processing
import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.effects.*;
import ddf.minim.signals.*;
import ddf.minim.spi.*;
import ddf.minim.ugens.*;
import processing.serial.*;
Serial port;
String portID = "/dev/ttyAMA0";
Minim minim;
AudioPlayer in;
FFT fft;
void setup() {
size(100, 100);
frameRate(15);
// set up minim and play song
minim = new Minim(this);
in = minim.loadFile("test.mp3");
in.play();
// set up fast fourier transform and group into 7 bands
fft = new FFT(in.bufferSize(), in.sampleRate());
fft.logAverages(7,1);
// set up pi-lite serial
port = new Serial(this,portID,9600);
port.write("$$$ALL,OFF");
}
float mx = 0;
float val;
String bar1;
String bar2;
void draw() {
// update fft data
fft.forward(in.mix);
// loop through frequency bands
for(int i = 0; i < 7; i++) {
val = fft.getAvg(i);
// find max volume of frequencies
if (val > mx) {
mx = val;
}
// map frequency data to the num of pi-lite pixels
if (val != 0) {
val = int(map(val,0,mx,10,100));
} else {
val = 10;
}
// draw two bars per frequency group
bar1 = "$$$B" + ((i*2)+1) + "," + val + "\r";
bar2 = "$$$B" + ((i*2)+2) + "," + val + "\r";
port.write(bar1);
port.write(bar2);
}
}
void stop()
{
// shut down program properly
in.close();
minim.stop();
super.stop();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment