From 9b3de8088ad4364d456ad6fbfa3d496329389448 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Capucho?= Date: Sun, 18 Apr 2021 19:05:27 +0100 Subject: [PATCH] Voxygen: Use the master volume setting --- voxygen/src/audio/mod.rs | 47 ++++++++++++++++++++++++++++++---------- voxygen/src/main.rs | 1 + 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/voxygen/src/audio/mod.rs b/voxygen/src/audio/mod.rs index b1fd2ea4b2..ce0d3fd761 100644 --- a/voxygen/src/audio/mod.rs +++ b/voxygen/src/audio/mod.rs @@ -45,6 +45,7 @@ pub struct AudioFrontend { sfx_channels: Vec, sfx_volume: f32, music_volume: f32, + master_volume: f32, listener: Listener, mtm: AssetHandle, @@ -92,6 +93,7 @@ impl AudioFrontend { ambient_channels: Vec::new(), sfx_volume: 1.0, music_volume: 1.0, + master_volume: 1.0, listener: Listener::default(), mtm: AssetExt::load_expect("voxygen.audio.music_transition_manifest"), } @@ -111,6 +113,7 @@ impl AudioFrontend { ambient_channels: Vec::new(), sfx_volume: 1.0, music_volume: 1.0, + master_volume: 1.0, listener: Listener::default(), // This expect should be fine, since `::default_value` // is specified @@ -130,8 +133,9 @@ impl AudioFrontend { /// Retrive an empty sfx channel from the list fn get_sfx_channel(&mut self) -> Option<&mut SfxChannel> { if self.audio_stream.is_some() { + let sfx_volume = self.get_sfx_volume(); if let Some(channel) = self.sfx_channels.iter_mut().find(|c| c.is_done()) { - channel.set_volume(self.sfx_volume); + channel.set_volume(sfx_volume); return Some(channel); } @@ -152,10 +156,11 @@ impl AudioFrontend { if let Some(audio_stream) = &self.audio_stream { if self.music_channels.is_empty() { let mut next_music_channel = MusicChannel::new(audio_stream); - next_music_channel.set_volume(self.music_volume); + next_music_channel.set_volume(self.get_music_volume()); self.music_channels.push(next_music_channel); } else { + let music_volume = self.get_music_volume(); let existing_channel = self.music_channels.last_mut()?; if existing_channel.get_tag() != next_channel_tag { @@ -167,11 +172,11 @@ impl AudioFrontend { let fade_out = Duration::from_secs_f32(*fade_out); let fade_in = Duration::from_secs_f32(*fade_in); // Fade the existing channel out. It will be removed when the fade completes. - existing_channel.set_fader(Fader::fade_out(fade_out, self.music_volume)); + existing_channel.set_fader(Fader::fade_out(fade_out, music_volume)); let mut next_music_channel = MusicChannel::new(&audio_stream); - next_music_channel.set_fader(Fader::fade_in(fade_in, self.music_volume)); + next_music_channel.set_fader(Fader::fade_in(fade_in, self.get_music_volume())); self.music_channels.push(next_music_channel); } @@ -304,12 +309,13 @@ impl AudioFrontend { if let Some(audio_stream) = &self.audio_stream { if self.ambient_channels.is_empty() { let mut ambient_channel = AmbientChannel::new(audio_stream, channel_tag); - ambient_channel.set_volume(self.sfx_volume * volume_multiplier); + ambient_channel.set_volume(self.get_sfx_volume() * volume_multiplier); self.ambient_channels.push(ambient_channel); } else { + let sfx_volume = self.get_sfx_volume(); for channel in self.ambient_channels.iter_mut() { if channel.get_tag() == channel_tag { - channel.set_volume(self.sfx_volume * volume_multiplier); + channel.set_volume(sfx_volume * volume_multiplier); return Some(channel); } } @@ -321,8 +327,9 @@ impl AudioFrontend { fn set_ambient_volume(&mut self, volume_multiplier: f32) { if self.audio_stream.is_some() { + let sfx_volume = self.get_sfx_volume(); if let Some(channel) = self.ambient_channels.iter_mut().last() { - channel.set_volume(self.sfx_volume * volume_multiplier); + channel.set_volume(sfx_volume * volume_multiplier); } } } @@ -330,7 +337,7 @@ impl AudioFrontend { fn get_ambient_volume(&mut self) -> f32 { if self.audio_stream.is_some() { if let Some(channel) = self.ambient_channels.iter_mut().last() { - channel.get_volume() / self.sfx_volume + channel.get_volume() / self.get_sfx_volume() } else { 0.0 } @@ -398,17 +405,18 @@ impl AudioFrontend { } } - pub fn get_sfx_volume(&self) -> f32 { self.sfx_volume } + pub fn get_sfx_volume(&self) -> f32 { self.sfx_volume * self.master_volume } - pub fn get_music_volume(&self) -> f32 { self.music_volume } + pub fn get_music_volume(&self) -> f32 { self.music_volume * self.master_volume } - pub fn sfx_enabled(&self) -> bool { self.sfx_volume > 0.0 } + pub fn sfx_enabled(&self) -> bool { self.get_sfx_volume() > 0.0 } - pub fn music_enabled(&self) -> bool { self.music_volume > 0.0 } + pub fn music_enabled(&self) -> bool { self.get_music_volume() > 0.0 } pub fn set_sfx_volume(&mut self, sfx_volume: f32) { self.sfx_volume = sfx_volume; + let sfx_volume = self.get_sfx_volume(); for channel in self.sfx_channels.iter_mut() { channel.set_volume(sfx_volume); } @@ -417,11 +425,26 @@ impl AudioFrontend { pub fn set_music_volume(&mut self, music_volume: f32) { self.music_volume = music_volume; + let music_volume = self.get_music_volume(); for channel in self.music_channels.iter_mut() { channel.set_volume(music_volume); } } + pub fn set_master_volume(&mut self, master_volume: f32) { + self.master_volume = master_volume; + + let music_volume = self.get_music_volume(); + for channel in self.music_channels.iter_mut() { + channel.set_volume(music_volume); + } + + let sfx_volume = self.get_sfx_volume(); + for channel in self.sfx_channels.iter_mut() { + channel.set_volume(sfx_volume); + } + } + pub fn stop_ambient_sounds(&mut self) { for channel in self.ambient_channels.iter_mut() { channel.stop() diff --git a/voxygen/src/main.rs b/voxygen/src/main.rs index 764038d0a0..27003f2251 100644 --- a/voxygen/src/main.rs +++ b/voxygen/src/main.rs @@ -156,6 +156,7 @@ fn main() { // AudioOutput::Device(ref dev) => Some(dev.clone()), }; + audio.set_master_volume(settings.audio.master_volume); audio.set_music_volume(settings.audio.music_volume); audio.set_sfx_volume(settings.audio.sfx_volume);