C++ realtime 3D audio visualization
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
GLTools
documentation move some cruft around Dec 21, 2012
m4 fix conf and makefile for linux Dec 21, 2012
scripts move scripts to directory and add a chibitech test track Dec 20, 2012
testfiles remove huge file Dec 20, 2012
.gitignore detect mac frameworks for graphics in configure file Dec 21, 2012
AUTHORS.md authors newline; Dec 20, 2012
ArgMapper.cpp
ArgMapper.h protect access to argument maps via an object Dec 25, 2012
Makefile.in protect access to argument maps via an object Dec 25, 2012
README.md better readme Mar 6, 2013
TODO.rst add midi todo Dec 21, 2012
Visualizer.cpp cleanup for switching between inputs May 17, 2013
Visualizer.h added average amplitude to Packet and callback Dec 19, 2012
audio_helper.cpp cleanup for switching between inputs May 17, 2013
audio_helper.h line-in can now be used as input Jan 11, 2013
audio_main.cpp more changes to API in manual; got rid of unused argument in endAudio Dec 20, 2012
config.h.in basic autoconf setup Dec 21, 2012
configure fix conf and makefile for linux Dec 21, 2012
configure.in fix conf and makefile for linux Dec 21, 2012
graphics_helper.cpp remove bits of cruft Dec 25, 2012
graphics_helper.h decent-sized refactor of commandline args parsing Dec 25, 2012

README.md

Audio Visualizer

image

This project provides realtime 3d visualization of WAV audio streams. The visualizations created are mainly abstract and can be considered an emulation of the iTunes (or, more accurately, WMP) visualizer. It uses OpenGL, freeglut, portaudio and libsndfile to create these visuals in real time.

The project uses autoconf and can be compiled against the Mac Carbon framework or libGl on linux.

Invoked from the command line, the visualizer takes the name of an audio file and a number of flags specifying graphical behaviors. These can range from the basic flat waveform to a colorful, dynamic shape of constantly-changing data.

The main challenge of the project (beyond learning a book's worth of 3D graphics theory and practice) was to properly synchronize the audio streaming with the graphics rendering loop. This is accomplished using a shared buffer contianing a number of renderable "screens" worth of audio waveform data. The audio streamer acts as a server that fills free slots in the buffer, and the graphics rendering client pulls data from the filled slots. Since the audio runs at a much faster rate than the graphics, the audio ends up waiting around a bit. This is ok, since it has plenty of heavy number-crunching capacity as visualizations grow more advanced.

Installation

./configure
make
./Visualizer