Skip to content
 
 

Repository files navigation

Build Status Alternate Build Status vcpkg Version CMake Version projectM-eval Version FFmpeg Version

Discord Shield Chat with us on Discord!

Twitter @BeatDropVis

BeatDrop Logo (logo design by Incubo_)

BeatDrop Version Latest Release Downloads Total Downloads License Total Stars

BeatDrop Music Visualizer

BeatDrop Music Visualizer is a continued development of the original inactive repository fork, a standalone music visualization based of the Original MilkDrop2 Plug-in for Winamp that aims to add better features and bug fixes/optimizations for versatility, usability and amazing. This is also considered as an improvement of it.

Highlights:

  • Based of the Original MilkDrop2 Plug-in, compatible with all the MilkDrop presets (.milk).
  • Perfectly adjusted beat detection for better audio reaction (also configurable)
  • New waveforms and transitions
  • 16 custom shapes and waves limit
  • Drag, Drop & Load MilkDrop preset
  • Shader Precaching or Caching for Instant Preset Loading
  • Fully supported Pixel Shader 4 (Shader Model 3) presets for AMD/ATI processor/graphic cards
  • FFT and Wave functions accessible via shaders!
  • Real-time system time and date variables/functions
  • Spout integration
  • projectM-eval library integration
  • Toggleable Speaker and Microphone Audio Source Modes
  • Our modified loopback-capture code, called BeatDrop-loopback, with above 92kHz sample rate (Hi-Res) support, intelligent default audio change and anti-stutter
  • Interact presets with Mouse and Keyboard (CTRL + Arrow Keys)
  • GIF, Video and Spout Input support for sprites and textures
  • Extended preset, texture, transition and noise generation randomization limit using Mersenne Twister Pseudo-Random Number Generator
  • Hard Cut Modes, Transparency Mode, Playback Controls, Startup Preset etc.
  • And so much more!

FOR MACOS USERS

Sorry, I have not tested running BeatDrop on a MacOS, but you can try running it with Parallels Desktop or similar virtualization tools, such as UTM (known as Universal Turing Machine)

...or check the MacOS Port fork

FEATURES

+9 ADDITIONAL SIMPLE WAVEFORMS!

Enjoy these new simple waveforms with most crazy and fascinating patterns! Made by community, made for you.

BeatDropNewWaveformsDemo


UP TO 16 CUSTOM WAVES AND SHAPES!

Now you have more possibilities to create/edit some custom waves or shapes with up to 16 slots! This will get much chaotic than before.

BeatDrop16ShapesMilkDrop2077Demo


INTEGRATED WITH SPOUT FOR SHARING VISUALS EVERYWHERE!

Now you can send the BeatDrop's Visual Renderer via Spout to OBS (plug-in needed), Resolume, NestDrop, TouchDesigner, MadMapper, Unity (KlakSpout needed), HeavyM and so much more that it supports. Simply press CTRL + Z and you're good to go!

List of available apps here: https://spout.zeal.co

BeatDropSpoutDemo BeatDropSpoutResolumeArenaDemo


GIF, VIDEO AND SPOUT INPUT SUPPORT FOR SPRITE AND TEXTURES

GIF and Video sprites

The sprite handler is now smart and can hybridly invoke GIF, Video and Image sprites. Simply open the image ini file (beatdrop_img.ini), find an empty digit slot or modify the existing one, easily pass an image, video or GIF path and write some code! Then in a visualizer, press K to change to sprite mode, type 2 digits corresponding to your image ini file you have provided, then you'll see some magic.

BeatDropGIFVideoSpritesDemo.mp4

GIF and Video textures

Presets can now load GIF, video and image textures in a simple way. It detects a file name from sampler and then hybridly shows static or animated textures.

BeatDropPresetVideoTextureDemo.mp4

Supported animated/static media formats: gif, webp, webm, mkv, flv, vob, ogv, mng, avi, mts, m2ts, ts, mov, qt, wmv, yuv, rm, rmvb, viv, asf, amv, mp4, m4p, mp2, mpe, mpv, mpg, mpeg, m2v, m4v, svi, 3gp, 3g2, mxf, roq, nsv, f4v, f4p, f4a, f4b

Spout Input Sprites

You can also invoke sprites using Spout! It's the same steps, but you need to pass Spout\ or Spout/ prefixes and the Spout receiver name to your image path.

An example of how it invoked: OBS's Browser Source with Spout Plug-in as sender filter and invoked a Spout sprite with Spout/SpoutSB with digit noº 18.

