A tiny macOS menu bar app to see and switch the active microphone (input) and speaker (output) at a glance. Built because SoundSource stopped working on the current OS. Single Swift file, no Xcode project, no external dependencies.
Our teams at SeriousMD, NowServing, and NowExpress are fully remote, so a big part of the day is online calls. A lot of us run an external mic or audio interface for those calls and the occasional podcast.
macOS has an annoying habit here: it quietly switches your input device on you. A nearby iPhone connects and suddenly your mic is the phone. You plug in your interface and it doesn't get picked up. You usually find out the worst way, when someone says "you sound far away" on the call that actually mattered.
I used to handle this with SoundSource, but it stopped working on my current macOS. The built-in Sound settings work, but they're slow to reach and give no quick read on what's actually live. So this is the small tool I wanted: a one-click view of the active input and output, instant switching, and a lock that pins your mic so nothing can quietly steal it.
If you work remote and live on calls, you have probably hit this. Hopefully it saves you a bad-sounding call too.
- 🎙 icon in the menu bar, with the name of the live mic right next to it. No more opening anything to check which input is active.
- Click it: lists all input devices and all output devices, with a checkmark on the active one.
- Click a device to make it the system default instantly.
- Menu is rebuilt on every open, so it always shows the live state.
- No microphone permission needed (it switches the default device, never captures audio).
- Lock your mic. Choose "Lock input to the active mic" and Audio Switcher re-asserts it the instant anything tries to switch your input (an app, or macOS grabbing a nearby iPhone via Continuity). It tracks the device by its stable ID, so the lock holds across disconnects and app restarts.
./build.sh
open AudioSwitcher.appNeeds Xcode command line tools (swiftc). Produces AudioSwitcher.app.
Drag AudioSwitcher.app into /Applications.
The app isn't code-signed (that needs a paid Apple Developer account), so the first time you open it macOS will say it's from an unidentified developer. Right-click the app → Open → Open to allow it, just once. After that it launches normally.
System Settings → General → Login Items → "+" → add AudioSwitcher.app.
Click the menu bar icon → Quit Audio Switcher.
AudioSwitcher.swift— the whole app (CoreAudio HAL + NSStatusItem menu).build.sh— compiles + assembles the .app bundle with Info.plist.icon_1024.png/make_icons.sh— the app icon and the script that packages it intoAppIcon.icns. Drop in a new PNG and re-run to change the icon.scripts/secret-scan.sh— optional pre-push check that nothing sensitive gets committed (see below).
- Keyboard shortcut to cycle inputs.
- Output (speaker) locking, same idea as mic locking.
Pull requests for any of these are welcome.
This is a small, friendly project. If you want to add something or fix a bug:
- Fork the repo (button at the top right on GitHub).
- Make your change in your fork.
- Open a pull request. Describe what it does and why.
I'll review, maybe ask a question or two in the comments, and merge it. No formal process, no test suite to satisfy. Keep it to one Swift file if you can.
MIT. Do whatever you want with it. See LICENSE.
