Skip to content

Commit

Permalink
Added more audio busses and options menu settings for them. (#1603)
Browse files Browse the repository at this point in the history
* Added field and method changes to allow playing jukebox track lists on a specific audio bus.

* Changed audio stream players to play SFX and GUI sounds on their respective busses.

* Added volume sliders and mute checkboxes for ambiance, sfx and gui to the options menu.
  • Loading branch information
Satharis committed Sep 12, 2020
1 parent 362ba5b commit c934378
Show file tree
Hide file tree
Showing 9 changed files with 287 additions and 12 deletions.
12 changes: 12 additions & 0 deletions default_bus_layout.tres
Expand Up @@ -13,3 +13,15 @@ bus/2/mute = false
bus/2/bypass_fx = false
bus/2/volume_db = 0.0
bus/2/send = "Master"
bus/3/name = "SFX"
bus/3/solo = false
bus/3/mute = false
bus/3/bypass_fx = false
bus/3/volume_db = 0.0
bus/3/send = "Master"
bus/4/name = "GUI"
bus/4/solo = false
bus/4/mute = false
bus/4/bypass_fx = false
bus/4/volume_db = 0.0
bus/4/send = "Master"
1 change: 1 addition & 0 deletions simulation_parameters/common/music_tracks.json
Expand Up @@ -39,6 +39,7 @@
]
},
{
"TrackBus": "Ambiance",
"Tracks": [
{
"ResourcePath": "res://assets/sounds/soundeffects/microbe-ambience.ogg"
Expand Down
45 changes: 45 additions & 0 deletions src/engine/Settings.cs
Expand Up @@ -76,6 +76,36 @@ private Settings()
/// </summary>
public bool VolumeMusicMuted { get; set; } = false;

/// <summary>
/// The Db value to be added to the ambiance audio bus
/// </summary>
public float VolumeAmbiance { get; set; } = 0.0f;

/// <summary>
/// If true ambiance is muted
/// </summary>
public bool VolumeAmbianceMuted { get; set; } = false;

/// <summary>
/// The Db value to be added to the sfx audio bus
/// </summary>
public float VolumeSFX { get; set; } = 0.0f;

/// <summary>
/// If true sfx is muted
/// </summary>
public bool VolumeSFXMuted { get; set; } = false;

/// <summary>
/// The Db value to be added to the gui audio bus
/// </summary>
public float VolumeGUI { get; set; } = 0.0f;

/// <summary>
/// If true gui audio bus is muted
/// </summary>
public bool VolumeGUIMuted { get; set; } = false;

// Performance Properties

/// <summary>
Expand Down Expand Up @@ -283,6 +313,21 @@ public void ApplySoundSettings()

AudioServer.SetBusVolumeDb(music, VolumeMusic);
AudioServer.SetBusMute(music, VolumeMusicMuted);

var ambiance = AudioServer.GetBusIndex("Ambiance");

AudioServer.SetBusVolumeDb(ambiance, VolumeAmbiance);
AudioServer.SetBusMute(ambiance, VolumeAmbianceMuted);

var sfx = AudioServer.GetBusIndex("SFX");

AudioServer.SetBusVolumeDb(sfx, VolumeSFX);
AudioServer.SetBusMute(sfx, VolumeSFXMuted);

var gui = AudioServer.GetBusIndex("GUI");

AudioServer.SetBusVolumeDb(gui, VolumeGUI);
AudioServer.SetBusMute(gui, VolumeGUIMuted);
}

/// <summary>
Expand Down
15 changes: 11 additions & 4 deletions src/general/Jukebox.cs
Expand Up @@ -191,14 +191,15 @@ private AudioPlayer GetNextPlayer(int index)
return audioPlayers[index];
}

private void PlayTrack(AudioPlayer player, TrackList.Track track, float fromPosition = 0)
private void PlayTrack(AudioPlayer player, TrackList.Track track, string trackBus, float fromPosition = 0)
{
if (player.CurrentTrack != track.ResourcePath)
{
var stream = GD.Load<AudioStream>(track.ResourcePath);

player.Player.Stream = stream;
player.CurrentTrack = track.ResourcePath;
player.Bus = trackBus;

player.Player.Play(fromPosition);

Expand Down Expand Up @@ -345,7 +346,7 @@ private void SetupStreamsFromCategory()
// Resume track (but only one per list)
if (track.WasPlaying)
{
PlayTrack(GetNextPlayer(nextPlayerToUse++), track, track.PreviousPlayedPosition);
PlayTrack(GetNextPlayer(nextPlayerToUse++), track, list.TrackBus, track.PreviousPlayedPosition);
break;
}
}
Expand Down Expand Up @@ -399,7 +400,7 @@ private void PlayNextTrackFromList(TrackList list, Func<int, AudioPlayer> getPla
{
list.LastPlayedIndex = (list.LastPlayedIndex + 1) % list.Tracks.Count;

PlayTrack(getPlayer(playerToUse), list.Tracks[list.LastPlayedIndex]);
PlayTrack(getPlayer(playerToUse), list.Tracks[list.LastPlayedIndex], list.TrackBus);
}
else
{
Expand All @@ -414,7 +415,7 @@ private void PlayNextTrackFromList(TrackList list, Func<int, AudioPlayer> getPla
}
while (nextIndex == list.LastPlayedIndex && list.Tracks.Count > 1);

PlayTrack(getPlayer(playerToUse), list.Tracks[nextIndex]);
PlayTrack(getPlayer(playerToUse), list.Tracks[nextIndex], list.TrackBus);
list.LastPlayedIndex = nextIndex;
}
}
Expand Down Expand Up @@ -470,6 +471,12 @@ public bool StreamPaused

public bool Playing => Player.Playing;

public string Bus
{
get => Player.Bus;
set => Player.Bus = value;
}

public void Stop()
{
CurrentTrack = null;
Expand Down
2 changes: 2 additions & 0 deletions src/general/MusicCategory.cs
Expand Up @@ -90,6 +90,8 @@ public enum Order

public Order TrackOrder { get; set; } = Order.Random;

public string TrackBus { get; set; } = "Music";

public List<Track> Tracks { get; set; }

[JsonIgnore]
Expand Down
92 changes: 88 additions & 4 deletions src/general/OptionsMenu.cs
Expand Up @@ -69,6 +69,24 @@ public class OptionsMenu : Control
[Export]
public NodePath MusicMutedPath;

[Export]
public NodePath AmbianceVolumePath;

[Export]
public NodePath AmbianceMutedPath;

[Export]
public NodePath SFXVolumePath;

[Export]
public NodePath SFXMutedPath;

[Export]
public NodePath GUIVolumePath;

[Export]
public NodePath GUIMutedPath;

// Performance tab.
[Export]
public NodePath PerformanceTabPath;
Expand Down Expand Up @@ -135,6 +153,12 @@ public class OptionsMenu : Control
private CheckBox masterMuted;
private Slider musicVolume;
private CheckBox musicMuted;
private Slider ambianceVolume;
private CheckBox ambianceMuted;
private Slider sfxVolume;
private CheckBox sfxMuted;
private Slider guiVolume;
private CheckBox guiMuted;

// Performance tab
private Control performanceTab;
Expand Down Expand Up @@ -214,6 +238,12 @@ public override void _Ready()
masterMuted = GetNode<CheckBox>(MasterMutedPath);
musicVolume = GetNode<Slider>(MusicVolumePath);
musicMuted = GetNode<CheckBox>(MusicMutedPath);
ambianceVolume = GetNode<Slider>(AmbianceVolumePath);
ambianceMuted = GetNode<CheckBox>(AmbianceMutedPath);
sfxVolume = GetNode<Slider>(SFXVolumePath);
sfxMuted = GetNode<CheckBox>(SFXMutedPath);
guiVolume = GetNode<Slider>(GUIVolumePath);
guiMuted = GetNode<CheckBox>(GUIMutedPath);

// Performance
performanceTab = GetNode<Control>(PerformanceTabPath);
Expand Down Expand Up @@ -265,6 +295,12 @@ public void ApplySettingsToControls(Settings settings)
masterMuted.Pressed = settings.VolumeMasterMuted;
musicVolume.Value = ConvertDBToSoundBar(settings.VolumeMusic);
musicMuted.Pressed = settings.VolumeMusicMuted;
ambianceVolume.Value = ConvertDBToSoundBar(settings.VolumeAmbiance);
ambianceMuted.Pressed = settings.VolumeAmbianceMuted;
sfxVolume.Value = ConvertDBToSoundBar(settings.VolumeSFX);
sfxMuted.Pressed = settings.VolumeSFXMuted;
guiVolume.Value = ConvertDBToSoundBar(settings.VolumeGUI);
guiMuted.Pressed = settings.VolumeGUIMuted;

// Performance
cloudInterval.Selected = CloudIntervalToIndex(settings.CloudUpdateInterval);
Expand Down Expand Up @@ -617,6 +653,14 @@ private void OnChromaticAberrationValueChanged(float amount)
}

// Sound Button Callbacks
private void OnMasterVolumeChanged(float value)
{
Settings.Instance.VolumeMaster = ConvertSoundBarToDb(value);
Settings.ApplySoundSettings();

CompareSettings();
}

private void OnMasterMutedToggled(bool pressed)
{
Settings.Instance.VolumeMasterMuted = pressed;
Expand All @@ -625,6 +669,14 @@ private void OnMasterMutedToggled(bool pressed)
CompareSettings();
}

private void OnMusicVolumeChanged(float value)
{
Settings.Instance.VolumeMusic = ConvertSoundBarToDb(value);
Settings.ApplySoundSettings();

CompareSettings();
}

private void OnMusicMutedToggled(bool pressed)
{
Settings.Instance.VolumeMusicMuted = pressed;
Expand All @@ -633,17 +685,49 @@ private void OnMusicMutedToggled(bool pressed)
CompareSettings();
}

private void OnMasterVolumeChanged(float value)
private void OnAmbianceVolumeChanged(float value)
{
Settings.Instance.VolumeMaster = ConvertSoundBarToDb(value);
Settings.Instance.VolumeAmbiance = ConvertSoundBarToDb(value);
Settings.ApplySoundSettings();

CompareSettings();
}

private void OnMusicVolumeChanged(float value)
private void OnAmbianceMutedToggled(bool pressed)
{
Settings.Instance.VolumeMusic = ConvertSoundBarToDb(value);
Settings.Instance.VolumeAmbianceMuted = pressed;
Settings.ApplySoundSettings();

CompareSettings();
}

private void OnSFXVolumeChanged(float value)
{
Settings.Instance.VolumeSFX = ConvertSoundBarToDb(value);
Settings.ApplySoundSettings();

CompareSettings();
}

private void OnSFXMutedToggled(bool pressed)
{
Settings.Instance.VolumeSFXMuted = pressed;
Settings.ApplySoundSettings();

CompareSettings();
}

private void OnGUIVolumeChanged(float value)
{
Settings.Instance.VolumeGUI = ConvertSoundBarToDb(value);
Settings.ApplySoundSettings();

CompareSettings();
}

private void OnGUIMutedToggled(bool pressed)
{
Settings.Instance.VolumeGUIMuted = pressed;
Settings.ApplySoundSettings();

CompareSettings();
Expand Down

0 comments on commit c934378

Please sign in to comment.