mirror of
https://github.com/librespot-org/librespot.git
synced 2024-12-18 17:11:53 +00:00
More alsa
stragglers
This commit is contained in:
parent
a80bf86a2b
commit
cc6c9b2dc4
3 changed files with 18 additions and 15 deletions
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
16
src/main.rs
16
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::<u32>().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::<u32>().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
|
||||
|
|
Loading…
Reference in a new issue