diff --git a/src/BizHawk.Client.EmuHawk/GlobalWin.cs b/src/BizHawk.Client.EmuHawk/GlobalWin.cs index 2fb96c8fe3..2f3ef7efe4 100644 --- a/src/BizHawk.Client.EmuHawk/GlobalWin.cs +++ b/src/BizHawk.Client.EmuHawk/GlobalWin.cs @@ -1,12 +1,8 @@ -using BizHawk.Client.Common; - // ReSharper disable StyleCop.SA1401 namespace BizHawk.Client.EmuHawk { public static class GlobalWin { public static Sound Sound; - - public static Config Config { get; set; } } } diff --git a/src/BizHawk.Client.EmuHawk/MainForm.Events.cs b/src/BizHawk.Client.EmuHawk/MainForm.Events.cs index 03dc0b5d62..75a759b77f 100644 --- a/src/BizHawk.Client.EmuHawk/MainForm.Events.cs +++ b/src/BizHawk.Client.EmuHawk/MainForm.Events.cs @@ -919,7 +919,7 @@ namespace BizHawk.Client.EmuHawk if (form.ApplyNewSoundDevice) { Sound.Dispose(); - Sound = new Sound(Handle, Config.SoundOutputMethod, Config.SoundDevice, Emulator.VsyncRate); + Sound = new Sound(Handle, Config, Emulator.VsyncRate); Sound.StartSound(); } else diff --git a/src/BizHawk.Client.EmuHawk/MainForm.cs b/src/BizHawk.Client.EmuHawk/MainForm.cs index 74065c83f2..cc0d6143ff 100644 --- a/src/BizHawk.Client.EmuHawk/MainForm.cs +++ b/src/BizHawk.Client.EmuHawk/MainForm.cs @@ -416,7 +416,7 @@ namespace BizHawk.Client.EmuHawk InputManager.AutofireStickyXorAdapter.SetOnOffPatternFromConfig(Config.AutofireOn, Config.AutofireOff); try { - GlobalWin.Sound = new Sound(Handle, Config.SoundOutputMethod, Config.SoundDevice, Emulator.VsyncRate); + GlobalWin.Sound = new Sound(Handle, Config, Emulator.VsyncRate); } catch { @@ -429,7 +429,7 @@ namespace BizHawk.Client.EmuHawk MessageBox.Show(message, "Initialization Error", MessageBoxButtons.OK, MessageBoxIcon.Error); Config.SoundOutputMethod = ESoundOutputMethod.Dummy; - GlobalWin.Sound = new Sound(Handle, Config.SoundOutputMethod, Config.SoundDevice, Emulator.VsyncRate); + GlobalWin.Sound = new Sound(Handle, Config, Emulator.VsyncRate); } Sound.StartSound(); @@ -861,7 +861,7 @@ namespace BizHawk.Client.EmuHawk private new Config Config { get => _config; - set => GlobalWin.Config = base.Config = _config = value; + set => base.Config = _config = value; } private readonly IGL GL; @@ -2796,6 +2796,7 @@ namespace BizHawk.Client.EmuHawk InputManager.SyncControls(Emulator, MovieSession, Config); Tools.Restart(Config, Emulator, Game); ExtToolManager.Restart(Config.PathEntries); + Sound.Config = Config; DisplayManager.UpdateGlobals(Config, Emulator); AddOnScreenMessage($"Config file loaded: {iniPath}"); } diff --git a/src/BizHawk.Client.EmuHawk/Sound/Sound.cs b/src/BizHawk.Client.EmuHawk/Sound/Sound.cs index 55b92c69bd..a6dfea1bd1 100644 --- a/src/BizHawk.Client.EmuHawk/Sound/Sound.cs +++ b/src/BizHawk.Client.EmuHawk/Sound/Sound.cs @@ -27,29 +27,32 @@ namespace BizHawk.Client.EmuHawk private readonly BufferedAsync _bufferedAsync = new BufferedAsync(); // Buffer for Async sources private IBufferedSoundProvider _bufferedProvider; // One of the preceding buffers, or null if no source is set - public int ConfigBufferSizeMs => GlobalWin.Config.SoundBufferSizeMs; + public Config Config; - public Sound(IntPtr mainWindowHandle, ESoundOutputMethod soundOutputMethod, string soundDevice, Func getCoreVsyncRateCallback) + public int ConfigBufferSizeMs => Config.SoundBufferSizeMs; + + public Sound(IntPtr mainWindowHandle, Config config, Func getCoreVsyncRateCallback) { BlockAlign = BytesPerSample * ChannelCount; _getCoreVsyncRateCallback = getCoreVsyncRateCallback; _outputProvider = new SoundOutputProvider(_getCoreVsyncRateCallback); + Config = config; if (OSTailoredCode.IsUnixHost) { // if DirectSound or XAudio is chosen, use OpenAL, otherwise comply with the user's choice - _outputDevice = soundOutputMethod == ESoundOutputMethod.Dummy + _outputDevice = config.SoundOutputMethod == ESoundOutputMethod.Dummy ? (ISoundOutput) new DummySoundOutput(this) - : new OpenALSoundOutput(this, soundDevice); + : new OpenALSoundOutput(this, config.SoundDevice); } else { - _outputDevice = soundOutputMethod switch + _outputDevice = config.SoundOutputMethod switch { - ESoundOutputMethod.DirectSound => new DirectSoundSoundOutput(this, mainWindowHandle, soundDevice), - ESoundOutputMethod.XAudio2 => new XAudio2SoundOutput(this, soundDevice), - ESoundOutputMethod.OpenAL => new OpenALSoundOutput(this, soundDevice), + ESoundOutputMethod.DirectSound => new DirectSoundSoundOutput(this, mainWindowHandle, config.SoundDevice), + ESoundOutputMethod.XAudio2 => new XAudio2SoundOutput(this, config.SoundDevice), + ESoundOutputMethod.OpenAL => new OpenALSoundOutput(this, config.SoundDevice), _ => new DummySoundOutput(this) }; } @@ -76,7 +79,7 @@ namespace BizHawk.Client.EmuHawk public void StartSound() { if (_disposed) return; - if (!GlobalWin.Config.SoundEnabled) return; + if (!Config.SoundEnabled) return; if (IsStarted) return; _outputDevice.StartSound(); @@ -150,7 +153,7 @@ namespace BizHawk.Client.EmuHawk public void UpdateSound(float atten, bool isSecondaryThrottlingDisabled) { - if (!GlobalWin.Config.SoundEnabled || !IsStarted || _bufferedProvider == null || _disposed) + if (!Config.SoundEnabled || !IsStarted || _bufferedProvider == null || _disposed) { _bufferedProvider?.DiscardSamples(); return; @@ -175,7 +178,7 @@ namespace BizHawk.Client.EmuHawk } else if (_bufferedProvider == _outputProvider) { - if (GlobalWin.Config.SoundThrottle) + if (Config.SoundThrottle) { _outputProvider.BaseSoundProvider.GetSamplesSync(out samples, out sampleCount); sampleOffset = 0;