mirror of
https://github.com/talwat/lowfi
synced 2025-01-28 03:11:27 +00:00
feat: fine grained volume adjustment (#8)
This commit is contained in:
parent
a414c5e9f4
commit
49e7191369
@ -39,11 +39,8 @@ pub enum Messages {
|
||||
/// Pauses the [Sink]. This will also unpause it if it is paused.
|
||||
Pause,
|
||||
|
||||
/// Increase the volume of playback
|
||||
VolumeUp,
|
||||
|
||||
/// Decrease the volume of playback
|
||||
VolumeDown,
|
||||
/// Change the volume of playback
|
||||
ChangeVolume(f32),
|
||||
}
|
||||
|
||||
const TIMEOUT: Duration = Duration::from_secs(8);
|
||||
@ -220,17 +217,8 @@ impl Player {
|
||||
player.sink.pause();
|
||||
}
|
||||
}
|
||||
Messages::VolumeUp => {
|
||||
// Increase the volume, if possible.
|
||||
if player.sink.volume() < 1.0 {
|
||||
player.sink.set_volume(player.sink.volume() + 0.1);
|
||||
}
|
||||
}
|
||||
Messages::VolumeDown => {
|
||||
// Decreaes the volume, if possible.
|
||||
if player.sink.volume() > 0.0 {
|
||||
player.sink.set_volume(player.sink.volume() - 0.1);
|
||||
}
|
||||
Messages::ChangeVolume(change) => {
|
||||
player.sink.set_volume((player.sink.volume() + change).clamp(0.0, 1.0));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -120,8 +120,10 @@ pub async fn start(
|
||||
|
||||
let messages = match event.code {
|
||||
// Arrow key volume controls.
|
||||
KeyCode::Up | KeyCode::Right => Messages::VolumeUp,
|
||||
KeyCode::Down | KeyCode::Left => Messages::VolumeDown,
|
||||
KeyCode::Up => Messages::ChangeVolume(0.1),
|
||||
KeyCode::Right => Messages::ChangeVolume(0.01),
|
||||
KeyCode::Down => Messages::ChangeVolume(-0.1),
|
||||
KeyCode::Left => Messages::ChangeVolume(-0.01),
|
||||
KeyCode::Char(character) => match character {
|
||||
// Ctrl+C
|
||||
'c' if event.modifiers == KeyModifiers::CONTROL => break,
|
||||
@ -136,8 +138,8 @@ pub async fn start(
|
||||
'p' => Messages::Pause,
|
||||
|
||||
// Volume up & down
|
||||
'+' | '=' => Messages::VolumeUp,
|
||||
'-' | '_' => Messages::VolumeDown,
|
||||
'+' | '=' => Messages::ChangeVolume(0.1),
|
||||
'-' | '_' => Messages::ChangeVolume(-0.1),
|
||||
_ => continue,
|
||||
},
|
||||
_ => continue,
|
||||
@ -145,7 +147,7 @@ pub async fn start(
|
||||
|
||||
// If it's modifying the volume, then we'll set the `volume_timer` to 1
|
||||
// so that the ui thread will know that it should show the audio bar.
|
||||
if messages == Messages::VolumeDown || messages == Messages::VolumeUp {
|
||||
if let Messages::ChangeVolume(_) = messages {
|
||||
volume_timer.store(1, Ordering::Relaxed);
|
||||
}
|
||||
|
||||
|
@ -49,7 +49,7 @@ pub fn audio_bar(player: &Arc<Player>) -> String {
|
||||
let volume = player.sink.volume();
|
||||
|
||||
let audio = (player.sink.volume() * AUDIO_WIDTH as f32).round() as usize;
|
||||
let percentage = format!("{}%", (volume * 100.0).ceil().abs());
|
||||
let percentage = format!("{}%", (volume * 100.0).round().abs());
|
||||
|
||||
format!(
|
||||
" volume: [{}{}] {}{} ",
|
||||
|
Loading…
x
Reference in New Issue
Block a user