docs(adr-0005): Phase 3.5 dual-channel capture supersedes the masked-mono timeline (FR-SPK)
This commit is contained in:
1 parent
90a9cbd476
commit
32bb4057ec
1 file changed
+24
@@ -56,6 +56,30 @@ The original blind-clustering + voiceprint pass **remains the fallback** for mic
|
||||
imports (no timeline). Naming stays uniform (`build_name_map`: "You", then `Speaker 2…`). Segment
|
||||
IDs and the names-in-DB rule are unchanged; only the *source* of the spans changes.
|
||||
|
||||
### Phase 3.5 refinement — dual-channel capture (supersedes Phase 3's timeline, 2026-07-14)
|
||||
|
||||
The Phase 3 timeline above reconstructed the mic/far-side split *after the fact* from a summed-mono
|
||||
`audio.wav` plus a `mic_activity.json` sidecar, masking the mic ranges before clustering. That was
|
||||
reliable at stop but **fragile on reprocess** (re-aligning a sidecar against a mono mix — it
|
||||
collapsed to a single speaker) and carried a parallel persistence path.
|
||||
|
||||
**Decision:** when the mic is enabled, record `audio.wav` as **stereo with the streams separated —
|
||||
left = microphone ("You"), right = system/loopback ("Speaker")** instead of summing them. The
|
||||
separation is then intrinsic to the recording:
|
||||
|
||||
- Diarization runs on the **right channel only** → `Speaker N`; "You" comes from **left-channel**
|
||||
voice activity (`vad_spans`). The mic is never clustered, by construction.
|
||||
- Reprocess recomputes both from the file — no sidecar, no masking; stop and reprocess agree.
|
||||
- Transcription still downmixes (L+R) to the same summed mono; playback folds to mono and bundle
|
||||
export folds to dual-mono so shared/played audio is normal.
|
||||
- A `meetings.audio_layout` flag (`summed` | `split`, carried in the bundle manifest) distinguishes
|
||||
recordings; existing `summed` recordings keep the blind-clustering + voiceprint path. On a stereo
|
||||
render endpoint this is **size-neutral** (the file was already 2ch with the mic summed into both).
|
||||
|
||||
This **retires** `MicActivity` / `mic_activity.json` / masked diarization from Phase 3 (see the
|
||||
retirement note at `attribute_split` in `commands.rs`); the capture-silence handling,
|
||||
`diarize_samples`, and `build_name_map` naming are retained. Segment IDs and names-in-DB unchanged.
|
||||
|
||||
## Revisit if
|
||||
A single model gives joint ASR + diarization with better accuracy, or whisper.cpp gains
|
||||
production diarization.
|
||||
Reference in new issue
Block a user