Fix crash when Gap Between Songs is set to 0.0; changed name to Music Spacing

This commit is contained in:
DaforLynx 2022-08-11 02:56:40 +00:00 committed by Imbris
parent 099ed62a69
commit 258feee634
6 changed files with 41 additions and 38 deletions

View File

@ -111,7 +111,7 @@ hud-settings-inactive_master_volume_perc = Inactive Window Volume
hud-settings-music_volume = Music Volume
hud-settings-sound_effect_volume = Sound Effects Volume
hud-settings-ambience_volume = Ambience Volume
hud-settings-music_frequency = Gap Between Songs
hud-settings-music_spacing = Music Spacing
hud-settings-audio_device = Audio Device
hud-settings-reset_sound = Reset to Defaults
hud-settings-english_fallback = Display English for missing translations

View File

@ -55,7 +55,7 @@ pub struct AudioFrontend {
ambience_volume: f32,
music_volume: f32,
master_volume: f32,
music_frequency: f32,
music_spacing: f32,
listener: Listener,
mtm: AssetHandle<MusicTransitionManifest>,
@ -108,7 +108,7 @@ impl AudioFrontend {
ambience_volume: 1.0,
music_volume: 1.0,
master_volume: 1.0,
music_frequency: 1.0,
music_spacing: 1.0,
listener: Listener::default(),
mtm: AssetExt::load_expect("voxygen.audio.music_transition_manifest"),
}
@ -140,7 +140,7 @@ impl AudioFrontend {
ambience_volume: 1.0,
music_volume: 1.0,
master_volume: 1.0,
music_frequency: 1.0,
music_spacing: 1.0,
listener: Listener::default(),
mtm,
}
@ -516,7 +516,7 @@ impl AudioFrontend {
}
}
pub fn set_music_frequency(&mut self, multiplier: f32) { self.music_frequency = multiplier }
pub fn set_music_spacing(&mut self, multiplier: f32) { self.music_spacing = multiplier }
/// Updates master volume in all channels
pub fn set_master_volume(&mut self, master_volume: f32) {

View File

@ -341,30 +341,33 @@ impl MusicMgr {
// a town, or exploring.
// TODO: make this something that is decided when a song ends, instead of when
// it begins
let frequency_multipler = audio.music_frequency;
let silence_between_tracks_seconds: f32 =
if matches!(music_state, MusicState::Activity(MusicActivity::Explore))
&& matches!(client.current_site(), SitesKind::Settlement)
{
rng.gen_range(120.0 * frequency_multipler..180.0 * frequency_multipler)
} else if matches!(music_state, MusicState::Activity(MusicActivity::Explore))
&& matches!(client.current_site(), SitesKind::Dungeon)
{
rng.gen_range(10.0 * frequency_multipler..20.0 * frequency_multipler)
} else if matches!(music_state, MusicState::Activity(MusicActivity::Explore))
&& matches!(client.current_site(), SitesKind::Cave)
{
rng.gen_range(20.0 * frequency_multipler..40.0 * frequency_multipler)
} else if matches!(music_state, MusicState::Activity(MusicActivity::Explore)) {
rng.gen_range(120.0 * frequency_multipler..240.0 * frequency_multipler)
} else if matches!(
music_state,
MusicState::Activity(MusicActivity::Combat(_)) | MusicState::Transition(_, _)
) {
0.0
} else {
rng.gen_range(30.0 * frequency_multipler..60.0 * frequency_multipler)
};
let spacing_multiplier = audio.music_spacing;
let mut silence_between_tracks_seconds: f32 = 0.0;
if spacing_multiplier > f32::EPSILON {
silence_between_tracks_seconds =
if matches!(music_state, MusicState::Activity(MusicActivity::Explore))
&& matches!(client.current_site(), SitesKind::Settlement)
{
rng.gen_range(120.0 * spacing_multiplier..180.0 * spacing_multiplier)
} else if matches!(music_state, MusicState::Activity(MusicActivity::Explore))
&& matches!(client.current_site(), SitesKind::Dungeon)
{
rng.gen_range(10.0 * spacing_multiplier..20.0 * spacing_multiplier)
} else if matches!(music_state, MusicState::Activity(MusicActivity::Explore))
&& matches!(client.current_site(), SitesKind::Cave)
{
rng.gen_range(20.0 * spacing_multiplier..40.0 * spacing_multiplier)
} else if matches!(music_state, MusicState::Activity(MusicActivity::Explore)) {
rng.gen_range(120.0 * spacing_multiplier..240.0 * spacing_multiplier)
} else if matches!(
music_state,
MusicState::Activity(MusicActivity::Combat(_)) | MusicState::Transition(_, _)
) {
0.0
} else {
rng.gen_range(30.0 * spacing_multiplier..60.0 * spacing_multiplier)
};
}
let is_dark = (state.get_day_period().is_dark()) as bool;
let current_period_of_day = Self::get_current_day_period(is_dark);

View File

@ -289,16 +289,16 @@ impl<'a> Widget for Sound<'a> {
.color(TEXT_COLOR)
.set(state.ids.ambience_volume_number, ui);
// Music frequency (actually gap between songs)
// Music spacing
Text::new(&self.localized_strings.get("hud.settings.music_frequency"))
.down_from(state.ids.ambience_volume_slider, 10.0)
.font_size(self.fonts.cyri.scale(14))
.font_id(self.fonts.cyri.conrod_id)
.color(TEXT_COLOR)
.set(state.ids.music_frequency_text, ui);
// Music frequency Slider
// Music spacing Slider
if let Some(new_val) = ImageSlider::continuous(
self.global_state.settings.audio.music_frequency,
self.global_state.settings.audio.music_spacing,
0.0,
2.0,
self.imgs.slider_indicator,
@ -313,10 +313,10 @@ impl<'a> Widget for Sound<'a> {
{
events.push(AdjustMusicFrequency(new_val));
}
// Music frequency Number
// Music spacing Number
Text::new(&format!(
"{:1.2}x",
self.global_state.settings.audio.music_frequency
self.global_state.settings.audio.music_spacing
))
.right_from(state.ids.music_frequency_slider, 8.0)
.font_size(self.fonts.cyri.scale(14))

View File

@ -210,9 +210,9 @@ impl SettingsChange {
settings.audio.ambience_volume = ambience_volume;
},
Audio::AdjustMusicFrequency(multiplier) => {
global_state.audio.set_music_frequency(multiplier);
global_state.audio.set_music_spacing(multiplier);
settings.audio.music_frequency = multiplier;
settings.audio.music_spacing = multiplier;
},
//Audio::ChangeAudioDevice(name) => {
// global_state.audio.set_device(name.clone());

View File

@ -28,7 +28,7 @@ pub struct AudioSettings {
pub ambience_volume: f32,
pub num_sfx_channels: usize,
pub num_ui_channels: usize,
pub music_frequency: f32,
pub music_spacing: f32,
/// Audio Device that Voxygen will use to play audio.
pub output: AudioOutput,
@ -44,7 +44,7 @@ impl Default for AudioSettings {
ambience_volume: 0.6,
num_sfx_channels: 60,
num_ui_channels: 10,
music_frequency: 1.0,
music_spacing: 1.0,
output: AudioOutput::Automatic,
}
}