Speakers for music, a headset for calls, an interface for recording. Save each as a profile and move between them without touching your system's sound settings.
Each profile pins one default output device and one default input device. Switch to a profile and both change at once.
The Quick Switch view lists every profile. Press ▶️ in the header tray or just double-click a profile to apply it.
--list and --profile NAME run headless with a process exit code, so any script or launcher can drive it.
Map a profile to a physical key with BarRaider's Advanced Launcher plugin on Windows; any macro deck or macro buttons that can run a command work on every OS. One press, one setup.
Pin a device that is currently off, like a Bluetooth headset. The moment it reconnects, the pending switch is applied automatically.
If one device in a profile is missing, the rest are still applied and the missing one is reported, so a switch never silently half-fails.
The device list refreshes on system device changes and periodically. The 📡 tray button forces an immediate rescan on demand.
Profiles are stored as JSON in your platform's per-user app-data folder. Runs per user, no admin rights; nothing about you or your profiles ever leaves your machine.
A quiet check against GitHub's releases shortly after launch, daily and on demand from the Help menu: Download the installer, Skip This Version for good or Later. Anonymous; silent when GitHub is unreachable.
A sun and moon toggle in the header tray restyles the whole app at a click, on every platform. Dark is the default and the choice persists between launches.
Everything is reachable without the mouse: Tab and the arrow keys walk one explicit focus ring, lists walk with Up and Down and a green ring always shows exactly where you are.
Launch it twice and the window you already have comes to the front, rather than a second copy competing over the same profiles. Command-line switching is exempt, so Stream Deck keys keep working while the window is open.
With no arguments Audio Deck opens the GUI. With --list or --profile it runs headless and returns an exit code, which is exactly what a Stream Deck button or a batch file needs. Headless switches are never blocked by the running window, so a key still works while the app is open.
# List all profiles AudioDeck.exe --list # Switch to a profile by name AudioDeck.exe --profile "Gaming Setup" # Version, help or launch the GUI AudioDeck.exe --version AudioDeck.exe --help AudioDeck.exe # no args = GUI
# Application AudioDeck.exe # Arguments --profile "Gaming Setup" # One key per setup. Press it, # the default output and input # devices switch instantly.
Audio Deck follows a four-layer clean architecture: UI and CLI are clients of the application layer, which orchestrates a pure domain, while infrastructure implements the domain's interfaces against each platform's audio stack (Windows Core Audio, PulseAudio/PipeWire, macOS CoreAudio) and the filesystem. Dependencies point inward and are wired by constructor injection in an explicit composition root, one for the GUI and one for the CLI. Structural tests parse the source on every run, so a layering violation fails the build rather than being caught in review.