A high-performance, cross-platform, real-time audio spectrum visualizer written in Rust.
BeSpec captures system audio loopback and renders a customizable frequency spectrum overlay. It is architected for low latency, minimal resource footprint, and visual precision.
- High Performance Engine: Built with
egui(immediate mode GUI) andrealfftfor low-latency rendering and frequency processing. - Cross-Platform Audio Capture:
- Native capture via
cpalfor Windows (WASAPI), Linux (ALSA/Pulse/Jack), and macOS (CoreAudio). - Hot-Swappable Devices: Switch input sources and refresh hardware lists in real-time without application restarts.
- Native capture via
- Visualization Modes:
- Solid Bars: Smooth gradients with adjustable opacity.
- Retro LED: Segmented bars with customizable height and gaps, including a "Fill to Peak" warning mode.
- Line Spectrum: A continuous, glowing frequency contour.
- Oscilloscope: Real-time raw waveform monitoring in the time domain.
- Precision FFT: Uses a fixed 2048-point FFT for granular resolution (23.4 Hz/bin @ 48kHz) with configurable Attack/Release and Peak Hold dynamics.
- Theming Engine: A revamped system handling 25+ presets (e.g., Winamp Classic, Gameboy, O-Scope) and custom user profiles independently.
- Media & Wikipedia Integration: * Displays track metadata and full-color album art.
- Clicking album art triggers an intelligent Wikipedia search for the artist or album.
- Native transport controls (Play/Pause/Skip) for Windows and Linux.
- Interactive Inspector: Hover over the spectrum to activate a precision crosshair displaying exact frequency (Hz) and amplitude (dB) metrics for individual bins.
- Modern Desktop Integration:
- BeOS / Haiku Mode: A distinct window style inspired by the classic BeOS interface.
- Borderless Overlay: Transparent, chrome-less window with "Always on Top" and "Click-through" support.
| Solid Bars | Retro LED |
|---|---|
![]() |
![]() |
| Line Spectrum | Oscilloscope |
|---|---|
![]() |
![]() |
BeSpec is designed for audio analysis. See how it uncovers hidden artifacts in professional production:
- Queens of the Stone Age Analysis: Using high-resolution mode to detect a 15.75 kHz CRT whine hidden in the outro of I Was a Teenage Hand Model.
| Platform | Support Status | Media Capabilities |
|---|---|---|
| Windows | ✅ Native | Metadata, Album Art, & Transport Controls |
| Linux | ✅ Native | Metadata, Album Art, & Transport (MPRIS) |
| macOS | Metadata & Album Art only* |
Note: macOS requires BlackHole for audio capture. Media controls are not currently supported on macOS.
We provide a native .dmg installer and a Homebrew tap.
-
Option A (Homebrew):
brew tap bespec-dev/tap brew install --cask bespec --no-quarantine
-
Option B (Manual): Download the
.dmg(Intel or Silicon) from Releases.
Important: macOS requires audio routing setup (BlackHole) to hear system audio. 👉 Read the macOS Setup Guide
We provide a universal installer script that handles dependencies, icons, and menu shortcuts.
- Download the
linux.tar.gzfrom Releases. - Extract the archive.
- Run
./install.shfrom the terminal.
Important: You must select the "Monitor" source in PulseAudio/PipeWire. 👉 Read the Linux Setup Guide
- Download the
windows.zipfrom Releases. - Extract and run
bespec.exe.
BeSpec utilizes a concurrent model to ensure the UI remains responsive at 60+ FPS:
- Audio Thread: Stream capture and format normalization (I16/U16/F32).
- FFT Thread: Signal processing via realfft with Hann windowing.
- GUI Thread: Immediate-mode rendering via egui + wgpu.
- Synchronization:
crossbeam_channelfor high-frequency data andArc<Mutex<SharedState>>for configuration.
BeSpec saves its settings, user-created presets, and diagnostic logs to the standard application data directories for your operating system.
| OS | Config File (config.json) |
Data & Logs Directory (presets/, logs/) |
|---|---|---|
| Windows | %APPDATA%\BeSpec\config.json |
%APPDATA%\BeSpec\ |
| Linux | ~/.config/BeSpec/config.json |
~/.local/share/BeSpec/ |
| macOS | ~/Library/Application Support/BeSpec/config.json |
~/Library/Application Support/BeSpec/ |
config.json: This file contains all of your active settings. You can back this up to save your setup, or manually edit it if you need to fine-tune exact window coordinates.presets/folder: Whenever you save a custom Color or Visual profile in the app, it is stored here as a standard.jsonfile. You can easily copy these files to share your custom themes with other users!logs/folder: Contains daily rolling log files (e.g.,BeSpec.log). These are incredibly useful for troubleshooting audio device detection issues, reviewing FFT performance statistics, or attaching to bug reports.
BeSpec is architected to be a privacy-first tool. All audio processing occurs locally in real-time. To support its feature set, the application performs the following minimal network requests:
- Update Checker: Queries the GitHub API (
api.github.com) once on startup to check for new releases. - Album Art Fetching: If your media player provides a web URL for artwork (typical for Spotify or streaming services), BeSpec downloads the image file to display it in the overlay.
- Wikipedia Integration: When you click the album art, BeSpec sends the current Artist and Album metadata to the Wikipedia Search API (
en.wikipedia.org) to locate the relevant article. This only occurs upon a user click.
Privacy Promise: No audio data, personal identifiers, or telemetry is ever recorded, stored, or transmitted to any third party. Media listening history is never logged unless explicitly enabled by the user in the app settings.
Why does my OS say the "Microphone" is on? Operating systems (Linux and MacOS) classify any audio input stream (including loopback) as "Microphone Usage." BeSpec processes all audio data locally in real-time. No audio is recorded, stored, or transmitted over the network.
LLM tools were utilized during the development of this project to accelerate learning Rust
If you find this tool useful, consider Buying Me a Coffee to support continued development.




