projectM - The most advanced open-source music visualizer
projectM is an open-source project that reimplements the esteemed Winamp Milkdrop by Geiss in a more modern, cross-platform reusable library.
Its purpose in life is to read in audio input and produce mesmerizing visuals, detecting tempo, and rendering advanced equations into a limitless array of user-contributed visualizations.
Available For
Presets
The preset files define the visualizations via pixel shaders and Milkdrop-style equations and parameters. Included with projectM are the bltc201, Milkdrop 1 and 2, projectM, tryptonaut and yin collections. You can grab all of the presets here.
Also Featured In
Screenshots
Building From Source
Mac OS X
Linux
sudo apt-get install cmake-curses-gui libsdl2-dev libglew-dev libftgl-dev libsdl2-dev libdevil-dev
Building From Source
Requires cmake.
cmake .
make
make install
Configure With cmake
If you wish to configure build options run:
ccmake .
This will present you with a simple console-based interface of options for projectM.
Review the options and change what you think is necessary. Press 'g' to generate the make files and exit.
Using the library
At its core projectM is a library, libprojectM. This library is responsible for parsing presets, analyzing audio PCM data with beat detection and FFT, applying the preset to the audio feature data and rendering the resulting output with openGL. It can render to an openGL context or a texture.
For an example of a very simple example use of the library see the libSDL2 sample code.
There are many other applications that make use of libprojectM that can be found in the src directory.
Todo
- Top priority has for a long time been to port the calls from OpenGL immediate-mode (old-school) to be compatible with OpenGL ES, using vertex buffer objects. There's a branch and todo list of function calls to replace.
- macOS Sierra broke the iTunes plugin somehow
- Build a libSDL2-based app that can use audio from any input device and visualize it. Maybe using portaudio or the super new audio capture support in libSDL 2.0.5.
- Currently shader support is done via nVidia's Cg shader toolkit. This is ancient and no longer supported and very lame. Use standard OpenGL facilities for compiling and executing the shader-based presets.
- Support for the missing Milkdrop waveforms to get full compatibility with Milkdrop presets.
- Steal cool stuff from the recently-released Milkdrop source.
- Emscripten (transpile to JavaScript and use WebGL) support. Some of the work is done on this but it requires OpenGL ES (see item 1).
- Update the various applications using libprojectM.
- Getting rid of CMake would be awesome. CMake sucks. build could be nice.
Help
Report issues on GitHub
Authors
Authors
If you would like to help improve this project, either with documentation, code, porting, hardware or anything else please let us know! We gladly accept pull requests and issues.










