diff --git a/src/mixer/fixedmixer.rs b/src/mixer/fixedmixer.rs new file mode 100644 index 00000000..cfa35bb8 --- /dev/null +++ b/src/mixer/fixedmixer.rs @@ -0,0 +1,28 @@ +use std::sync::Arc; +use std::sync::atomic::{AtomicUsize, Ordering}; + +use super::Mixer; + +#[derive(Clone)] +pub struct FixedMixer { + volume: Arc +} + +impl Mixer for FixedMixer { + fn open() -> FixedMixer { + FixedMixer { + volume: Arc::new(AtomicUsize::new(0xFFFF)) + } + } + fn start(&self) { + } + fn stop(&self) { + } + fn volume(&self) -> u16 { + self.volume.load(Ordering::Relaxed) as u16 + } + fn set_volume(&self, volume: u16) { + self.volume.store(volume as usize, Ordering::Relaxed); + debug!("volume {}", volume) + } +} diff --git a/src/mixer/mod.rs b/src/mixer/mod.rs index a33f5e54..3e4a6143 100644 --- a/src/mixer/mod.rs +++ b/src/mixer/mod.rs @@ -16,6 +16,9 @@ pub trait AudioFilter { pub mod softmixer; use self::softmixer::SoftMixer; +pub mod fixedmixer; +use self::fixedmixer::FixedMixer; + fn mk_sink() -> Box { Box::new(M::open()) } @@ -23,6 +26,7 @@ fn mk_sink() -> Box { pub fn find>(name: Option) -> Option Box> { match name.as_ref().map(AsRef::as_ref) { None | Some("softvol") => Some(mk_sink::), + Some("fixedvol") => Some(mk_sink::), _ => None, } }