anc
Этап 1: запись встречи в Zoom, живая расшифровка и разбор
- crates/audio: захват звука процесса Zoom и микрофона (WASAPI, process
loopback), формат 16 кГц моно, нарезка на куски по паузам с отсевом
тишины, распознавание начала и конца встречи по звуковой сессии Zoom.
- Ядро: запись двух дорожек → Whisper через OpenRouter → расшифровка,
живой конспект раз в три минуты, по окончании — разбор сам; звук
удаляется после разбора, если не включено хранение.
- Контроллер: слежу за Zoom → прошу предупредить участников → пишу;
запись вручную, пауза, стоп; прерванная запись помечается при запуске.
- Трей, уведомления, крестик прячет окно, запуск вместе с Windows.
- Интерфейс: главный экран с карточкой состояния (задача #1), живая
расшифровка и конспект на экране встречи, новые настройки.
- reqwest на системном TLS: под Windows без C-кода ring.
- 67 тестов; код под Windows проверен компиляцией и clippy с Mac,
на Windows не запускался.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
169ce64
30 сентября 2026 г.
detector.rs
//! Когда встреча в Zoom началась и когда закончилась.
//!
//! Признак встречи — у процесса Zoom есть активная звуковая сессия вывода:
//! во время встречи Zoom держит поток воспроизведения открытым, даже когда все
//! молчат. Вне встречи потока нет (или он короткий — звук уведомления).
//!
//! Сам опрос системы — в `windows::zoom`; здесь только решение по его
//! результатам, чтобы его можно было проверить тестами на любой машине:
//! - встреча началась, если сессия активна дольше `start_after_ms` — отсекаем
//! звук входящего сообщения и тестовый звонок динамика;
//! - встреча закончилась, если сессии нет дольше `end_after_ms` — переподключение
//! и смена динамика в настройках Zoom не рвут запись;
//! - процесс Zoom сменился (перезапуск) — это конец прежней встречи.