aboutsummaryrefslogtreecommitdiffstats
path: root/src/audio_player.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio_player.rs')
-rw-r--r--src/audio_player.rs23
1 files changed, 12 insertions, 11 deletions
diff --git a/src/audio_player.rs b/src/audio_player.rs
index d231c72..5f9c625 100644
--- a/src/audio_player.rs
+++ b/src/audio_player.rs
@@ -14,16 +14,10 @@ use std::sync::{Arc, RwLock};
use tokio02::sync::mpsc::UnboundedSender;
use crate::youtube_dl::AudioMetadata;
+use crate::command::{Seek, VolumeChange};
static GST_INIT: Once = Once::new();
-#[derive(Copy, Clone, Debug)]
-pub enum Seek {
- Positive(Duration),
- Negative(Duration),
- Absolute(Duration),
-}
-
#[derive(PartialEq, Eq, Debug, Clone, Copy)]
pub enum PollResult {
Continue,
@@ -201,10 +195,17 @@ impl AudioPlayer {
Ok(())
}
- pub fn set_volume(&self, volume: f64) -> Result<(), AudioPlayerError> {
- *self.volume_f64.write().unwrap() = volume;
- let db = 50.0 * volume.log10();
- info!("Setting volume: {} -> {} dB", volume, db);
+ pub fn change_volume(&self, volume: VolumeChange) -> Result<(), AudioPlayerError> {
+ let new_volume = match volume {
+ VolumeChange::Positive(vol) => self.volume() + vol,
+ VolumeChange::Negative(vol) => self.volume() - vol,
+ VolumeChange::Absolute(vol) => vol,
+ };
+ let new_volume = new_volume.max(0.0).min(1.0);
+
+ *self.volume_f64.write().unwrap() = new_volume;
+ let db = 50.0 * new_volume.log10();
+ info!("Setting volume: {} -> {} dB", new_volume, db);
let linear =
StreamVolume::convert_volume(StreamVolumeFormat::Db, StreamVolumeFormat::Linear, db);