summaryrefslogtreecommitdiffstats
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
parent78690b2e2949ed3be38a136f1c6ac2866ac32df7 (diff)
downloadpokebot-53d59b77963ec6e0bc80751c33c0ff3557c8cb6c.tar.gz
pokebot-53d59b77963ec6e0bc80751c33c0ff3557c8cb6c.zip
Player: Convert volume to dB before applying it
-rw-r--r--src/audio_player.rs15
-rw-r--r--src/main.rs3
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));