Skip to main content

Crate flexaudio_mic

Crate flexaudio_mic 

Source
Expand description

flexaudio-mic — cpal によるマイク入力バックエンド(全 OS)。

CpalMicBackend は cpal で入力デバイスから生 interleaved f32 フレームを取り、 RawSink へ非ブロッキングに push する CaptureBackend 実装。検証は主に Linux/ALSA だが、cpal が対応する OS なら動く。

§cpal::Stream!Send なので所有スレッドへ閉じ込める

CaptureBackendSend を要求するが 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§

CpalMicBackend
cpal によるマイク入力キャプチャバックエンド。

Functions§

list_devices
入力(マイク)デバイスを列挙する。devices() のマイク分。