Capture system audio through a Core Audio process tap #7
No reviewers
Labels
No labels
accessibility
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
forgeadmin/plug!7
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "claude/system-capture"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
SystemAudioTapcaptures every process except Plug, usingCATapDescriptionwith the stereo global tap and Plug's own process excluded. It mutes the captured audio at the speakers, so the only copy heard is the one through Plug's effects. The tap is read through a private aggregate device clocked by Plug's output device, with drift compensation.PlugRingBufferis a new plain-C, lock-free single-producer/single-consumer ring buffer. It carries audio from the capture I/O thread to the render thread with a ~20 ms prefill. It doesn't allocate, lock or block on either thread.AudioEnginegains an input mixer fed by the test tone and the capture node. The mixer handles sample-rate conversion.setInput(_:)switches between the two, and capture runs only while the engine plays, so other apps are never left muted.Package.swiftandInfo.plist.Tested
scripts/bundle.sh --openruns. System audio is captured and plays through the effects, as reported by the owner.Known limits
🤖 Generated with Claude Code
https://claude.ai/code/session_011C96TJ2L7nzVMFTH7raNu5