Music Visualizer

Christopher Wu


Introduction

This project was inspired by the Magnetosphere Visualizer, which was absorbed into the current version of iTunes. My version consists of a number of sphere groups, modeled to resemble molecules, freely floating against a nebula-like background. The speed and size of the spheres, as well as animation of the nebula, are influenced by the volume of the audio file given to the program. The FMOD library is used for processing the audio file.



Graphics Concepts

The spheres are drawn using bloom shading. For each texel, a gaussian filter produces a weighted average of the texels around it. This process is repeated with a series of downsampled framebuffer objects. The downsampled FBOs are applied back onto the original scene to achieve a bloom effect.

The nebula background is generated using a simplex noise algorithm. Simplex noise was designed by Ken Perlin, who won the Academy Award for Technical Achievement for designing its predecessor, Perlin noise. This algorithm is used to produce natural-looking animated textures.

The spheres are modeled using hierarchical modeling.



Screenshots


No bloom
With minimal bloom.




With bloom
With full bloom.




Full
With bloom and nebula.


Controls

W, A, S, D - shift camera up, down, left, or right.

O - toggle the orbiting movement of the smaller colored spheres around the larger white spheres.

Z - toggle among 4 levels of blur. ***** NOTE: In the README it says B. That is wrong. It's Z. *****

C - toggle Crazy Mode.

N - toggle the nebula background.

M - change the color of the nebula (4 options).

Up, Down - change the animation speed of the nebula.



Resources

FMOD
Webpage for the FMOD audio library, used for all kinds of audio magic. Provides a low-level C++ api that I use to play and analyze the given audio file. very efficient and easy to use.

Cutting Your Teeth on FMOD Part 4: Frequency Analysis, Graphic Equalizer, Beat Detection and BPM Estimation
Blog post on getting the volume distribution of an audio track.

Philip Rideout :: Bloom
Excellent source on implemeting a bloom shader. Also has some introductionary details on HDR rendering.

Charilaos Kalogirou :: How to do good bloom for HDR rendering
Blog post on a more computationally expensive but much more effective implementation of bloom.

Ian McEwan, David Sheets, Stefan Gustavson, Mark Richardson :: Efficient computational noise in GLSL
Published paper on a very nice implementation of simplex noise in GLSL.