diff options
| author | Jokler <jokler@protonmail.com> | 2020-03-15 00:20:02 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-03-15 00:20:02 +0100 |
| commit | 402b71b5eb83a23d613d217e63517dfa59017df6 (patch) | |
| tree | d3cc1c6d5e0266df687a9413cd82665b0f4eeb94 /src/audio_player.rs | |
| parent | fd5d026849517e1296d592412db64437b454570d (diff) | |
| parent | 778f5216d269e7c861be706ce65b778b3db86f7c (diff) | |
| download | pokebot-402b71b5eb83a23d613d217e63517dfa59017df6.tar.gz pokebot-402b71b5eb83a23d613d217e63517dfa59017df6.zip | |
Merge pull request #44 from Mavulp/relative-volume
Add a way of making relative volume changes
Diffstat (limited to 'src/audio_player.rs')
| -rw-r--r-- | src/audio_player.rs | 23 |
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); |
