librespot/playback/src/mixer/mod.rs

38 lines
955 B
Rust
Raw Normal View History

2018-02-26 01:50:41 +00:00
pub trait Mixer: Send {
2018-03-20 15:32:43 +00:00
fn open(Option<String>) -> Self
2018-02-26 01:50:41 +00:00
where
Self: Sized;
fn start(&self);
fn stop(&self);
fn set_volume(&self, volume: u16);
fn volume(&self) -> u16;
2017-01-27 13:20:31 +00:00
fn get_audio_filter(&self) -> Option<Box<AudioFilter + Send>> {
None
}
}
2017-01-27 13:20:31 +00:00
pub trait AudioFilter {
2017-02-21 21:49:45 +00:00
fn modify_stream(&self, data: &mut [i16]);
2017-01-25 21:49:18 +00:00
}
2018-03-20 15:32:43 +00:00
#[cfg(feature = "alsa-backend")]
pub mod alsamixer;
#[cfg(feature = "alsa-backend")]
use self::alsamixer::AlsaMixer;
2017-02-21 21:49:45 +00:00
pub mod softmixer;
use self::softmixer::SoftMixer;
2018-03-20 15:32:43 +00:00
fn mk_sink<M: Mixer + 'static>(device: Option<String>) -> Box<Mixer> {
Box::new(M::open(device))
}
2018-03-20 15:32:43 +00:00
pub fn find<T: AsRef<str>>(name: Option<T>) -> Option<fn(Option<String>) -> Box<Mixer>> {
2017-02-21 21:49:45 +00:00
match name.as_ref().map(AsRef::as_ref) {
None | Some("softvol") => Some(mk_sink::<SoftMixer>),
2018-03-20 15:32:43 +00:00
#[cfg(feature = "alsa-backend")]
Some("alsa") => Some(mk_sink::<AlsaMixer>),
2017-02-21 21:49:45 +00:00
_ => None,
}
}