Your mic and the call, in sync.
SystemAudioKit records the microphone and what your Mac plays as separate WAV files on one timeline. Built for call and meeting recorders, with no virtual audio driver to install.
Package.swift
dependencies: [ .package( url: "https://github.com/pieralukasz/SystemAudioKit.git", from: "0.1.0" ),]Swift 6. Add NSMicrophoneUsageDescription and NSAudioCaptureUsageDescription to your app’s Info.plist.
Record a call
import SystemAudioKitlet recorder = AudioRecorder()try await recorder.start( .init(microphone: .systemDefault, systemAudio: .everything), in: folder)// … the call happens …let recording = await recorder.stop()!print(recording.microphoneURL!, recording.systemAudioURL!)try recording.mix(to: folder.appendingPathComponent("call.m4a"))What you get
System audio capture without the driver
Process taps, not screen capture
Core Audio process taps (macOS 14.2+) record what the Mac plays under the lighter “System Audio Recording Only” permission.
One app or everything
Record the whole system minus your own app, only chosen apps with their helper processes, or everything except a list.
Microphone on the same clock
The mic goes to its own file. Both tracks are timed against the host clock, so sample N means the same moment in each.
Gaps filled with silence
Taps go quiet when nothing plays. The writer pads those gaps, so the tracks stay aligned for the whole recording.
Meeting detection
Notices when Zoom, Teams, Slack, FaceTime, Meet in a browser and others start and stop using the microphone. No permission needed.
ScreenCaptureKit fallback
When a tap is not an option, record display audio through ScreenCaptureKit with the same aligned output.
Two tracks, one timeline
Start a recorder, stop it, get microphone.wav and system.wav of the same length. The guides cover permissions, app selection and meeting detection.