skillok meeting
169ce64e1705fd64e48ee357a816bbdb90bab01d
Перейти к файлу
Код
meeting cratesaudiosrclib.rs
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 г.
lib.rs
//! Звук встречи: захват, формат, нарезка на куски и распознавание начала
//! встречи в Zoom. Всё, что не зависит от Windows, проверяется тестами на любой
//! машине; сам захват — в модуле [`win`] и собирается только под Windows.

pub mod chunker;
pub mod detector;
pub mod pcm;
pub mod source;

#[cfg(windows)]
pub mod win;

/// Микрофон и звук процесса Zoom. Вне Windows — ошибка «только в Windows».
pub fn open_microphone() -> Result<Box<dyn source::Capture>, source::CaptureError> {
    #[cfg(windows)]
    {
        Ok(Box::new(win::Microphone::open()?))
    }
    #[cfg(not(windows))]
    {
        Err(source::CaptureError::Unsupported)
    }
}

pub fn open_process_loopback(_pid: u32) -> Result<Box<dyn source::Capture>, source::CaptureError> {
    #[cfg(windows)]
    {
        Ok(Box::new(win::ProcessLoopback::open(_pid)?))
    }
    #[cfg(not(windows))]
    {
        Err(source::CaptureError::Unsupported)
    }
}

/// Процесс Zoom с активной сессией вывода звука, если он есть. Вне Windows — `None`.
pub fn active_zoom_process() -> Option<u32> {
    #[cfg(windows)]
    {
        win::active_zoom_process()
    }
    #[cfg(not(windows))]
    {
        None
    }
}

/// Запись встреч возможна на этой машине.
pub const CAPTURE_SUPPORTED: bool = cfg!(windows);