Skip to content

projectM - cross-platform music visualization. Open-source and Milkdrop-compatible

License

Notifications You must be signed in to change notification settings

hashFactory/projectm

 
 

Repository files navigation

Build Status

Logo

HashFactory's projectM fork

This fork of projectM implements a few handy features I felt were lacking from the the public implementation. Non-exhaustive list of improvements:

  • pixel-perfect screen recording
    • optional lossless frame compression
  • http server for remote control
    • navigating shaders
    • remotely editing glsl shaders
  • proper config file scanning
  • audio input source selection

HTTP Server

Runs by default on port 8080 when running projectM. Serves two files remote.html and test.html. When accessed from any web browser,

  • remote.html enables the user to switch to next preset, previous preset, or to switch to a random preset.
  • test.html lets the user fetch, modify, and re-submit the currently displayed shader.

Notes:

The .html pages contain everything they need to work from any client (by any I mean any i.e. even an e-ink kindle). They're written in vanilla javascript using basic get requests.

test.html displays the content of the currently displayed .milk preset file. It is usually a plaintext glsl shader. When you re-submit the shader, it is automatically saved to a time-stamped .milk file and displayed.

Screen Recording

Press 0 on keyboard to toggle on/off. It will create a time-stamped folder in recordings/ containg the raw screen buffers in a .tga image format. This procress also generates the necessary ffmpeg command to reconstitute the frames into a playable mp4 file.

Notes:

This recording method handles irregularities in frame durations. For example, if projectM stutters and a frame is displayed for 200ms, the reconstituted video will not get out of sync (if aiming for a 60fps for example).

If the #UNLOCK_FPS directive is used at compile-time, the recording will still capture every frame projectM outputs and not necessarily every frame displayed on-screen.

Warning: if recording uncompressed frames, make sure you have storage that can handle the bandwidth of raw video being written. For 1024x1024 resolution, expect to need 1024w * 1024h * 3channels * 60fps = ~188MB/s!

--

--

projectM - The most advanced open-source music visualizer

Experience psychedelic and mesmerizing visuals by transforming music into equations that render into a limitless array of user-contributed visualizations.

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 an audio input and to produce mesmerizing visuals, detecting tempo, and rendering advanced equations into a limitless array of user-contributed visualizations.

Available For

Windows

macOS

Linux

  • Steam
  • Check your repository for a binary release.

Android

Xbox / Windows Phone

Other

Discord chat

Chat with us on Discord.

Demo Video

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 these presets here.

You can also download an enormous 41,000 preset pack of presets here (123MB zipped).

Also Featured In

Kodi Kodi (formerly XBMC)

Helix Helix

Silverjuke Silverjuke (FOSS Jukebox)

Silent Radiance Distance Disco


Screenshots

Screenshot

Screenshot

Screenshot

Screenshot

Screenshot

Screenshot

Screenshot

Screenshot

Screenshot


Architecture

Building from source

See BUILDING.md

Keyboard Controls:

  • Up: increase beat sensitivity (max 5)

  • Down: decrease beat sensitivity (min 0)

  • Y: toggle shuffle enabled

  • R: jump to random preset

  • N or P: next or previous preset (hard transition)

  • Shift-N or Shift-P: next or previous preset (soft transition)

  • L: lock current preset

  • H or F1: show help (if supported)

  • M: Open preset navigation menu (if supported)

  • F3: show preset (if supported)

  • F4: show stats (if supported)

  • F5: show FPS (if supported)

Only ProjectM SDL:

  • Cmd/Ctrl-Q: quit
  • Cmd/Ctrl-I: select next audio input device
  • Cmd/Ctrl-S: stretch monitors
  • Cmd/Ctrl-M: change monitor
  • Cmd/Ctrl-F: toggle full screen
  • Mouse Scroll Up / Down: next or previous preset (hard transition)
  • Return: search for preset (RETURN or ESCAPE to exit search)
  • Space: lock current preset

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.

To look at a simple example way of using the library see the libSDL2 sample code.

There are many other applications that make use of libprojectM and that can be found in the src directory.


Todo


Help

Report issues on GitHub

Chat with us on Discord..

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.
  • 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

Authors

License

LGPL

About

projectM - cross-platform music visualization. Open-source and Milkdrop-compatible

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C 43.1%
  • C++ 39.1%
  • M4 16.8%
  • Objective-C 0.3%
  • Objective-C++ 0.2%
  • NSIS 0.2%
  • Other 0.3%