}
const FRAME_QUEUE_LEN: usize = 25;
-const MAX_VOLUME: usize = 200;
+const MAX_VOLUME: usize = 400;
+
+const VOLUME_STEPS: &[usize] = &[5, 10, 25, 50, 75, 100, 125, 150, 175, 200, 250, 300, 350, 400];
+
+fn find_volume_step_down(vol: usize) -> usize {
+ for vr in VOLUME_STEPS.windows(2) {
+ if vol > vr[0] && vol <= vr[1] {
+ return vr[0];
+ }
+ }
+ if vol <= VOLUME_STEPS[0] {
+ 0
+ } else {
+ MAX_VOLUME
+ }
+}
+
+fn find_volume_step_up(vol: usize) -> usize {
+ for vr in VOLUME_STEPS.windows(2) {
+ if vol >= vr[0] && vol < vr[1] {
+ return vr[1];
+ }
+ }
+ if vol < VOLUME_STEPS[0] {
+ VOLUME_STEPS[0]
+ } else {
+ MAX_VOLUME
+ }
+}
pub type FrameRecord = (NABufferType, u64);
Keycode::PageDown | Keycode::Kp3 => { self.seek(600, false, dmx, disp_queue)?; },
Keycode::Space => { self.toggle_pause(); },
Keycode::Plus | Keycode::KpPlus => {
- self.volume = (self.volume + 10).min(MAX_VOLUME);
+ self.volume = find_volume_step_up(self.volume);
if !self.mute {
self.acontrol.set_volume(self.volume);
}
},
Keycode::Equals if keymod.contains(Mod::RSHIFTMOD) || keymod.contains(Mod::LSHIFTMOD) => {
- self.volume = (self.volume + 10).min(MAX_VOLUME);
+ self.volume = find_volume_step_up(self.volume);
if !self.mute {
self.acontrol.set_volume(self.volume);
}
},
Keycode::Minus | Keycode::KpMinus => {
- self.volume = self.volume.saturating_sub(10);
+ self.volume = find_volume_step_down(self.volume);
if !self.mute {
self.acontrol.set_volume(self.volume);
}