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 AudioPlayback: Send + Sync {
fn list_devices(&self) -> AudioResult<Vec<AudioDevice>>;
fn default_device(&self) -> AudioResult<Option<AudioDevice>>;
async fn play(&self, device: Option<&AudioDevice>, buffer: &AudioBuffer) -> AudioResult<()>;
async fn play_stream(
&self,
device: Option<&AudioDevice>,
config: &AudioConfig,
stream: BoxStream<'static, AudioResult<AudioBuffer>>,
) -> AudioResult<()>;
}