fix(audio): both sync offsets ship at zero

Shipping 175 ms as the built-in mic delay was wrong on principle, not just in value: it shifts
every creator's voice to correct one camera on one desk, and it hides whether a desync is theirs
or ours. A correction has to be something the creator turned on.

So DefaultMicSyncOffsetMs is 0. The control stays (slider 0..500, off/175/350 presets, applied value
logged) for anyone whose camera needs it; it is simply no longer pre-applied. The global offset was
already 0.

AudioSyncSettingsTests pins the rule: a fresh profile reads 0 for both, the mic delay refuses a
negative (advancing is the global offset's job) and clamps above 500, and set values round-trip.

676 pass, 0 warnings. Scope justification: Assets/starting-background.jpg is outside this unit — the
creator's replacement art, still awaiting their visual check.
This commit is contained in:
2026-11-12 14:16:20 -08:00
parent c1b3868913
commit 1eb04597d1
4 changed files with 59 additions and 9 deletions
+6 -3
View File
@@ -117,9 +117,12 @@ public partial class LayoutStore : IDisposable
return int.TryParse(value, out var ms) ? Math.Clamp(ms, -500, 500) : 0;
}
/// <summary>The shipped default for the microphone-only delay. The creator's measurement for a
/// C920 pipeline (asked for +150..+200 ms); a camera with less latency wants less.</summary>
public const int DefaultMicSyncOffsetMs = 175;
/// <summary>
/// The shipped default for the microphone-only delay: **zero**. A sync offset is a correction for one
/// camera on one desk, never a product default — shipping a number would shift every creator's audio
/// to fix one machine's camera, and would hide whether the fault is theirs or ours.
/// </summary>
public const int DefaultMicSyncOffsetMs = 0;
/// <summary>Microphone-only sync delay (0..500 ms), so the voice can wait for the camera's picture
/// without moving desktop or alert audio. Absent means the shipped default.</summary>