Choosing apps
Record everything, one app, or everything but some.
SystemAudioSource decides what the process tap hears:
.everything // all apps except yours
.apps(["us.zoom.xos"]) // only these apps
.everythingExcept(["com.spotify.client"]) // all except these, and except yoursApps are given by bundle ID.
Helper processes
Browsers and Electron apps play audio from helper processes, for example com.google.Chrome.helper.renderer. .apps and .everythingExcept trace each helper back to the app that owns it and include it, so .apps(["com.google.Chrome"]) records a Meet call in Chrome.
AudioProcesses shows what is running:
for process in AudioProcesses.playing() {
print(process.name, process.bundleID ?? "-", "→", process.appBundleID ?? "-")
}AudioProcesses.all(): every process Core Audio knows.AudioProcesses.playing(): only those producing output right now.appBundleIDfollows a helper back to its app.isRunningInputandisRunningOutputtell whether a process uses the microphone or plays sound.
When the app is not running
The list of processes is taken when the recording starts. If none of the apps in .apps has an audio process yet, start throws SystemAudioError.noMatchingProcesses. Start the recording after the call app has opened its audio, or use .everything.
ScreenCaptureKit
The ScreenCaptureKit backend always records all audio of the main display, minus your app. App selection only works with process taps.