BeatDropSpoutInputSpriteDemo.mp4

You can also do some epic/crazy feedback by self-invoking the visual renderer using a Spout Input sprite. Pass Spout/BeatDrop, write some sprite code and enjoy beautiful feedback effects!

BeatDropSpoutInputFeedbackTricksDemo.mp4


SCREEN-DEPENDENT RENDER MODE & PRESET PATCH FIXES

Bring back the nostalgia from 2000s by fixing some old MilkDrop 1 presets behavior with Screen-Dependent Render Mode, making the visual way better. You are free to turn it off if you don't want.

I've also manually patch fixed all the bugged presets to look very/almost identical to MilkDrop 1/2.0.

BeatDropScreenDependentRenderModeDemo


SHADER PRECACHING/CACHING

Getting in stress if the visual is freezing while the shaders are compiling? Don't worry. I've got you! BeatDrop now supports shader precaching/caching for instant loading presets. Now you can experience 0 seconds compile time when you load the same preset that contains shaders! ;)

Here is the comparison below!

BeatDropShaderCacheComparison


BORDERLESS MODE

Need any media players that needs a music visualizer on top? Of course! Just run BeatDrop, press F2, adjust or fit to any part of the window in your needs and you're good to relax! You can also start BeatDrop with this feature on by modifying the .ini setting file (beatdrop.ini).

BeatDropBorderlessModeDemo BeatDropBorderlessModeOnSpotifyDemo


PIXEL SHADER VERSION 4 PRESETS SUPPORT FOR AMD/ATI PROCESSOR/GRAPHIC CARD

After 20 years of the bug when using any Pixel Shader Version 4 presets that cause stutters/freezes on one of the shaders, We have researched to fix this bug & making it support for AMD/ATI cards. Now you don't worry about the shader bottleneck.

BeatDropAMDATISupportV2

(not affiliated with Advanced Micro Devices, Inc. or ATI Technologies Inc.)


HI-RES AUDIO SUPPORT (96kHz, 192kHz and beyond)

7 years ago, BeatDrop had it's issue that it resulted a loss of frequency response or a complete non-reaction when you set the sample rate above 44100Hz or 48000Hz. So, I've made support for higher sample rates (from 96000Hz to beyond) by downsampling it to the visual-preferred one, because MilkDrop is designed for 44100Hz sample rate.

hi-res-audio-sound-waves


FFT AND WAVE AUDIO DATA SHADER VARIABLES

MilkDrop3 introduced FFT shader variables months ago, which I was very excited about. Firstly, ported to Milkwave and then ported to this visualizer itself with some hard-tweaks, RMS normalization (thanks, martin a.k.a. Nitorami, the preset legend), smooth decay/attack transition and a high-quality full-range audio processing by me.

I've also made support for Wave shader functions, but maybe the it should support for MilkDrop3 in the next version too ;)

Please refer the new functions/variables documentation how to use them.

BeatDropFFTWaveShaderVarsDemo

You can also adjust FFT shader's attack or decay via preset editor! Press "M" and you'll see fft shader attack/decay option. Both attack and decay ranges from 0 to 1.

BeatDropFFTAttackDecaySettings


SYSTEM TIME AND DATE VARIABLES

Now you can use system time and date variables on init, per-frame or in shaders. Some presets can see what time is it in real-time!

For use in init or in per-frame code: some new variables are written when you open the preset editor (M) and you hover the cursor (it should see in right-down corner). Some variables added: year, month, day, weekday, hour, minute, second, milliseconds, totalseconds.

For shaders: Please refer new functions/variables documentation in System time shader variables section.

BeatDropSystemTimeVariableDemo.mp4

CONTROL PRESETS BY USING A MOUSE AND A KEYBOARD

To make BeatDrop more and more interactive, Me & MilkDrop2077/Serge Blanc have made support for controlling presets by just using a mouse! Preset authors can now use the mouse variables in a simple way. Just pass them to init, per-frame, per-vertex or shaders, use a mouse and look how it goes! For more information about this, you can read it from docs folder.

Oh, and you can also control presets with CTRL + arrow keys, but you need to pass ctrllt, ctrlrt, ctrlup and ctrldn in order to do that.

BeatDropMouseSupportDemo


REAL-TIME SONG INFORMATION

Now it can get the song information from any media players using SMTC, sending it to visualizer. You can also show/hide this on the bottom-left corner by pressing F8.

BeatDropRealTimeSongInfoDemo

