MIDI volume slider in settings (#5327)
The Fluid soundfont is too quiet, the Windows one might be too loud...
This commit is contained in:
@@ -22,6 +22,20 @@
|
|||||||
<Control MinSize="4 0"/>
|
<Control MinSize="4 0"/>
|
||||||
</BoxContainer>
|
</BoxContainer>
|
||||||
<Control MinSize="0 8" />
|
<Control MinSize="0 8" />
|
||||||
|
<BoxContainer Orientation="Horizontal" Margin="5 0 0 0">
|
||||||
|
<Label Text="{Loc 'ui-options-midi-volume'}" />
|
||||||
|
<Control MinSize="8 0" />
|
||||||
|
<Slider Name="MidiVolumeSlider"
|
||||||
|
MinValue="0"
|
||||||
|
MaxValue="200"
|
||||||
|
HorizontalExpand="True"
|
||||||
|
MinSize="80 0"
|
||||||
|
Rounded="True" />
|
||||||
|
<Control MinSize="8 0" />
|
||||||
|
<Label Name="MidiVolumeLabel" MinSize="48 0" Align="Right" />
|
||||||
|
<Control MinSize="4 0"/>
|
||||||
|
</BoxContainer>
|
||||||
|
<Control MinSize="0 8" />
|
||||||
<CheckBox Name="AmbienceCheckBox" Text="{Loc 'ui-options-ambient-hum'}" />
|
<CheckBox Name="AmbienceCheckBox" Text="{Loc 'ui-options-ambient-hum'}" />
|
||||||
<CheckBox Name="LobbyMusicCheckBox" Text="{Loc 'ui-options-lobby-music'}" />
|
<CheckBox Name="LobbyMusicCheckBox" Text="{Loc 'ui-options-lobby-music'}" />
|
||||||
</BoxContainer>
|
</BoxContainer>
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
|
using System;
|
||||||
using Content.Shared.CCVar;
|
using Content.Shared.CCVar;
|
||||||
|
using Robust.Client.Audio.Midi;
|
||||||
using Robust.Client.AutoGenerated;
|
using Robust.Client.AutoGenerated;
|
||||||
using Robust.Client.Graphics;
|
using Robust.Client.Graphics;
|
||||||
using Robust.Client.UserInterface;
|
using Robust.Client.UserInterface;
|
||||||
using Robust.Client.UserInterface.Controls;
|
using Robust.Client.UserInterface.Controls;
|
||||||
using Robust.Client.UserInterface.XAML;
|
using Robust.Client.UserInterface.XAML;
|
||||||
using Robust.Shared;
|
using Robust.Shared;
|
||||||
|
using Robust.Shared.Maths;
|
||||||
using Robust.Shared.Configuration;
|
using Robust.Shared.Configuration;
|
||||||
using Robust.Shared.IoC;
|
using Robust.Shared.IoC;
|
||||||
using Robust.Shared.Localization;
|
using Robust.Shared.Localization;
|
||||||
@@ -28,6 +31,7 @@ namespace Content.Client.EscapeMenu.UI.Tabs
|
|||||||
ApplyButton.OnPressed += OnApplyButtonPressed;
|
ApplyButton.OnPressed += OnApplyButtonPressed;
|
||||||
ResetButton.OnPressed += OnResetButtonPressed;
|
ResetButton.OnPressed += OnResetButtonPressed;
|
||||||
MasterVolumeSlider.OnValueChanged += OnMasterVolumeSliderChanged;
|
MasterVolumeSlider.OnValueChanged += OnMasterVolumeSliderChanged;
|
||||||
|
MidiVolumeSlider.OnValueChanged += OnMidiVolumeSliderChanged;
|
||||||
AmbienceCheckBox.OnToggled += OnAmbienceCheckToggled;
|
AmbienceCheckBox.OnToggled += OnAmbienceCheckToggled;
|
||||||
LobbyMusicCheckBox.OnToggled += OnLobbyMusicCheckToggled;
|
LobbyMusicCheckBox.OnToggled += OnLobbyMusicCheckToggled;
|
||||||
|
|
||||||
@@ -39,18 +43,22 @@ namespace Content.Client.EscapeMenu.UI.Tabs
|
|||||||
ApplyButton.OnPressed -= OnApplyButtonPressed;
|
ApplyButton.OnPressed -= OnApplyButtonPressed;
|
||||||
ResetButton.OnPressed -= OnResetButtonPressed;
|
ResetButton.OnPressed -= OnResetButtonPressed;
|
||||||
MasterVolumeSlider.OnValueChanged -= OnMasterVolumeSliderChanged;
|
MasterVolumeSlider.OnValueChanged -= OnMasterVolumeSliderChanged;
|
||||||
|
MidiVolumeSlider.OnValueChanged -= OnMidiVolumeSliderChanged;
|
||||||
AmbienceCheckBox.OnToggled -= OnAmbienceCheckToggled;
|
AmbienceCheckBox.OnToggled -= OnAmbienceCheckToggled;
|
||||||
base.Dispose(disposing);
|
base.Dispose(disposing);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnMasterVolumeSliderChanged(Range range)
|
private void OnMasterVolumeSliderChanged(Robust.Client.UserInterface.Controls.Range range)
|
||||||
{
|
{
|
||||||
MasterVolumeLabel.Text =
|
|
||||||
Loc.GetString("ui-options-volume-percent", ("volume", MasterVolumeSlider.Value / 100));
|
|
||||||
_clydeAudio.SetMasterVolume(MasterVolumeSlider.Value / 100);
|
_clydeAudio.SetMasterVolume(MasterVolumeSlider.Value / 100);
|
||||||
UpdateChanges();
|
UpdateChanges();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnMidiVolumeSliderChanged(Robust.Client.UserInterface.Controls.Range range)
|
||||||
|
{
|
||||||
|
UpdateChanges();
|
||||||
|
}
|
||||||
|
|
||||||
private void OnAmbienceCheckToggled(BaseButton.ButtonEventArgs args)
|
private void OnAmbienceCheckToggled(BaseButton.ButtonEventArgs args)
|
||||||
{
|
{
|
||||||
UpdateChanges();
|
UpdateChanges();
|
||||||
@@ -64,6 +72,7 @@ namespace Content.Client.EscapeMenu.UI.Tabs
|
|||||||
private void OnApplyButtonPressed(BaseButton.ButtonEventArgs args)
|
private void OnApplyButtonPressed(BaseButton.ButtonEventArgs args)
|
||||||
{
|
{
|
||||||
_cfg.SetCVar(CVars.AudioMasterVolume, MasterVolumeSlider.Value / 100);
|
_cfg.SetCVar(CVars.AudioMasterVolume, MasterVolumeSlider.Value / 100);
|
||||||
|
_cfg.SetCVar(CVars.MidiVolume, LV100ToDB(MidiVolumeSlider.Value));
|
||||||
_cfg.SetCVar(CCVars.AmbienceBasicEnabled, AmbienceCheckBox.Pressed);
|
_cfg.SetCVar(CCVars.AmbienceBasicEnabled, AmbienceCheckBox.Pressed);
|
||||||
_cfg.SetCVar(CCVars.LobbyMusicEnabled, LobbyMusicCheckBox.Pressed);
|
_cfg.SetCVar(CCVars.LobbyMusicEnabled, LobbyMusicCheckBox.Pressed);
|
||||||
_cfg.SaveToFile();
|
_cfg.SaveToFile();
|
||||||
@@ -78,22 +87,40 @@ namespace Content.Client.EscapeMenu.UI.Tabs
|
|||||||
private void Reset()
|
private void Reset()
|
||||||
{
|
{
|
||||||
MasterVolumeSlider.Value = _cfg.GetCVar(CVars.AudioMasterVolume) * 100;
|
MasterVolumeSlider.Value = _cfg.GetCVar(CVars.AudioMasterVolume) * 100;
|
||||||
MasterVolumeLabel.Text =
|
MidiVolumeSlider.Value = DBToLV100(_cfg.GetCVar(CVars.MidiVolume));
|
||||||
Loc.GetString("ui-options-volume-percent", ("volume", MasterVolumeSlider.Value / 100));
|
|
||||||
AmbienceCheckBox.Pressed = _cfg.GetCVar(CCVars.AmbienceBasicEnabled);
|
AmbienceCheckBox.Pressed = _cfg.GetCVar(CCVars.AmbienceBasicEnabled);
|
||||||
LobbyMusicCheckBox.Pressed = _cfg.GetCVar(CCVars.LobbyMusicEnabled);
|
LobbyMusicCheckBox.Pressed = _cfg.GetCVar(CCVars.LobbyMusicEnabled);
|
||||||
UpdateChanges();
|
UpdateChanges();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Note: Rather than moving these functions somewhere, instead switch MidiManager to using linear units rather than dB
|
||||||
|
// Do be sure to rename the setting though
|
||||||
|
private float DBToLV100(float db)
|
||||||
|
{
|
||||||
|
return (MathF.Pow(10, (db / 10)) * 100);
|
||||||
|
}
|
||||||
|
|
||||||
|
private float LV100ToDB(float lv100)
|
||||||
|
{
|
||||||
|
// Saving negative infinity doesn't work, so use -10000000 instead (MidiManager does it)
|
||||||
|
return MathF.Max(-10000000, MathF.Log(lv100 / 100, 10) * 10);
|
||||||
|
}
|
||||||
|
|
||||||
private void UpdateChanges()
|
private void UpdateChanges()
|
||||||
{
|
{
|
||||||
var isMasterVolumeSame =
|
var isMasterVolumeSame =
|
||||||
System.Math.Abs(MasterVolumeSlider.Value - _cfg.GetCVar(CVars.AudioMasterVolume) * 100) < 0.01f;
|
System.Math.Abs(MasterVolumeSlider.Value - _cfg.GetCVar(CVars.AudioMasterVolume) * 100) < 0.01f;
|
||||||
|
var isMidiVolumeSame =
|
||||||
|
System.Math.Abs(MidiVolumeSlider.Value - DBToLV100(_cfg.GetCVar(CVars.MidiVolume))) < 0.01f;
|
||||||
var isAmbienceSame = AmbienceCheckBox.Pressed == _cfg.GetCVar(CCVars.AmbienceBasicEnabled);
|
var isAmbienceSame = AmbienceCheckBox.Pressed == _cfg.GetCVar(CCVars.AmbienceBasicEnabled);
|
||||||
var isLobbySame = LobbyMusicCheckBox.Pressed == _cfg.GetCVar(CCVars.LobbyMusicEnabled);
|
var isLobbySame = LobbyMusicCheckBox.Pressed == _cfg.GetCVar(CCVars.LobbyMusicEnabled);
|
||||||
var isEverythingSame = isMasterVolumeSame && isAmbienceSame && isLobbySame;
|
var isEverythingSame = isMasterVolumeSame && isMidiVolumeSame && isAmbienceSame && isLobbySame;
|
||||||
ApplyButton.Disabled = isEverythingSame;
|
ApplyButton.Disabled = isEverythingSame;
|
||||||
ResetButton.Disabled = isEverythingSame;
|
ResetButton.Disabled = isEverythingSame;
|
||||||
|
MasterVolumeLabel.Text =
|
||||||
|
Loc.GetString("ui-options-volume-percent", ("volume", MasterVolumeSlider.Value / 100));
|
||||||
|
MidiVolumeLabel.Text =
|
||||||
|
Loc.GetString("ui-options-volume-percent", ("volume", MidiVolumeSlider.Value / 100));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ ui-options-reset-all = Reset All
|
|||||||
## Audio menu
|
## Audio menu
|
||||||
|
|
||||||
ui-options-master-volume = Master Volume:
|
ui-options-master-volume = Master Volume:
|
||||||
|
ui-options-midi-volume = MIDI (Instrument) Volume:
|
||||||
ui-options-ambient-hum = Ambient Hum
|
ui-options-ambient-hum = Ambient Hum
|
||||||
ui-options-lobby-music = Lobby Music
|
ui-options-lobby-music = Lobby Music
|
||||||
ui-options-volume-label = Volume
|
ui-options-volume-label = Volume
|
||||||
|
|||||||
Reference in New Issue
Block a user