flexaudio_core/lib.rs
1//! flexaudio-core — OS 非依存コア。
2//!
3//! デスクトップ音声キャプチャ抽象化ライブラリ `flexaudio` の OS 非依存部分。
4//! リングバッファ / SR 変換 / チャンネル mix / 20ms チャンク化 / クロック正規化 /
5//! イベント・型定義を提供する。OS 固有のキャプチャは [`backend::CaptureBackend`] を
6//! 実装する別 crate(`flexaudio-os-*`)が担い、facade 層が両者を配線する。
7//!
8//! # 固定契約
9//! 内部処理はすべて interleaved `f32` / 48000 Hz / ステレオ 2ch / 20ms = 960
10//! frames/chunk で行う。外部へ出すレート/チャンネルは [`OutputFormat`] で変えられ
11//! (Normalizer 第 2 段が再変換。例 16k/1ch は 320 frames/chunk)、出力チャンクは
12//! レートに依らず時間ベースで 20ms。
13//!
14//! 公開 API にコールバックは無い。RT スレッドは push のみ、消費側は poll する。
15//! RT 経路は非ブロッキング(満杯時は DROP_OLDEST / overflow ドロップ)。PTS は
16//! デバイス由来で、ギャップを検知する。
17//!
18//! # 2 段リングバッファ構成
19//! ```text
20//! [RT cb] --push--> RawRing (rtrb, RT安全) --pop--> [取り込み/加工スレッド]
21//! |
22//! Normalizer (mix + rubato SRC + 960切出)
23//! |
24//! v
25//! ChunkRing (ringbuf, DROP_OLDEST) --try_pop--> [poll]
26//! ```
27
28#![warn(missing_docs)]
29
30pub mod backend;
31pub mod chunk_ring;
32pub mod clock;
33pub mod normalizer;
34pub mod raw_ring;
35pub mod types;
36
37// 主要型をクレート直下へ再エクスポート。
38pub use backend::{CaptureBackend, RawSink};
39pub use chunk_ring::{chunk_ring, ChunkConsumer, ChunkProducer};
40pub use clock::{monotonic_now_ns, ClockNormalizer};
41pub use normalizer::{Normalizer, CHUNK_FRAMES};
42pub use raw_ring::{raw_ring, RawConsumer, RawProducer};
43pub use types::{
44 AudioChunk, ChunkFlags, DeviceEvent, DeviceInfo, Error, Event, OutputFormat, Result,
45 SourceKind, StreamConfig, CHANNELS, SAMPLE_RATE,
46};