Report 04 / Native audio

SystemAUHost

Process system audio through Audio Unit effects without requiring BlackHole, Soundflower, Loopback, or a custom HAL driver.

Status
MVP
Category
Native audio
Built with
Swift / SwiftUI / Core Audio / AVAudioEngine / Audio Units / macOS Process Tap API
Workflow signal3 stages
CaptureTap macOS process audioUse the native Core Audio Process Tap API on macOS 14.2 or later while excluding SystemAUHost itself to avoid feedback.
ProcessRun audio through the AU chainHost effects and music effects in an ordered chain with add, remove, bypass, reorder, plugin UI, and global dry bypass controls.
OutputSend audio to real hardwareRoute the processed signal to the selected Core Audio output device and expose panic restore when the chain needs to be released.

Blocker: Protected or DRM audio may not be capturable, and the MVP requires macOS 14.2 or later.

SystemAUHost is a standalone macOS menu-bar Audio Unit rack for processing system audio.

Its routing path is direct:

macOS process audio → native process tap → AU chain → selected real output

The MVP uses the native Core Audio Process Tap API, so it does not require BlackHole, Soundflower, Loopback, or a custom HAL driver. A dedicated AudioEngineController owns the AVAudioEngine and Audio Unit graph outside the SwiftUI interface.

The app lists Core Audio output devices, hosts effects and music effects in an ordered chain, and supports adding, removing, bypassing, reordering, and opening plugin interfaces. It also provides global dry bypass, panic restore, and sample-rate, buffer, and latency reporting. The selected output and plugin chain can be saved and restored.

SystemAUHost uses CATapMutedWhenTapped. Normal dry system audio should return when the app stops reading the tap or when the operator presses Panic.

The boundary is explicit: the MVP handles global stereo system and process audio, excludes itself to avoid feedback, and requires macOS 14.2 or later. Some protected or DRM audio may not be capturable. VST3 hosting and process-specific selection are not included in the current version.