diff options
| author | Jokler <jokler@protonmail.com> | 2020-01-12 22:35:16 +0100 |
|---|---|---|
| committer | Jokler <jokler@protonmail.com> | 2020-01-12 22:40:33 +0100 |
| commit | 53d59b77963ec6e0bc80751c33c0ff3557c8cb6c (patch) | |
| tree | 6ddf8cf9fca9d84b3a43fc33833123e2d621088c /src/audio_player.rs | |
| parent | 78690b2e2949ed3be38a136f1c6ac2866ac32df7 (diff) | |
| download | pokebot-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.rs | 15 |
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 +} |