Note that the standard builds work on Windows 10 or Windows 11. For Windows Vista, 7, 8 and 8.1, use the matching BeatDrop_OldOS_x86.exe or BeatDrop_OldOS_x64.exe build, which omits this feature for better compatibility.


INTEGRATED WITH PROJECTM-EVAL FOR OPTIMIZATION

BeatDrop now features projectM Expression Evaluation Library, which replaces Nullsoft Expression Evaluation Library for portability, compile time + speed optimization and assembly-free.


NO AUDIO CUTOFF WHILE AUDIO OUTPUT DEVICE CHANGE, SAMPLE RATE CHANGE OR DISCONNECTION

To not break the listening sessions or DJ sessions, BeatDrop will no longer interrupts the audio reaction while the audio device is changed, sample rate is changed or the device disconnection happens. Also no need to restart. ;)

BEFORE COMPILING THE CODE

DesktopDevOptionalSettings GameDevOptionalSettings NETDesktopDevOptionalSettings

  • CMake is now obligatory to install! Look at the name from Desktop development with C++ category below and check this box. projectM-eval library is now integrated in.

CMake optional library checked

  • After that, please change from debug to release and build it.

HOW TO COMPILE THE CODE AND UPDATE/INTEGRATE PROJECTM-EVAL LIBRARY CORRECTLY

BeatDrop now uses projectM-eval library, a drop-in replacement of Nullsoft Expression Evaluation Library, which it's assembly-free and it uses much faster instructions than i386 instructions that achieves preset compilation performance optimization. projectM-eval also performs a few compile-time optimizations like replacing larger constant expressions with a simple value.

Steps on how to compile BeatDrop with projectM-eval library:

Known-good build steps for video support

BeatDrop's video support uses FFmpeg through vcpkg. These steps are the shortest reproducible path for a working executable.

  1. Install Visual Studio 2022 or higher with the Desktop development with C++ workload, CMake tools, the Windows 10/11 SDK, and the DirectX SDK June 2010.

  2. Make sure the vcpkg package manager is checked on any workflows.

  3. Vcpkg's manifest mode is enabled by default. Install dependencies for the architecture you are building: vcpkg install --triplet x86-windows or vcpkg install --triplet x64-windows.

  4. Make sure lib\projectM_eval.lib and lib\projectM_ns-eel2.lib exist. If they are missing, build/copy them using the projectM-eval steps below.

  5. Open BeatDrop.sln in Visual Studio and select one of these configurations:

    Configuration Platform Executable
    Release_x86 Win32 BeatDrop_x86.exe
    Release_OldOS_x86 Win32 BeatDrop_OldOS_x86.exe
    Release_x64 x64 BeatDrop_x64.exe
    Release_OldOS_x64 x64 BeatDrop_OldOS_x64.exe

    Or build from a Developer PowerShell:

msbuild BeatDrop.sln /m /p:Configuration=Release_x86 /p:Platform=Win32
msbuild BeatDrop.sln /m /p:Configuration=Release_OldOS_x86 /p:Platform=Win32
msbuild BeatDrop.sln /m /p:Configuration=Release_x64 /p:Platform=x64
msbuild BeatDrop.sln /m /p:Configuration=Release_OldOS_x64 /p:Platform=x64
  1. Each configuration writes to its own directory under vis_milk2 and copies its executable plus FFmpeg runtime DLLs to BeatDrop. Build and run one architecture at a time locally because x86 and x64 FFmpeg DLLs have the same filenames. GitHub Actions produces separate, self-contained artifacts for each architecture.
  2. Run the matching executable from the BeatDrop folder so it can find beatdrop.ini, beatdrop_img.ini, resources, presets, and the FFmpeg DLLs.

⚠️ Please note that disabling vcpkg manifest mode will give you some errors or missing libraries, so you need to manually install libraries with the command line.

First method: Using vcpkg

  1. Vcpkg options from the project configuration are enabled by default. If you want to disable them for building as local files, look at the second method.
  2. First update your baseline by clicking View -> Terminal, then type vcpkg x-update-baseline.
  3. Compile your code. Vcpkg automatically generates the projectM-eval library using CMake.
  4. It will receive an error about one of the libraries: Invalid or corrupt file: cannot read at 0x536E (projectM_ns-eel2.lib).
  5. The generated files are in vcpkg_installed\<triplet>\lib. Copy both libraries for the architecture you are building, then paste them into the lib folder from the main source code folder.
  6. (Optional) Copy the ns-eel header from the same step from 5., but in include\projectm-eval\ns-eel2, then paste it to ns-eel-shim folder, still from the main source code folder.
  7. Now build/compile the code and you are ready to go. If you see that your output gives "1 up to date", clean the selected configuration and compile it again.
  8. Check the generated executable in its matching vis_milk2\Release_* directory; the post-build step copies it into the BeatDrop folder.

