| assets | ||
| qml | ||
| src | ||
| .gitignore | ||
| CMakeLists.txt | ||
| context.sh | ||
| generate_icons_json.sh | ||
| LICENSE | ||
| Makefile | ||
| README.md | ||
| visualisation-graph.png | ||
SndBus
SndBus is a Pipewire-native soundboard app for Linux. Built with C++ and Qt/QML for native performance and a pretty UI. Whether you're trolling friends on Discord or adding "production value" to a livestream, SndBus handles the routing so you don't have to mess with graph tools.
Originally built because I couldn't find a better tool. I know it's not perfect and probably has some discrepencies and weird design decisions, but it's my first Qt app.
Features
- Add samples via a file picker or just drag them directly onto the grid
- Automatically mix your microphone with your sounds. Want a sound-only track for OBS? Just set the input to "None"
- Set start and end points for audio files with a waveform preview
- Zero latency monitoring thanks to the PipeWire routing only approach
- Assign your own images for samples
- Linux first - not a port, not a wrapper. Built for the modern Linux audio stack by someone who uses it every single day
How it works
SndBus acts as a high level manager for PipeWire. Instead of just playing an audio file to your speakers like a media player, or doing a lot of internal processing, it makes a "signal bus" (hence the name) using a few tricks.
When you start SndBus, it uses pw-loopback to spawn two virtual nodes: SndBus Sink and SndBus Virtual mic. Think of the Sink as a mixing deck; This is where the hardware mic and soundboard sounds combine into one stream. From there, the stream is routed to the SndBus Virtual mic - a node that apps like Discord or OBS see as a regular microphone.
To actually get the sounds into that plumbing, SndBus uses miniaudio. SndBus inits two playback engines: virtual (for pushing samples to the sink) and monitor (for, well, monitoring :P)
Because the audio is only ROUTED rather than processed internally, SndBus stays lightweight and avoids large latency or CPU overhead.
Your mic audio is linked directly to the sink via PipeWire, meaning your voice never actually passes through the app.
It's also extremely flexible. If you prefer to mix your voice and sounds separately in OBS, you can just set the input in SndBus to "None" and use the virtual mic just for sound effects.
You also get full control of the monitoring - select any device, or disable it entirely.
Roadmap
- Run in the background with QSystemTrayIcon
- Hotkeys using Wayland's global shortcut protocols
Building from source
Dependencies:
- Qt 6.x (Core, Gui, Qml, Quick, Widgets)
- PipeWire and WirePlumber
- CMake
git clone https://git.ignis621.net/ignis621/sndbus.git
cd sndbus
mkdir build && cd build
cmake ..
make
./sndbus
License
This project is licensed under the GNU General Public License v3.0 (GPLv3).
You are free to use, modify, and distribute this software, but any modified versions or derivative works must also be open-source and distributed under the same GPLv3 license.
See the LICENSE file for the full legal text.
