From a9dd3dc13fb135529fccfccdae14c6fbed51ac1a Mon Sep 17 00:00:00 2001 From: cosmonaut Date: Tue, 12 Dec 2023 19:29:45 -0800 Subject: [PATCH] audio disposal is friggin haunted man --- src/Audio/AudioDevice.cs | 20 +++++++++++++++++--- src/Game.cs | 6 +++--- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/Audio/AudioDevice.cs b/src/Audio/AudioDevice.cs index 17f617e..c6f2cda 100644 --- a/src/Audio/AudioDevice.cs +++ b/src/Audio/AudioDevice.cs @@ -292,15 +292,30 @@ namespace MoonWorks.Audio { Thread.Join(); - // dispose all voices first + // dispose all source voices first foreach (var resource in resources) { - if (resource.Target is Voice voice) + if (resource.Target is SourceVoice voice) { voice.Dispose(); } } + // dispose all submix voices except the faux mastering voice + foreach (var resource in resources) + { + if (resource.Target is SubmixVoice voice && voice != fauxMasteringVoice) + { + voice.Dispose(); + } + } + + // dispose the faux mastering voice + fauxMasteringVoice.Dispose(); + + // dispose the true mastering voice + FAudio.FAudioVoice_DestroyVoice(trueMasteringVoice); + // destroy all other audio resources foreach (var resource in resources) { @@ -313,7 +328,6 @@ namespace MoonWorks.Audio resources.Clear(); } - FAudio.FAudioVoice_DestroyVoice(trueMasteringVoice); FAudio.FAudio_Release(Handle); IsDisposed = true; diff --git a/src/Game.cs b/src/Game.cs index 0ba395f..38e2784 100644 --- a/src/Game.cs +++ b/src/Game.cs @@ -109,9 +109,6 @@ namespace MoonWorks Logger.LogInfo("Cleaning up game..."); Destroy(); - Logger.LogInfo("Closing audio thread..."); - AudioDevice.Dispose(); - Logger.LogInfo("Unclaiming window..."); GraphicsDevice.UnclaimWindow(MainWindow); @@ -121,6 +118,9 @@ namespace MoonWorks Logger.LogInfo("Disposing graphics device..."); GraphicsDevice.Dispose(); + Logger.LogInfo("Closing audio thread..."); + AudioDevice.Dispose(); + SDL.SDL_Quit(); }