fix(windows): real native exclude + self-echo removal for screen audio
"All apps except selected" previously captured the complement of a frozen app snapshot in INCLUDE mode (missed late-launched apps and system sounds, wasted captures on silent windows). It now opens a single ProcessLoopbackCapture in EXCLUDE mode (AUDIOCLIENT_PROCESS_LOOPBACK_MODE_EXCLUDE_TARGET_PROCESS_TREE) of the one chosen app — true system-mix-minus-one, dynamic so apps launched after sharing starts are included. The picker enforces single-selection in exclude mode (the activation params take one target PID). Adds an "Exclude VoiceCat's own audio (prevents echo)" checkbox (default on, entire-desktop only) that routes the desktop capture through the same EXCLUDE path targeting our own process id, killing the whole-device self-echo loop. No C++/ABI changes. Updates voice.md and PROGRESS.md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -6,7 +6,10 @@ namespace VoiceCat.App.Audio;
|
||||
// ── Scope types (mirror macOS ScreenAudioScope / ScreenAudioSelection) ────────
|
||||
|
||||
public abstract record AppAudioScope;
|
||||
public sealed record EntireDesktop : AppAudioScope;
|
||||
// ExcludeSelf=true captures the whole system render mix minus VoiceCat's own process tree
|
||||
// (kills the self-echo loop). Routed through the external-feed mixer as a single EXCLUDE
|
||||
// capture; ExcludeSelf=false keeps the core's whole-device loopback path.
|
||||
public sealed record EntireDesktop(bool ExcludeSelf = false) : AppAudioScope;
|
||||
public sealed record OnlyApps(IReadOnlyList<int> Pids, IReadOnlyList<string> Names) : AppAudioScope;
|
||||
public sealed record AllExceptApps(IReadOnlyList<int> Pids, IReadOnlyList<string> Names) : AppAudioScope;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user