Skip to content

Audio-Solutions/pulse-visualizer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pulse-visualizer - Audio Visualizer

o.mp4
Packaging status

What Even Is This?

Ever wanted to see your music? Pulse is a real-time audio visualizer inspired by MiniMeters. It turns whatever your system is playing into eye-candy (or at least, that's the idea). Built in C++ with SDL3, OpenGL, PulseAudio, and FFTW, Pulse tries to make your music look as cool as it sounds. Unless your system sucks, then, well, good luck.

Features

  • Experimental colorful beam
  • Real-time, low-latency audio visualization
  • CRT phosphor emulation with GPU compute shaders (glow, persistence, all the retro stuff)
    • Curved screen, vignette, grain, chromatic aberration (toggle as you like)
    • Blur, light spread, and overdrive are all tweakable
    • Reflections on curved screen
  • Multiple visualizer styles:
    • Lissajous curve (with fancy spline interpolation and stretch modes)
    • Oscilloscope (gradient modes, pitch following, cycle limiting)
    • FFT/Constant-Q (mid/side, right/left, sharp/flat note key)
    • Spectrogram (log/linear scale, interpolation)
    • Peak and LUFS (shortterm, momentary, integrated)
    • VU meter (digital and analog)
  • Configurable order at runtime
  • Settings menu (press m to open)
  • Separate FFT/CQT threads for mid/side channels
  • Extensive SIMD (AVX2) acceleration
  • Live config and theme hot-reloading (no restart needed, mostly)
  • Draggable splitters for custom layout
  • Cross-platform: PulseAudio and PipeWire
  • Hardware-accelerated graphics (OpenGL)
  • A pile of ready-made themes (see themes/)

Installation

Arch Linux (AUR)

Just grab it from the AUR as pulse-visualizer-git:

yay -S pulse-visualizer-git

NixOS

Download pulse-visualizer.nix and add this to your flake:

nixpkgs.config.packageOverrides = pkgs: {
  pulse-visualizer = pkgs.callPackage ./pulse-visualizer.nix { };
};

environment.systemPackages = [ pkgs.pulse-visualizer ];

Or change directory to the project root and add it to your shell via:

nix-shell

With flakes:

inputs.pulse-visualizer.url = "github:Audio-Solutions/pulse-visualizer";

environment.systemPackages = [ pulse-visualizer.packages.${system}.default ];

# or
nixpkgs.overlays = [ pulse-visualizer.overlays.default ];
environment.systemPackages = [ pkgs.pulse-visualizer ];

A flake-based shell can be activated using:

nix develop

nix build .#pulse-visualizer
# or
nix run .#pulse-visualizer

Build artifacts are located in result/bin.

Other Distros

You can get the binary from the Releases page. There is an install script in the tarball, make sure to run it as root before running the binary:

tar -xvf pulse-visualizer-<version>.tar.gz
cd pulse-visualizer-<version>
chmod +x install.sh
sudo ./install.sh

Dependencies & Platform Support

  • SDL3
  • PulseAudio or PipeWire (0.3+)
  • FFTW3
  • FreeType2
  • OpenGL
  • GLEW
  • YAML-CPP
  • libebur128

Works on:

  • Linux (PulseAudio or PipeWire)
  • BSD (PulseAudio)
  • Windows (WASAPI)

Configuration

pulse-visualizer now has a settings menu! You can open it by pressing m. You can also edit the config file directly.

For comprehensive configuration documentation, see CONFIGURATION.md.

Theming

You can pick a theme in the Window page in the settings menu.

You can also create your own themes by copying a template and editing the colors. Theme files support a bunch of color and property keys (see _TEMPLATE.txt for all options). All the main colors are required. You can fine-tune visualizer-specific stuff too. Theme and config changes reload live.

Usage

Just run:

pulse-visualizer
  • Drag splitters to resize/rearrange visualizers
  • Lissajous will enforce a square aspect ratio
  • Hover FFT for real-time frequency, dB, and note readout
  • All config and theme changes are live, no restart needed

Building

If you want to build from source, you can do so with the following commands:

Build dependencies

  • C++17 compiler
  • CMake 3.10+
  • Ninja-build
  • Development headers for: SDL3, PulseAudio or PipeWire (0.3+), FFTW3, FreeType2, GLEW, YAML-CPP, libebur128

Fedora: sudo dnf5 install SDL3-devel fftw3-devel freetype-devel glew-devel yaml-cpp-devel ninja pipewire-devel libebur128-devel
Debian: sudo apt install clang cmake libsdl3-dev libfftw3-dev libfreetype-dev libglew-dev libyaml-cpp-dev ninja libebur128-dev

mkdir build
cd build
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release ..
ninja
sudo ninja install

Note

Do not build with sudo ninja install. This will cause ownership and permission issues. Please run the build as a regular user (ninja) and only use sudo ninja install for the install step.

Contributing & Support

Want to help? PRs welcome! Please clang-format your code before submitting (see the clang-format file). Sorry for the chaos.

See CONTRIBUTORS for a list of contributors to this project.

If you like pulse-visualizer, you can buy me a coffee at ko-fi.com/beacrox.

License

This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.

Acknowledgments

  • MiniMeters for inspiration
  • Richard Andersson for the Phosphor effect
  • JetBrains and the Nerd Fonts project for the JetBrains Mono Nerd Font
  • SDL3, PulseAudio, PipeWire, FFTW, FreeType, libebur128, YAML-CPP, and everyone else who made this possible

About

Pulse is a real-time audio visualizer inspired by MiniMeters

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 7

Languages