mod backend_source;
mod renderer;
use crate::sounds::wrappers::Controllable;
use crate::sounds::wrappers::Controller;
use crate::sounds::SoundMixer;
use crate::Sound;
pub use backend_source::BackendSource;
pub use renderer::Renderer;
#[derive(Clone)]
pub struct Manager {
mixer_controller: Controller<SoundMixer>,
}
const DEFAULT_CHANNEL_COUNT: u16 = 1;
const DEFAULT_SAMPLE_RATE: u32 = 1000;
impl Manager {
pub fn new() -> (Self, Renderer) {
let (mixer, mixer_controller) =
Controllable::new(SoundMixer::new(DEFAULT_CHANNEL_COUNT, DEFAULT_SAMPLE_RATE));
let renderer = Renderer::new(mixer);
let manager = Manager { mixer_controller };
(manager, renderer)
}
pub fn play(&mut self, sound: Box<dyn Sound>) {
self.mixer_controller.add(sound);
}
pub fn clear(&mut self) {
self.mixer_controller.clear();
}
}
impl std::fmt::Debug for Manager {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("Manager").finish()
}
}