Expand description
flexaudio-mic — cpal によるマイク入力バックエンド(全 OS)。
CpalMicBackend は cpal で入力デバイスから生 interleaved f32 フレームを取り、
RawSink へ非ブロッキングに push する CaptureBackend 実装。検証は主に
Linux/ALSA だが、cpal が対応する OS なら動く。
§cpal::Stream が !Send なので所有スレッドへ閉じ込める
CaptureBackend は Send を要求するが cpal::Stream は !Send なので、
backend 構造体に直接持てない。start でスレッドを
spawn し、その中で stream を build + play() して停止シグナルまで park する。
停止時にそのスレッドが Stream を drop してキャプチャが止まる。構造体自身が持つのは
Send なもの(停止フラグ・JoinHandle・キャッシュ済みフォーマット)だけ。
use flexaudio_mic::CpalMicBackend;
use flexaudio_core::{CaptureBackend, RawSink, raw_ring};
// 既定入力デバイス(device_id = None)。特定デバイスを選ぶなら
// `CpalMicBackend::new(Some("デバイス名".into()))`(id = デバイス名)。
let mut backend = CpalMicBackend::new(None);
let (rate, channels) = backend.native_format();
let (prod, _cons) = raw_ring(rate as usize * channels as usize); // 1 秒ぶん
let sink = RawSink::new(prod, rate, channels);
backend.start(sink).unwrap();
// ... _cons から生フレームを pop ...
backend.stop();Structs§
- Cpal
MicBackend - cpal によるマイク入力キャプチャバックエンド。
Functions§
- list_
devices - 入力(マイク)デバイスを列挙する。
devices()のマイク分。