blob: 061ab606c87c126232fc3013c46b28e750ddfa98 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
use crate::types::Config;
use alsa::mixer::{Mixer, SelemChannelId, SelemId};
// getting volume percentage
pub fn get_volume(config: &Config) -> String {
let card = if config.volume.card == "PULSE" {
"pulse"
} else {
"default"
};
let mixer = Mixer::new(card, false).expect("Failed to open mixer");
let selem_id = SelemId::new("Master", 0);
let selem = mixer.find_selem(&selem_id).expect("Couldn't find selem");
let selem_chan_id = SelemChannelId::FrontLeft;
let (min, max) = selem.get_playback_volume_range();
let mut raw_volume = selem
.get_playback_volume(selem_chan_id)
.expect("Failed to get raw_volume");
let range = max - min;
let vol = if range == 0 {
0
} else {
raw_volume -= min;
((raw_volume as f64 / range as f64) * 100.) as u64
};
format!(" {} {}% {}", config.volume.icon, vol, config.seperator)
}
|