Second method: Using CMake (for latest version build)

Before this, Git is required for cloning repositories.

  1. Make sure you have disabled the vcpkg feature (if you want). First go to Project from toolbar, click properties, then go to Configuration Properties -> vcpkg, then turn the first two options off. It should look like this:
image

If you want to turn back on, do the same step, then change them to "Yes".

  1. Use Visual Studio's terminal (View from toolbar -> Terminal) or PowerShell. Clone the repository as a local package.
git clone https://github.com/projectM-visualizer/projectm-eval.git
cd projectm-eval
git fetch --all (if needed)
  1. Go to your main code folder -> projectm-eval -> CMakeLists.txt, look at BUILD_NS_EEL_SHIM option, then turn it on.

For example: option(BUILD_NS_EEL_SHIM "Build and install the ns-eel2 compatibility API shim." ON)

  1. Build and install the projectM-eval library using CMake.
mkdir your_build_folder
cd your_build_folder
cmake -A Win32 ..
# Use `cmake -A x64 ..` when building the x64 projectM-eval libraries.
cmake --build . --config "Release" --parallel
cmake --install . --prefix your-installation-folder-name-here.
  1. Now do the same steps as step 4 and 5, but look at your main code folder -> projectm-eval -> your build folder -> your CMake installation folder you provided, then there are include headers and library files installed in. If you want to copy only header or library files, then look at them inside.
  2. Now build/compile and it should be working. Again, look at the step 8 from the first method after you built/compiled.

If you have problems, ask me on Discord, Twitter or Instagram.

BEFORE YOU RUN BEATDROP

Please download and install DirectX End-User Runtime Web first.

Microsoft Visual C++ 2015-2022 Redistributable is also required to run. You can get it from system requirements category.

BeatDrop now has a Spout integration! It's now supported to route the visual to any apps, such as NestDrop, Resolume Arena, OBS (as plug-in) and so much more.

Download Spout: https://spout.zeal.co

HOW TO USE BEATDROP

  1. Easily run BeatDrop!
  2. Open YouTube, Spotify, AIMP or any media players/audio sources and let them play! (Yes! It reacts to all the audio sources)
  3. Watch them react and enjoy! 👌🪩

Get started by pressing F1 to get a list of hotkeys and functionalities.

USAGE

You can use BeatDrop for parties, karaoke, music videos, DJ mixes and so on, but you must credit this repo if you used this! I am not even angry anymore if you didn't credit this, but use #beatdrop, #beatdropmusicvisualizer or BeatDrop as tags, then I'll look at them.

MILKDROP MEGAPACK - GET ALL THE MILKDROP PRESETS

If you want to have all the MilkDrop presets in your own, just download this MegaPack, then extract them to your BeatDrop folder (ex: to BeatDrop Resources folder).

FEATURED WEBSITES

Softpedia

AlternativeTo

VJ Union

TopDownload.Club

The Audio File

Spout Open-Source Projects

Opensource-DVD

Never Complete Only Abandoned

FOLLOW ME ON ANY SOCIAL NETWORKS

X Discord (Join server)

STAR HISTORY

Star History Chart

ORIGINAL REPOSITORY DESCRIPTION

BeatDrop is a stand-alone implementation of the amazing Milkdrop2 Winamp plug-in. It lets you experience the stunning visual 2D effects with your music player of choice. No additional configuration steps needed! Just start BeatDrop and play your music. Use BeatDrop with your favourite:

System Requirements

Acknowledgements

Special thanks to:

License

This repository is licensed under the 3-Clause BSD License (LICENSE or https://opensource.org/licenses/BSD-3-Clause) with the exception of where otherwise noted.

Although the original Matthew van Eerde's loopback-capture project didn't explicitly state the license, the author has been kind enough to provide the license clarification

Sunny March 29, 2015 at 11:06 pm

Hi. Just wondering is this open source? I'm looking for something like this for my school project.

Maurits [MSFT] March 30, 2015 at 8:35 am

@Sunny do with the source as you like.

All changes in this repository to the original Matthew's code are published either under the terms of BSD license or the license provided by original author.

Contributions

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, shall be licensed as above.