* Supports Multiple pass2 renderings. My application (Silent Radiance) added projectM visualizers, but I needed support for VR. So I added Renderer::RenderFrameOnlyPass1 and Renderer::RenderFrameOnlyPass2 This allows an offset in the screen output so the same image can be rendered twice very quickly. I could have rendered to a buffer externally. This is fed into the Raylib VR in my application to add the fisheye effect. * Added an example of the VR * Added multiple screen renderings for VR Added a new way of rendering that allows multiple pass2's to be done: one per screen. This allows for a second screen output, and VR. In fact I am using this for VR where I need a left and right eye on the same screen. In order to do this, I sometimes have to set the viewport not starting at the upper left of the screen. Added renderFrameOnlyPass2 - and an optional pipeline can be passed - this would be a pipeline when there is a transition from one visual to another. This can be called once per eye. Finally, renderFrameEndOnSeparatePasses cleans up, does the fps control, statistics, etc. This alternate rendering is as possible: Pipeline pipeline; Pipeline *comboPipeline; comboPipeline = renderFrameOnlyPass1(&pipeline); for each eye: renderFrameOnlyPass2(comboPipeline,xoffset,yoffset,eye); Then renderFrameEndOnSeparatePasses(comboPipeline); for the accounting and releasing the mutex * Removed the duplication of code for VR. * Removed the duplication of code for VR.
8.8 KiB
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
- macOS, Linux (binary)
- Android
- iOS
- Qt5 + Pulseaudio
- ALSA, xmms, winamp, jack (source, unmaintained)
- iTunes plugin (macOS)
- Windows (in progress)
Download
Get it from the Releases tab
Demo Video
Project Status
You can read more about how it works and the current state of development here.
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
Silent Radiance Distance Disco
Screenshots
Building from source
See BUILDING.md
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 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
- Support for the missing Milkdrop waveforms to get full compatibility with Milkdrop presets.
- Steal cool stuff from the recently-released Milkdrop source.
- Finish emscripten support for building to wasm/webGL for the web.
- Update the various implementations using libprojectM.
- Update downstream projects with new versions.
Help
Report issues on GitHub We're on IRC at irc.freenode.net #projectM
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.
Maintainers
If you maintain packages of libprojectM, we are happy to work with you! Please note well:
- The main focus of this project is libprojectM. It's a library that only really depends on OpenGL. The other applications are more like examples and demos.
- This project was converted to use GNU autotools instead of CMake in 2018. This was due to inflexibility of CMake, issues with OSX and SDL2, an unintuitive configuration interface, standardizing on the most common and well-understood build system, a desire to make it easier for others to get up and running and contribute, and other factors too lengthy to expound on here.
- Most of the applications (e.g.
src/projectM-*) are likely outdated and of less utility than the core library. If you desire to use them or depend on them, please file an issue so we can help update them. - The "canonical" application for actually viewing the visualizations is now projectM-sdl, based on libSDL2 because it supports audio input and is completely cross-platform.
- This is an open source project! If you don't like something, feel free to contribute improvements!
- Yes, you are looking at the official version. This is not a fork.
Authors
Contributors
This project exists thanks to all the people who contribute.
Backers
Thank you to all our backers! 🙏 [Become a backer]
Sponsors
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]












