Created
September 6, 2016 14:16
-
-
Save frogwoo/b8c03747b2b73a1dc62b7ee0a33d5199 to your computer and use it in GitHub Desktop.
Code for music visualisation on the Pi-Lite with Processing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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