use bevy::{prelude::App, utils::default};
use crate::dsp_source::DspSource;
#[cfg(feature = "bevy_audio")]
pub mod bevy_audio;
#[cfg(feature = "kira")]
pub mod kira;
#[cfg(feature = "oddio")]
pub mod oddio;
#[allow(clippy::module_name_repetitions)]
#[cfg(feature = "bevy_audio")]
pub type DefaultBackend = bevy_audio::BevyAudioBackend;
#[allow(clippy::module_name_repetitions)]
#[cfg(feature = "kira")]
pub type DefaultBackend = kira::KiraBackend;
#[allow(clippy::module_name_repetitions)]
#[cfg(feature = "oddio")]
pub type DefaultBackend = oddio::OddioBackend;
pub trait Backend: Send + Sync + 'static {
type StaticAudioSource;
fn init_app(app: &mut App);
fn convert_to_audio_source(dsp_source: DspSource) -> Self::StaticAudioSource;
}
pub trait DspAudioExt {
type Assets;
type Settings: Default;
type Sink;
fn play_dsp_with_settings(
&mut self,
assets: &mut Self::Assets,
source: &DspSource,
settings: Self::Settings,
) -> Self::Sink;
fn play_dsp(&mut self, assets: &mut Self::Assets, source: &DspSource) -> Self::Sink {
self.play_dsp_with_settings(assets, source, default())
}
}