docs(domain H): v2 — медиа/аудио + арбитр ducking, после adversarial-ревью (20 находок) + кросс-док

Новый домен H (медиа/аудио). Ядро — сквозной арбитр аудио (политика
фокуса/ducking поверх PipeWire, role-based), плюс медиаплеер (локальное/BT
A2DP/AVRCP/радио/стриминг). Многоагентный adversarial-ревью: 24 находки,
20 подтверждено (default-refute), все применены.

Ключевое из ревью:
- symphonia НЕ декодирует Opus → отдельный audiopus (libopus, BSD).
- AEC: module-echo-cancel (≠ filter-chain) в audio-plane, не в ассистенте — резолв D §147.
- media.role (арбитраж) vs media.category (Playback/Capture) разведены.
- Кнопки громкости мультируля — uinput→Wayland-input (C/K), не интенты ассистента.
- Crash-safe по двум осям (source: жизнь ноды + проактивный cork по NameOwnerChanged/watchdog; sink: пересчёт при возврате output).
- intra-role media-фокус (один media-продюсер), гистерезис фокуса (анти-pumping), duck = относит. аттенюатор.
- boot аудио-плоскости на Stage 1; отказ-пути плеера (битый файл/обрыв A2DP/ENOSPC/underrun); resume без авто-старта.

Кросс-док: D §147 AEC→; tech-stack (symphonia/audiopus/module-echo-cancel);
hardware §4 (amp-mute-GPIO + FM-тюнер + откр. вопросы); B §4 (amp-mute перед
cut); architecture §9 (аудио-арбитр → H); domains/README (строка H).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-22 18:08:36 +03:00
parent b9747ee66d
commit 77d9a5a0ee
7 changed files with 267 additions and 7 deletions
+4 -3
View File
@@ -142,9 +142,10 @@ intent router · LLM backend (pluggable) · TTS (Silero, офлайн).
- ◻️ **Barge-in** (прерывание TTS) — later.
- ◻️ **Размер контекста:** машина + память + история → токены (особенно у офлайн-модели
с маленьким окном); нужна обрезка/суммаризация. → реализация.
- ◻️ **AEC (эхоподавление):** подавление собственного TTS/медиа-выхода (loopback-ref из
PipeWire) — нужно для wake-word во время воспроизведения и barge-in; место (WirePlumber/
filter-chain vs внутри ассистента). → этот домен + architecture (audio plane).
- **AEC (эхоподавление):** подавление собственного TTS/медиа-выхода (loopback-ref из
PipeWire) — нужно для wake-word во время воспроизведения и barge-in. **Резолв:** узел audio-plane
на базе `module-echo-cancel` (WebRTC APM), референс = monitor выхода, **не внутри ассистента**
loopback-tap публикует Media (H §4); ассистент потребляет уже очищенную capture-ноду.
- ◻️ **Beamforming/денойз** (внешний шум салона): mic-массив; офлайн-STT фиксирован приватностью. → [hardware.md](../contracts/hardware.md).
- ◻️ **Plugin-интенты как function-calling** (tool-use LLM) vs фразы — зависит от
поддержки провайдером (у GigaChat/YandexGPT может быть ограничена). → реализация.