No Description

rexim 8e2c1b7e6f nob_win64_mingw: use new command API in stage2 1 month ago
.github 6643c0fe49 [nob.yaml] fix typo 5 months ago
resources f319d93742 Add microphone button 1 year ago
src 8a795807a7 nob: use new command API in stage1 1 month ago
src_build 8e2c1b7e6f nob_win64_mingw: use new command API in stage2 1 month ago
thirdparty 966948db68 Upgrade nob.h v1.20.6 -> v1.23.0 1 month ago
.gitignore 88703e1ebc add hotreload support for windows 1 year ago
CHANGELOG.txt 1b7169b201 Update Change Log 5 months ago
CONTRIBUTING.md 44877f2a49 Update CONTRIBUTING.md 2 years ago
LICENSE 7d46a7aace Update LICENSE 1 year ago
README.md 00041d0e23 README: bring various links up to date 1 month ago
musializer-logged.bat 8a6ba615ac Add musializer-logged.bat script for Windows build 2 years ago
nob.c 8a795807a7 nob: use new command API in stage1 1 month ago

README.md

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

https://github.com/tsoding/musializer/assets/165283/8b9f9653-9b3d-4c04-9569-338fa19af071

Supported Audio Formats

  • wav
  • ogg
  • mp3
  • qoa
  • xm
  • mod
  • flac

Download Binaries

Build from Source

External Dependencies:

  • ffmpeg executable available in PATH environment variable. It is called as a child process during the rendering of the videos. So if you don't plan to render any videos it's completely optional.

We are using Custom Build System written entirely in C called nob. nob.c is the program that builds Musializer. For more info on this Build System see the nob.h repo.

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 and OpenBSD

$ cc -o nob nob.c # ONLY ONCE!!!
$ ./nob
$ ./build/musializer

If the build fails because of missing header files, you may need to install the X11 dev packages.

On Debian, Ubuntu, etc, do this:

$ sudo apt install libx11-dev libxcursor-dev libxrandr-dev libxinerama-dev libxi-dev

On other distro's, use the appropriate package manager.

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_WIN64_MINGW instead of MUSIALIZER_TARGET_LINUX.

$ ./nob
$ wine ./build/musializer.exe

Hot Reloading

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_build/nob_linux.c for more information on how everything is configured.