diff --git a/playback/src/audio_backend/alsa.rs b/playback/src/audio_backend/alsa.rs index 927c0921..0e18708b 100644 --- a/playback/src/audio_backend/alsa.rs +++ b/playback/src/audio_backend/alsa.rs @@ -2,7 +2,6 @@ use super::{Open, Sink}; use alsa::device_name::HintIter; use alsa::pcm::{Access, Format, HwParams, PCM}; use alsa::{Direction, Error, ValueOr}; -use std::env; use std::ffi::CString; use std::io; use std::process::exit; @@ -15,7 +14,7 @@ fn list_outputs() { let i = HintIter::new(None, &*CString::new(*t).unwrap()).unwrap(); for a in i { if let Some(Direction::Playback) = a.direction { - println!("{:#?}", a) + println!("{}\n\t{}", a.name.unwrap(), a.desc.unwrap()); } } } diff --git a/playback/src/mixer/alsamixer.rs b/playback/src/mixer/alsamixer.rs index 36256268..5c77d470 100644 --- a/playback/src/mixer/alsamixer.rs +++ b/playback/src/mixer/alsamixer.rs @@ -14,25 +14,27 @@ impl AlsaMixer { let mixer = alsa::mixer::Mixer::new(&self.config.card, false)?; let sid = alsa::mixer::SelemId::new(&*self.config.mixer, self.config.index); - let selem = mixer.find_selem(&sid).expect("Couldn't find SelemId"); + let selem = mixer + .find_selem(&sid) + .expect(format!("Couldn't find simple mixer control for {}", self.config.mixer).as_str()); let (min, max) = selem.get_playback_volume_range(); - let cur_vol = selem - .get_playback_volume(alsa::mixer::SelemChannelId::mono()) - .expect("Couldn't get current volume"); let range = (max - min) as f64; let new_vol: u16; if let Some(vol) = set_volume { let alsa_volume: i64 = ((vol as f64 / 0xFFFF as f64) * range) as i64 + min; - debug!("Mapping volume {:?} [u16] ->> alsa {:?} [i64]", vol, alsa_volume); + debug!("Mapping volume {:?} ->> alsa {:?}", vol, alsa_volume); selem .set_playback_volume_all(alsa_volume) .expect("Couldn't set alsa volume"); new_vol = vol; } else { + let cur_vol = selem + .get_playback_volume(alsa::mixer::SelemChannelId::mono()) + .expect("Couldn't get current volume"); new_vol = (((cur_vol - min) as f64 / range) * 0xFFFF as f64) as u16; - debug!("Mapping volume {:?} [u16] <<- alsa {:?} [i64]", new_vol, cur_vol); + debug!("Mapping volume {:?} <<- alsa {:?}", new_vol, cur_vol); } Ok(new_vol) diff --git a/src/main.rs b/src/main.rs index cfc752ff..4fec379a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -140,10 +140,10 @@ fn setup(args: &[String]) -> Setup { .optopt( "", "device", - "Audio device to use. Use '?' to list options if using portaudio", + "Audio device to use. Use '?' to list options if using portaudio or alsa", "DEVICE", ) - .optopt("", "mixer", "Mixer to use (Alsa or softmixer)", "MIXER") + .optopt("", "mixer", "Mixer to use (alsa or softmixer)", "MIXER") .optopt( "m", "mixer-name", @@ -228,9 +228,12 @@ fn setup(args: &[String]) -> Setup { let mixer = mixer::find(mixer_name.as_ref()).expect("Invalid mixer"); let mixer_config = MixerConfig { - card: matches.opt_str("mixer-card").unwrap_or(String::from("default")), - mixer: matches.opt_str("mixer-name").unwrap_or(String::from("PCM")), - index: matches.opt_str("mixer-index").map(|index| index.parse::().unwrap()).unwrap_or(0), + card: matches.opt_str("mixer-card").unwrap_or(String::from("default")), + mixer: matches.opt_str("mixer-name").unwrap_or(String::from("PCM")), + index: matches + .opt_str("mixer-index") + .map(|index| index.parse::().unwrap()) + .unwrap_or(0), }; let use_audio_cache = !matches.opt_present("disable-audio-cache"); @@ -247,8 +250,7 @@ fn setup(args: &[String]) -> Setup { panic!("Initial volume must be in the range 0-100"); } (volume as i32 * 0xFFFF / 100) as u16 - }) - .or_else(|| cache.as_ref().and_then(Cache::volume)) + }).or_else(|| cache.as_ref().and_then(Cache::volume)) .unwrap_or(0x8000); let zeroconf_port = matches