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 Switch 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.
On Windows, pin a device that is currently off, like a Bluetooth headset; on Linux and macOS, choose it while it is connected. If it is off when you switch, it is applied the moment it reconnects as the same device, unless the defaults have been changed since.
The header carries no text labels: each control is drawn artwork in one visual language, naming itself through a tooltip on hover (on Windows, even while another program has focus). Help then Guide opens the key to all of them, with the same pictures beside their meanings.
If one device in a profile is missing, the rest are still applied and the missing one is reported. So is a device the system refused, one Windows set for only some of its roles (naming the roles it missed) and one the system accepted while keeping the old default, which is checked by reading the default back after every switch.
The device list refreshes on system device changes and periodically. The Rescan 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 release for your platform, 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 no second copy starts to compete over the same profiles; on Windows the window you already have comes to the front. 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, macOS CoreAudio, PulseAudio/PipeWire) 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.