my own audio visualizer, because after effects sucks. builds on windows and linux!!!!
here are some demos:
- install any required dependencies below
- run
cmake -S. -Bbuild && cmake --build build -j$(nproc)
or use your IDE of choice with CMake support
- install any required dependencies below using
winget
:- lua can be installed with
winget install devcom.lua
- ffmpeg and its libraries can be installed with
winget install gyan.ffmpeg.shared
- lua can be installed with
- run
cmake -S. -Bbuild && cmake --build build
or use your IDE of choice with CMake support
- FFTW
- libavpp
- requires the FFmpeg libraries
- the
ffmpeg
CLI program, also part of the FFmpeg project- required for video encoding
- portaudio-pp
- requires PortAudio (only the C library)
- SFML 3.0.0-rc.1
- note that SFML only supports X11 windows, so you will need XWayland if you use Wayland
- Boost.Process
- included in Boost 1.86.0 (which is what we use now) or higher
- argparse
- sol2
- spline
on namespaces:
fx
: post-processing effectstt
: utility & library extensionsviz
: audio visualization componentsmedia
: media provider implementations
i recommend using vscode as it integrates well with git with no effort. get the cmake tools extension and clangd to make development easier.
on windows please use the mingw toolchain as it is the only toolchain i have compiled with, and honestly the easiest to setup and use. clangd might freak out about the standard headers being missing: to fix this, open clangd extension settings, and add the following argument:
--query-driver=C:\path\to\mingw\bin\g++.exe
- ✅️
viz::ScopeDrawable
- extra: audio window customization independent of shape size
- 🔄 lua api
- ✅️ modular layering/effects system
- ✅️ remove hardcoded visualizer components
- freshen up c++ api for consumption
- decide whether to split up audioviz into library & programs
- ✅️ make
audioviz
generic, extend it with default functionality in a new class namedttviz
- ✅️ figure out how to deal with
fft_size
andsa.analyze(...)
- extra: rename
base_audioviz
toaudioviz
and call the default implementation something else
- ✅️ figure out how to deal with
- ✅️ need to experiment with only using the ffmpeg CLI instead of the libraries
- ✅️ figure out metadata parsing, then subprocessing for the audio/video streams
- ✅️ this might fix all the "ending early" problems (not a guarantee)
- extra: try using
basic_ipstream
overbasic_pipe
- extra: try to have one
ffmpeg
process output both streams
- add components/effects based on rhythm
- involves knowing the tempo of the song
- want a small translucent flash overlay that flashes to the beat of music
- copy the osu! stars effect
- interactive gui (long term)