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 | |
| parent | 78690b2e2949ed3be38a136f1c6ac2866ac32df7 (diff) | |
| download | pokebot-53d59b77963ec6e0bc80751c33c0ff3557c8cb6c.tar.gz pokebot-53d59b77963ec6e0bc80751c33c0ff3557c8cb6c.zip | |
Player: Convert volume to dB before applying it
Diffstat (limited to 'src')
| -rw-r--r-- | src/audio_player.rs | 15 | ||||
| -rw-r--r-- | 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)); |
