From 53d59b77963ec6e0bc80751c33c0ff3557c8cb6c Mon Sep 17 00:00:00 2001 From: Jokler Date: Sun, 12 Jan 2020 22:35:16 +0100 Subject: Player: Convert volume to dB before applying it --- src/audio_player.rs | 15 +++++++++++---- src/main.rs | 3 +-- 2 files changed, 12 insertions(+), 6 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 +} diff --git a/src/main.rs b/src/main.rs index c4fdd2f..eced5db 100644 --- a/src/main.rs +++ b/src/main.rs @@ -214,7 +214,6 @@ impl Application { if let Some(&volume) = &tokens.get(1) { if let Ok(volume) = f64::from_str(volume) { let volume = volume.max(0.0).min(100.0) * 0.01; - self.player.set_volume(volume)?; } } @@ -335,7 +334,7 @@ async fn async_main() { (audio_player, Some(connection)) }; - player.set_volume(0.1).unwrap(); + player.set_volume(0.5).unwrap(); let player = Arc::new(player); let playlist = Arc::new(Mutex::new(Playlist::new())); let application = Arc::new(Application::new(player.clone(), playlist.clone(), connection)); -- cgit v1.2.3-70-g09d2