open-source visualizer component of SmartsGarden - the CNU computer systems capstone competition winner for 2012.
Processing

README.md

SGVisualizer

screenshot

This project is really old (from my freshman year of college) but I fired it up with Processing 2.2.1 and was surprised to find that it still runs.

This code was part of a project for visualizing and creating music from computer network data. I wrote a music visualizer in the meantime, and we ended up using it in the final project with some statically-generated music files that the other guys worked on. Since it was just a bit of a tech demo, and not really a polished product, you can't change the audio file that's used for rendering at runtime.

Launching

The file waveform.wav is used for audio playback and visualization. If you add a file with that name to this directory, then the code will run with that sound file.

If you have a waveform you'd like to run this on, and you've set it up by putting a waveform.wav in this folder, then you can launch the code by running

processing SGVisualizer.pde

as long as processing is in your $PATH.

How it works

screenshot

The visualizer does a Fast Fourier transform on its input, and uses the values from that to get a sense of what the music's doing. Certain values can trigger things like a new node creation, or the clearing of the screen. You can see the FFT in the background of the images also, rendered in the bottom left.

The individual nodes are objects from Circle.pde and they're managed by the creatively named CircleManager.pde. The rest of the drawing happens in SGVisualizer.pde.

Future

I've long since abandoned writing Processing code, partly out of a distaste for how their Java interface is rendered on my system, so don't expect any real improvements. The code is MIT licensed, however, so you're free to do what you want with it.

One interesting project would be to port this to JavaScript, where it might see a better reception than a version requiring some custom Java libraries and IDE. Processing now supports that, so it might not be very hard.