Capture chosen apps instead of all system audio #11

Merged
erdoar merged 1 commit from claude/per-app-capture into main 2026-10-10 03:55:13 +00:00
erdoar commented 2026-10-10 03:13:10 +00:00 (Migrated from github.com)

Summary

  • A new Apps input taps only the processes of the ticked apps, using CATapDescription(stereoMixdownOfProcesses:). Only those apps are muted at the speakers and heard through Plug's effects. Everything else plays normally.
  • AudioProcesses (PlugEngine) lists Core Audio's process objects (PID, bundle ID, playing or not), leaving out Plug itself.
  • AppKey (PlugCore) groups helper processes with their app, e.g. com.google.Chrome.helper.Renderer → com.google.Chrome, so browsers and Electron apps are captured whole.
  • SystemAudioTap takes a target: everything except Plug, or only given processes.
  • The app shows apps that are playing, plus ordinary apps that have opened audio, with checkboxes and a refresh button. Chosen apps are saved. Settings files from before this field still load.

Tested

  • Mac mini M4, macOS 15: swift test passes all tests, as reported by the owner.
  • Linux, Swift 6.0.3: 24 tests pass, including AppKey grouping, captured-apps round trip, and loading an older settings file.

Known limits

  • Processes are looked up when capture starts. An app opened while Plug runs joins at the next Stop and Start.
  • Safari and other WebKit apps play web audio from a shared process, so they're listed and captured together as "Safari and web views".

🤖 Generated with Claude Code

https://claude.ai/code/session_011C96TJ2L7nzVMFTH7raNu5

## Summary - A new **Apps** input taps only the processes of the ticked apps, using `CATapDescription(stereoMixdownOfProcesses:)`. Only those apps are muted at the speakers and heard through Plug's effects. Everything else plays normally. - `AudioProcesses` (PlugEngine) lists Core Audio's process objects (PID, bundle ID, playing or not), leaving out Plug itself. - `AppKey` (PlugCore) groups helper processes with their app, e.g. `com.google.Chrome.helper.Renderer` → `com.google.Chrome`, so browsers and Electron apps are captured whole. - `SystemAudioTap` takes a target: everything except Plug, or only given processes. - The app shows apps that are playing, plus ordinary apps that have opened audio, with checkboxes and a refresh button. Chosen apps are saved. Settings files from before this field still load. ## Tested - Mac mini M4, macOS 15: `swift test` passes all tests, as reported by the owner. - Linux, Swift 6.0.3: 24 tests pass, including AppKey grouping, captured-apps round trip, and loading an older settings file. ## Known limits - Processes are looked up when capture starts. An app opened while Plug runs joins at the next Stop and Start. - Safari and other WebKit apps play web audio from a shared process, so they're listed and captured together as "Safari and web views". 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_011C96TJ2L7nzVMFTH7raNu5
Sign in to join this conversation.
No description provided.