Skip to main content

flexaudio_os_macos/
lib.rs

1//! flexaudio-os-macos — macOS バックエンド。Core Audio Process Taps
2//! (objc2-core-audio, macOS 14.4+) を使う。
3//!
4//! システム音声出力全体([`MacSystemBackend`])と特定プロセス([`MacProcessBackend`])を
5//! Process Tap で録る。Windows の WASAPI loopback / Linux の PipeWire monitor に相当する。
6//!
7//! # アーキテクチャ
8//! tap チェーン(`CATapDescription` → process tap → private aggregate device →
9//! IOProc block → start)は [`tap`] モジュールにまとめてあり、両バックエンドは
10//! INCLUDE/EXCLUDE の `TapKind` を切り替えて同じチェーンを回す。`!Send` な ObjC オブジェクト
11//! (`Retained<CATapDescription>` / `RcBlock` / `TapChain`)はバックエンドの専用スレッド内に
12//! 閉じ込め、`Send` な本体(停止フラグ・`JoinHandle`・フォーマット)だけがスレッドを跨ぐ
13//! (cpal / Windows / Linux バックエンドと同じ作り)。
14//!
15//! # 権限(TCC)
16//! システム/プロセス音声キャプチャは TCC の `kTCCServiceAudioCapture` を要求する
17//! (Info.plist の `NSAudioCaptureUsageDescription`)。private TCC SPI は使わず、権限の可否は
18//! 初回キャプチャ時の OS プロンプトに委ねる。tap 作成が未承認で弾かれた場合は
19//! [`map_os_status`](common::map_os_status) が権限拒否系 OSStatus を
20//! [`Error::PermissionDenied`](flexaudio_core::types::Error) へ寄せる。
21//!
22//! # 非 macOS
23//! macOS 専用。`#![cfg(target_os = "macos")]` で非 macOS では空コンパイルになり、objc2 系依存も
24//! `Cargo.toml` の `target.'cfg(...macos)'` セクションでのみ引かれる(Linux/Windows ビルドは無傷)。
25
26#![cfg(target_os = "macos")]
27#![warn(missing_docs)]
28
29mod common;
30mod devices;
31mod process;
32mod system;
33mod tap;
34mod version;
35
36pub use devices::list_output_devices;
37pub use process::MacProcessBackend;
38pub use system::MacSystemBackend;