Musializer
Warning
This software is unfinished. Keep your expectations low.
The project aims to make a tool for creating beautiful music visualizations and rendering high quality videos of them.
Please, read CONTRIBUTING.md before making a PR.
Demo
Music by @nu11 from https://soundcloud.com/nu11_ft/nu11-wip-works-2016-2022 at 20:38
output.mp4
Download Binaries
- Windows: musializer-alpha1-win64.zip
- Linux: in progress
Build from Source
External Dependencies:
- ffmpeg executable available in
PATH
environment variable. (it is called as a child process)
We are using Custom Build System written entirely in C called nob
. It is similar to nobuild in spirit. nob.h is the Build System and nob.c is the program that builds Musializer.
Before using nob
you need to bootstrap it. Just compile it with the available C compiler. On Linux it's usually $ cc -o nob nob.c
on Windows with MSVC from within vcvarsall.bat
it's $ cl.exe nob.c
. You only need to boostrap it once. After the bootstrap you can just keep running the same executable over and over again. It even tries to rebuild itself if you modify nob.c (which may fail sometimes, so in that case be ready to reboostrap it).
I really recommend to read nob.c and nob.h to get an idea of how it all actually works. The Build System is a work in progress, so if something breaks be ready to dive into it.
Linux
$ cc -o nob nob.c # ONLY ONCE!!!
$ ./nob
$ ./build/musializer
Keep in mind that the application needs ./resources/ to be present in the folder it is ran from.
Windows MSVC
From within vcvarsall.bat
do
> cl.exe nob.c # ONLY ONCE!!!
> nob.exe
> build\musializer.exe
Cross Compilation from Linux to Windows using MinGW-w64
Install MinGW-w64 from your distro repository.
Edit ./build/config.h
and set MUSIALIZER_TARGET
to TARGET_WIN64_MINGW
.
$ ./nob
$ wine ./build/musializer.exe
Hot Reloading
Only on Linux for now
Edit ./build/config.h
and enable MUSIALIZER_HOTRELOAD
.
$ ./nob
$ ./build/musializer
Keep the app running. Rebuild with ./nob
. Hot reload by focusing on the window of the app and pressing h.
The way it works is by putting the majority of the logic of the application into a libplug
dynamic library and just reloading it when requested. The rpath (aka hard-coded run-time search path) for that library is set to .
and ./build/
. See src/nob_linux.c for more information on how everything is configured.