Audibian is an open-source desktop audio management application for Linux, built with Rust and GTK 4.
It provides a visual patchbay, per-application mixer, parametric EQ, noise suppression and persistent audio profiles — all on top of PipeWire.
Tested on Debian 12 (Bookworm) with PipeWire ≥ 0.3.65.
| Feature | Details |
|---|---|
| 🔌 Visual Patchbay | Drag-and-drop canvas to connect and disconnect audio nodes. Nodes are automatically arranged by type (sources → filters → sinks). |
| 🎚️ Per-app Mixer | Volume fader and mute toggle for every active audio stream and device. |
| 🎛️ Parametric EQ | 5-band parametric equaliser with real-time Cairo curve editor, applied via a PipeWire filter-chain virtual sink. |
| 🎙️ Noise Suppression | Per-microphone WebRTC noise suppression. Creates a virtual clean source (audibian-ns-…) that any app can select instead of the raw mic. |
| 💾 Audio Profiles | Save and restore complete audio states (links, volumes) as TOML files under ~/.config/audibian/profiles/. |
| ⚡ Default Profile | Mark a profile as default; Audibian will apply it automatically 3 seconds after startup, once PipeWire has enumerated all nodes. |
| 🚀 Autostart | One toggle creates an XDG autostart entry (~/.config/autostart/audibian.desktop) so Audibian launches with your desktop session. |
| Dependency | Minimum version | Debian package |
|---|---|---|
| PipeWire | 0.3.52 | pipewire |
| PipeWire WebRTC AEC | — | libspa-0.2-jack or included in pipewire-audio |
| GTK 4 | 4.12 | libgtk-4-1 |
| libadwaita | 1.5 | libadwaita-1-0 |
Noise suppression uses
libpipewire-module-echo-cancelwith the WebRTC backend (libspa-aec-webrtc), which ships with PipeWire on Debian Bookworm — no extra packages needed.
| Dependency | Minimum version | Debian package |
|---|---|---|
| Rust + Cargo | 1.75 | rustup.rs |
| GTK 4 dev headers | 4.12 | libgtk-4-dev |
| libadwaita dev headers | 1.5 | libadwaita-1-dev |
| PipeWire dev headers | 0.3 | libpipewire-0.3-dev |
| pkg-config | — | pkg-config |
| Cairo dev headers | — | libcairo2-dev |
| Pango dev headers | — | libpango1.0-dev |
Install all build dependencies on Debian:
sudo apt install \
libgtk-4-dev libadwaita-1-dev \
libpipewire-0.3-dev \
libcairo2-dev libpango1.0-dev \
pkg-config build-essentialgit clone https://github.com/YOUR_USERNAME/audibian.git
cd audibian
cargo build --releaseThe binary will be at target/release/audibian.
cargo run --releasesudo install -Dm755 target/release/audibian /usr/local/bin/audibian- Drag from an output port (blue) to an input port (orange) to create a link.
- Right-click on a cable to remove the link.
- Nodes are auto-arranged in columns: sources on the left, sinks on the right.
Each detected audio stream gets a vertical fader and a mute button.
Volume changes are applied immediately via pactl.
- Select a sink from the drop-down.
- Adjust the 5-band EQ (Low Shelf · Peak × 3 · High Shelf).
- Click Aplicar EQ — a virtual sink
audibian-eq-<name>will appear; route your apps to it. - Click Quitar EQ to remove the virtual sink.
- Go to the Efectos / EQ tab, scroll to Supresión de Ruido.
- Toggle the switch next to any microphone.
- A virtual source
audibian-ns-<name>will appear in the system. - In your app (Discord, OBS, etc.) select that virtual source instead of the raw microphone.
- Set up your desired audio routing in the Patchbay.
- Give the profile a name and click Guardar estado actual.
- Select a profile and click Cargar to restore it.
- Click Predeterminado to mark a profile as the startup profile (toggle to unset).
In the Perfiles tab → Ajustes, toggle Iniciar con el sistema to create or remove the XDG autostart entry for your desktop session.
| Path | Purpose |
|---|---|
~/.config/audibian/config.toml |
App settings (default profile, autostart) |
~/.config/audibian/profiles/*.toml |
Saved audio profiles |
/tmp/audibian-eq-*.conf |
Ephemeral EQ filter-chain configs (cleaned up on start) |
/tmp/audibian-ns-*.conf |
Ephemeral NS filter-chain configs (cleaned up on start) |
~/.config/autostart/audibian.desktop |
XDG autostart entry (created by the app) |
src/
├── main.rs # Entry point
├── audio/
│ ├── graph.rs # Audio graph model (nodes, ports, links)
│ ├── pw_thread.rs # PipeWire monitoring thread (registry listener)
│ ├── eq.rs # Biquad EQ math (Audio EQ Cookbook)
│ └── effects.rs # EQ & noise suppression subprocess management
├── profiles/
│ ├── model.rs # AudioProfile serde model
│ ├── store.rs # TOML read/write under ~/.config/audibian/profiles/
│ ├── apply.rs # Profile apply & snapshot logic
│ └── config.rs # App settings (default profile, autostart)
└── ui/
├── app.rs # Application entry, PW event loop
├── window.rs # Main window, tab switcher
├── patchbay/ # Visual canvas (Cairo + GestureDrag)
├── mixer/ # Volume strips
├── effects/ # EQ curve + noise suppression list
└── profiles/ # Profile manager + settings
Event flow: PipeWire registry events arrive on a background thread and are forwarded to the GTK main thread via an async_channel. The GTK thread mutates the AudioGraph (wrapped in Rc<RefCell>) and triggers UI refreshes.
Contributions are welcome! Please open an issue before starting large features.
- Fork the repository
- Create a feature branch (
git checkout -b feat/my-feature) - Commit your changes
- Open a Pull Request
- Run
cargo clippybefore submitting. - No panics in production paths — use
Option/Resultand log errors. - UI state lives on the GTK main thread only; never send GTK objects across threads.
This project is licensed under the GNU General Public License v3.0.
See LICENSE for details.
- Helvum — inspiration for the patchbay concept.
- PipeWire — the audio/video server powering this app.
- gtk4-rs — Rust bindings for GTK 4.
- libadwaita-rs — GNOME HIG widgets for Rust.
