summaryrefslogtreecommitdiffstats
path: root/src/audio_player.rs
diff options
context:
space:
mode:
authorJokler <jokler@protonmail.com>2020-01-12 22:35:16 +0100
committerJokler <jokler@protonmail.com>2020-01-12 22:40:33 +0100
commit53d59b77963ec6e0bc80751c33c0ff3557c8cb6c (patch)
tree6ddf8cf9fca9d84b3a43fc33833123e2d621088c /src/audio_player.rs
parent78690b2e2949ed3be38a136f1c6ac2866ac32df7 (diff)
downloadpokebot-53d59b77963ec6e0bc80751c33c0ff3557c8cb6c.tar.gz
pokebot-53d59b77963ec6e0bc80751c33c0ff3557c8cb6c.zip
Player: Convert volume to dB before applying it
Diffstat (limited to 'src/audio_player.rs')
-rw-r--r--src/audio_player.rs15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/audio_player.rs b/src/audio_player.rs
index 6626417..27bd12a 100644
--- a/src/audio_player.rs
+++ b/src/audio_player.rs
@@ -3,6 +3,7 @@ use std::sync::Once;
use gstreamer as gst;
use gst::prelude::*;
use gstreamer_app::{AppSink, AppSinkCallbacks};
+use gstreamer_audio::{StreamVolume, StreamVolumeFormat};
use gst::{GhostPad};
use log::{info, debug, warn, error};
@@ -207,10 +208,16 @@ impl AudioPlayer {
}
pub fn set_volume(&self, volume: f64) -> Result<(), AudioPlayerError> {
- let log_volume = 1.0 - 10.0f64.powf(-volume * 2.0);
- info!("Setting volume: {} -> {}", volume, log_volume);
+ let db = 50.0 * volume.log10();
+ info!("Setting volume: {} -> {} dB", volume, db);
- self.volume.set_property("volume", &log_volume)?;
+ let linear = StreamVolume::convert_volume(
+ StreamVolumeFormat::Db,
+ StreamVolumeFormat::Linear,
+ db,
+ );
+
+ self.volume.set_property("volume", &linear)?;
Ok(())
}
@@ -325,4 +332,4 @@ impl AudioPlayer {
}
debug!("Left GStreamer message loop");
}
-} \ No newline at end of file
+}