#01the boring zine
HYD --:--

workbench · AS-07

multi-audio-sink

Human-friendly TUI for combining, routing, and managing PipeWire audio outputs on Linux.

source
part
AS-07
language
Rust
type
solo
stars
★ 1
forks
0
license
MIT
last push
10 May 2026
multi-audio-sink screenshot
fig. 1 · multi-audio-sink

README.md

🔊 Multi Audio Sink (mas)

Play audio through multiple devices at once on Linux — without memorizing PipeWire commands.

Multi Audio Sink (mas) is a human-friendly terminal UI for PipeWire and PulseAudio that makes multi-output audio simple.

Route sound to Bluetooth headphones, speakers, HDMI monitors, AUX devices, and virtual sinks simultaneously from a clean, keyboard-driven interface built for real-world Linux desktop use.

Unlike traditional Linux audio tools that focus on low-level patch graphs or mixers, mas is designed around one primary goal:

Combine outputs. Switch them instantly. Control everything from one place.

Rust License Platform PipeWire


Why Multi Audio Sink?

Linux audio routing is powerful — but usually inconvenient.

Want audio on:

  • Bluetooth headphones + speakers?
  • HDMI monitor + AUX headset?
  • Multiple devices simultaneously?
  • Different applications mapped to different outputs so multiple people can watch and listen to different things at the same time?

Normally that means:

  • remembering pactl commands
  • manually creating combined sinks
  • moving streams by hand
  • debugging suspended Bluetooth devices
  • restarting applications

mas removes all of that. Everything is discoverable, interactive, and built around fast everyday workflows.


What makes it different?

🎯 Multi-output audio is the core feature

Most Linux audio tools are mixers, patchbays, or PipeWire graph explorers. mas is specifically designed for:

  • combining multiple outputs
  • switching sinks instantly
  • moving applications between outputs
  • managing Bluetooth + wired devices together
  • making complex audio routing feel incredibly simple

⚡ Designed for humans, not audio engineers

You should never need to memorize pactl load-module module-combine-sink ... again. mas provides guided workflows and clear actions. The interface is built around clarity, recovery, and confidence.


🚀 What you can do

TaskMulti Audio Sink (mas)
Combine multiple audio outputs✅
Play audio on Bluetooth + AUX simultaneously✅
Map distinct audio sessions to different devices so multiple people can use it✅
Switch default sinks instantly✅
Move running applications between outputs✅
Manage suspended Bluetooth devices✅
Clean up stale combined sinks✅
Operate entirely from the keyboard✅
Memorize PipeWire commands❌

Core workflows

Combine outputs in seconds

Select multiple devices, create a combined sink, and immediately start playing audio everywhere.

✓ Bluetooth headphones
✓ HDMI monitor
✓ Wired AUX headset

→ Create combined output
→ Set as default
→ Move active apps

Done.

Switch outputs instantly

Quickly move between speakers, headphones, monitors, Bluetooth devices, virtual outputs, and combined sinks without restarting your audio session.

Move running apps without restarting them

Send Firefox, Spotify, Discord, games, or media players to different outputs live. Select the stream, press Enter, and pick the destination output from a quick menu.

Perfect for multi-user setups: Easily map distinct audio sessions to different devices so multiple people can use the same computer simultaneously. You can send a movie's audio to the TV via HDMI while sending a game's audio to your Bluetooth headset—with zero conflict.


Installation (Arch Linux)

From the AUR

The package is officially available on the Arch User Repository! Install it easily with an AUR helper like yay:

yay -S multi-audio-sink

Build from source

# Install dependencies
sudo pacman -S pipewire pipewire-pulse libpulse cargo git

# Clone repository
git clone https://github.com/sambuaneesh/multi-audio-sink
cd multi-audio-sink

# Build
cargo build --release

# Run
./target/release/mas

Usage

mas                  # Launch normally
mas --debug          # Enable step-by-step debug logging to mas_debug.log
mas --tick-rate 100  # Faster animation (ms)
mas --no-health-check  # Skip pactl connectivity check
mas --help

The interface is fully keyboard-driven and designed to be self-explanatory.

Global Navigation:

KeyAction
DGo to Devices
SGo to Streams
CCreate combined output (Combine Wizard)
? / F1Help screen
F5Refresh audio state
QQuit
EscGo back / cancel

Device Actions:

KeyAction
dSet as default output
DSet as default AND move all streams here
mMove all current streams to this device
rResume (unsuspend) this device
RRemove this combined output

Stream Actions:

KeyAction
EnterMove selected stream to a specific output
MMove ALL streams to the default output

Philosophy

mas is not trying to be a DAW, a professional audio patchbay, or a low-level PipeWire graph editor. It exists to solve a practical everyday Linux problem:

"I want audio on multiple devices, and I want it to be easy."

Technical details

  • Built with Rust
  • Uses ratatui + crossterm for a beautiful, responsive TUI
  • Uses pactl for broad PipeWire/PulseAudio compatibility
  • Works flawlessly on Arch Linux
  • Keyboard-first workflow

License

MIT

… continued on github

↑↓ select · ↵ run · esc close
keyboard
← →
turn the page
1–5
jump to a section
: / ctrlk
command line
?
this help
esc
close