SoundGate is a native macOS per-application audio routing console. It is structured as a SwiftUI control plane around CoreAudio discovery, per-process mixer state, output routing, and call-processing presets.
- Native SwiftUI macOS app built with Swift Package Manager.
- Per-app volume, mute, route, and EQ preset controls.
- Routing matrix for assigning apps to output destinations.
- CoreAudio reachability check with an explicit virtual-driver status.
- Driver install callout that reveals
DriverKit/SoundGateDriver.pkgwhen a signed package is available. - Per-app control path based on CoreAudio process taps and private aggregate devices, following the same architecture used by FineTune.
- Tests covering mixer state behavior.
macOS does not expose public APIs that let an ordinary sandboxed GUI app intercept and reroute all process audio by PID. Full system-wide capture and routing requires a signed virtual audio driver or system extension, an installer, entitlements, and user approval. This repo keeps that boundary explicit:
CoreAudioRoutingServiceowns device discovery and future driver integration.MixerStoreowns app-facing state transitions.- The SwiftUI surface remains independent of the driver implementation.
Build the local driver package:
./script/build_driver_pkg.shInstall it:
open DriverKit/SoundGateDriver.pkgThe package installs the HAL plug-in at:
/Library/Audio/Plug-Ins/HAL/SoundGate.driver
The package is ad-hoc signed and unsigned at the package layer for local development. A production build still needs Developer ID signing and notarization.
The app now uses macOS CoreAudio process taps for per-app volume/routing. The local HAL package remains a virtual output device scaffold; the live per-app path is driven from the app process via AudioHardwareCreateProcessTap, a private aggregate device, and an IO callback that applies gain before writing to the selected output.
swift build
swift test
./script/build_and_run.sh --verify