SystemAudioKit

Introduction

Record the microphone and what the Mac plays, as aligned tracks.

SystemAudioKit is a Swift package for call and meeting recorders on macOS. It records the microphone and the system audio (what the Mac plays) as separate WAV files on one timeline, so sample N of each file is the same moment.

import SystemAudioKit

let recorder = AudioRecorder()
try await recorder.start(.init(), in: folder)   // microphone + everything the Mac plays
// …
let recording = await recorder.stop()           // microphone.wav + system.wav

Why separate tracks

A single mixed file loses the one thing a recorder knows for sure: which voice came from the microphone. With two aligned tracks, a transcriber can label everything on the microphone as you and only has to tell the other participants apart. ScribeKit does exactly that.

What is inside

  • AudioRecorder: starts and stops the microphone and system audio together.
  • Core Audio process taps (macOS 14.2+) for system audio: everything the Mac plays, only chosen apps, or everything except some. No virtual audio driver, and the lighter "System Audio Recording Only" permission instead of Screen Recording.
  • ScreenCaptureKit fallback that writes the same aligned output.
  • AlignedTrackWriter: converts audio to one format and fills gaps with silence, so tracks stay in sync even when an app goes quiet.
  • MeetingDetector: notices when Zoom, Teams, Meet in a browser and other call apps start and stop using the microphone.
  • AudioMixer: mixes the tracks into one M4A or WAV.
  • Permission checks, device and process listing, and a sysaudio command for testing.

Requirements

macOS14.2 or later (process taps)
Swift6.0 tools
Info.plistNSMicrophoneUsageDescription, NSAudioCaptureUsageDescription

Where next

On this page