skillok meeting
1b62ba24a18c2b97ace8dd04ee8ccbcfafcb5b37
Перейти к файлу
Код
meeting cratesaudiosrclib.rs
anc macOS: запись звука Zoom и микрофона - Звук Zoom — ScreenCaptureKit с фильтром по приложению us.zoom.xos, сразу 16 кГц моно; микрофон — CoreAudio через cpal. - Info.plist с объяснениями для запросов доступа (микрофон, системный звук), minimumSystemVersion 13.0, сборка .app. - Swift-мост ScreenCaptureKit при одних Command Line Tools: путь к библиотекам совместимости Swift и rpath /usr/lib/swift в build.rs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> 1b62ba2 30 сентября 2026 г.
lib.rs
//! Звук встречи: захват, чтение файлов, формат и нарезка на куски для
//! распознавания. Всё, что не зависит от системы, проверяется тестами на любой
//! машине; сам захват — в модулях [`win`] (Windows) и [`mac`] (macOS).

pub mod chunker;
pub mod decode;
pub mod pcm;
pub mod source;

#[cfg(target_os = "macos")]
pub mod mac;
#[cfg(windows)]
pub mod win;

use source::{Capture, CaptureError};

/// Микрофон по умолчанию.
pub fn open_microphone() -> Result<Box<dyn Capture>, CaptureError> {
    #[cfg(windows)]
    return Ok(Box::new(win::Microphone::open()?));
    #[cfg(target_os = "macos")]
    return Ok(Box::new(mac::Microphone::open()?));
    #[cfg(not(any(windows, target_os = "macos")))]
    Err(CaptureError::Unsupported)
}

/// Звук процесса Zoom (и его дочерних процессов).
pub fn open_zoom_audio(_pid: u32) -> Result<Box<dyn Capture>, CaptureError> {
    #[cfg(windows)]
    return Ok(Box::new(win::ProcessLoopback::open(_pid)?));
    #[cfg(target_os = "macos")]
    return Ok(Box::new(mac::ZoomAudio::open(_pid)?));
    #[cfg(not(any(windows, target_os = "macos")))]
    Err(CaptureError::Unsupported)
}

/// Процесс Zoom, звук которого писать. В Windows — Zoom с открытым потоком
/// звука (идёт встреча); на Mac — запущенное приложение Zoom. Нет — `None`.
pub fn zoom_process() -> Option<u32> {
    #[cfg(windows)]
    return win::active_zoom_process();
    #[cfg(target_os = "macos")]
    return mac::zoom_process();
    #[cfg(not(any(windows, target_os = "macos")))]
    None
}

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