use async_trait::async_trait;
use futures::stream::BoxStream;
use crate::audio::device::AudioDevice;
use crate::audio::error::AudioResult;
use crate::audio::types::{AudioBuffer, AudioConfig};
#[async_trait]
pub trait AudioCapture: Send + Sync {
fn list_devices(&self) -> AudioResult<Vec<AudioDevice>>;
fn default_device(&self) -> AudioResult<Option<AudioDevice>>;
fn start_capture(
&self,
device: Option<&AudioDevice>,
config: &AudioConfig,
) -> AudioResult<BoxStream<'static, AudioResult<AudioBuffer>>>;
async fn record(
&self,
device: Option<&AudioDevice>,
config: &AudioConfig,
duration_secs: f64,
) -> AudioResult<AudioBuffer>;
}