docs: condense implementation comments
This commit is contained in:
@@ -1,14 +1,11 @@
|
||||
import AVFoundation
|
||||
import ScreenCaptureKit
|
||||
|
||||
// Which apps' audio the SCREEN_AUDIO stream captures. ScreenCaptureKit filters audio at the
|
||||
// *application* level (not per-window), so the selection is expressed as bundle IDs. The
|
||||
// picker UI (ScreenSharePickerSheet) produces a `ScreenAudioSelection`; `start()` turns it
|
||||
// into the matching `SCContentFilter`.
|
||||
// ScreenCaptureKit filters audio by application bundle identifier.
|
||||
enum ScreenAudioScope: Equatable {
|
||||
case entireDesktop // whole display — the original behaviour
|
||||
case onlyApps([String]) // capture only these bundle IDs
|
||||
case allExcept([String]) // capture everything except these bundle IDs
|
||||
case entireDesktop
|
||||
case onlyApps([String])
|
||||
case allExcept([String])
|
||||
}
|
||||
|
||||
struct ScreenAudioSelection: Equatable {
|
||||
@@ -20,20 +17,8 @@ struct ScreenAudioSelection: Equatable {
|
||||
static let `default` = ScreenAudioSelection()
|
||||
}
|
||||
|
||||
// ScreenAudioCapture — macOS system/desktop audio capture for the SCREEN_AUDIO stream.
|
||||
//
|
||||
// The macOS analog of the Windows WASAPI loopback path (docs/voice.md §9). ScreenCaptureKit
|
||||
// (macOS 13+) captures whatever the system is playing; we convert each audio CMSampleBuffer
|
||||
// (Float32) → int16 interleaved and push 20 ms frames (960 samples/channel @ 48 kHz) into the
|
||||
// core via `vc_stream_feed_pcm` (exposed as `VoiceCatClient.feedPcm`). The core then runs the
|
||||
// same Opus-encode → media-AEAD → UDP path as any other stream — only the *source* is
|
||||
// platform-specific (architecture.md §4).
|
||||
//
|
||||
// Audio-only: we request a 2×2 video plane at 1 fps purely because SCStream needs a video
|
||||
// configuration, and we never add a `.screen` output — only `.audio`. `excludesCurrentProcess
|
||||
// Audio` prevents the self-echo loop of re-capturing our own incoming voice mix.
|
||||
//
|
||||
// `feedPcm` is thread-safe (any thread), so we forward straight from the sample-handler queue.
|
||||
// SCStream requires a minimal video configuration even for audio-only capture. Only its audio
|
||||
// output is registered, and current-process audio is excluded to prevent feedback.
|
||||
final class ScreenAudioCapture: NSObject, SCStreamOutput, SCStreamDelegate {
|
||||
|
||||
/// Receives a full 20 ms frame: (interleaved int16 PCM, samplesPerChannel = 960, channels).
|
||||
|
||||
Reference in New Issue
Block a user