mod.rs 677 B

12345678910111213141516171819202122232425262728
  1. pub trait Mixer : Send {
  2. fn open() -> Self where Self: Sized;
  3. fn start(&self);
  4. fn stop(&self);
  5. fn set_volume(&self, volume: u16);
  6. fn volume(&self) -> u16;
  7. fn get_audio_filter(&self) -> Option<Box<AudioFilter + Send>> {
  8. None
  9. }
  10. }
  11. pub trait AudioFilter {
  12. fn modify_stream(&self, data: &mut [i16]);
  13. }
  14. pub mod softmixer;
  15. use self::softmixer::SoftMixer;
  16. fn mk_sink<M: Mixer + 'static>() -> Box<Mixer> {
  17. Box::new(M::open())
  18. }
  19. pub fn find<T: AsRef<str>>(name: Option<T>) -> Option<fn() -> Box<Mixer>> {
  20. match name.as_ref().map(AsRef::as_ref) {
  21. None | Some("softvol") => Some(mk_sink::<SoftMixer>),
  22. _ => None,
  23. }
  24. }