
AudioPriorityBar
https://github.com/tobi/audioprioritybar- Category
- Productivity
- Rank
- No. 1385Tools index
- Pricing
- Open Source
- Type
- APP
- Builder
- tobi
- GitHub
- 824 stars
- Latest release
- v1.2.1
- Date
About
Native macOS menu bar app for managing audio device priorities so the right output device is selected when devices come and go.
What it does
AudioPriorityBar watches CoreAudio device changes, remembers connected inputs and outputs, and applies saved preference lists. It separates speakers from headphones, manages microphones, offers manual selection, and exposes volume, mute status, editing, and launch-at-login controls from a menu bar popover.
Why it's ranked here
The focused design solves recurring device churn with more control than simple automatic switching. Separate output categories, microphone priorities, persistent device memory, ignore rules, and a manual mode cover common exceptions. The implementation uses native macOS frameworks and keeps its policy understandable.
What's good
Priorities survive reconnections because devices are stored by stable UID. Disconnected hardware remains editable with last-seen information. Users can reorder entries by dragging or arrows, exclude a device by category, forbid automatic use entirely, and temporarily suspend automation without discarding preferences.
Tradeoffs
It requires macOS 13 or later and has no cross-platform interface. Headphone classification starts with device-name keyword matching, so unfamiliar or ambiguous names may need manual correction. Source and automated release builds disable code signing. The supplied repository tree shows no test target or test directory.
How to use it well
It suits Mac users who regularly move between docks, displays, speakers, headsets, and microphones. Establish separate speaker, headphone, and input orders, mark unreliable devices as never use, then enable launch at login. Use Custom mode for temporary routing. It does not provide audio mixing, per-application routing, or cross-platform control.
Technical notes+
AudioPriorityBar/AudioPriorityBarApp.swift defines the SwiftUI MenuBarExtra and central AudioManager state. AudioPriorityBar/Services/AudioDeviceService.swift enumerates CoreAudio devices, changes system defaults, reads output volume and mute state, and registers property listeners. AudioPriorityBar/Services/PriorityManager.swift persists UID-keyed priorities, categories, hidden lists, known devices, mode, and never-use choices through UserDefaults. AudioPriorityBar/Models/Headphones.swift performs substring-based headphone detection. AudioPriorityBar/Views/MenuBarView.swift and AudioPriorityBar/Views/DeviceListView.swift implement the popover, volume scrolling, device sections, selection, and reordering. AudioPriorityBar/Services/LaunchAtLoginManager.swift uses SMAppService. build.sh and .github/workflows/release.yml produce unsigned universal arm64 and x86_64 app bundles.
Observed
- License
- MIT License
- Primary language
- Swift 5.9
- Platform support
- macOS 13.0 or later
- Interface
- Native SwiftUI menu bar application using CoreAudio
- Installation
- Pre-built binaries are offered through GitHub Releases; source builds use Xcode or the included shell build script
- Packaging
- Builds an AudioPriorityBar.app bundle for arm64 and x86_64 with code signing disabled
- Persistence
- Device priorities, categories, remembered devices, modes, hidden lists, and never-use choices are stored in UserDefaults
- Repository structure
- No test target or test directory appears in the supplied repository tree
Read from README.md, AudioPriorityBar/AudioPriorityBarApp.swift, AudioPriorityBar/Models/Headphones.swift, AudioPriorityBar/Views/MenuBarView.swift, AudioPriorityBar/Models/AudioDevice.swift, AudioPriorityBar/Views/DeviceListView.swift, AudioPriorityBar/Services/PriorityManager.swift, AudioPriorityBar/Services/AudioDeviceService.swift, AudioPriorityBar/Services/LaunchAtLoginManager.swift, LICENSE, build.sh, AudioPriorityBar/Info.plist, AudioPriorityBar.xcodeproj/project.pbxproj, .github/workflows/release.yml, AudioPriorityBar/Assets.xcassets/Contents.json.
What it can do
Set priority order for audio output devices
List of available audio devices → Prioritized device configuration
Automatically switch to highest priority available audio device
Audio device connection/disconnection events → Active audio output device selection
Detect when audio devices connect or disconnect
System audio device state changes → Device availability status updates
Display current audio device status in menu bar
Active audio device information → Menu bar status indicator
Override macOS default audio device selection behavior
User-defined device priorities and system audio events → Custom audio routing decisions
Tags
Tech Stack
Comments (0)
No comments yet
Editorially curated, with community endorsements as a secondary signal. Corrections welcome.