diff --git a/rpcs3/Emu/Audio/AudioManager.cpp b/rpcs3/Emu/Audio/AudioManager.cpp index 8e19fc7542..a48802136d 100644 --- a/rpcs3/Emu/Audio/AudioManager.cpp +++ b/rpcs3/Emu/Audio/AudioManager.cpp @@ -9,6 +9,11 @@ AudioManager::AudioManager() : m_audio_out(nullptr) { } +AudioManager::~AudioManager() +{ + Close(); +} + void AudioManager::Init() { if (m_audio_out) return; diff --git a/rpcs3/Emu/Audio/AudioManager.h b/rpcs3/Emu/Audio/AudioManager.h index 56e18f99a8..88eb3db216 100644 --- a/rpcs3/Emu/Audio/AudioManager.h +++ b/rpcs3/Emu/Audio/AudioManager.h @@ -35,6 +35,7 @@ class AudioManager AudioThread* m_audio_out; public: AudioManager(); + ~AudioManager(); void Init(); void Close(); diff --git a/rpcs3/Emu/Audio/XAudio2/XAudio2Thread.cpp b/rpcs3/Emu/Audio/XAudio2/XAudio2Thread.cpp index 7d3f0ee957..2664f78b3e 100644 --- a/rpcs3/Emu/Audio/XAudio2/XAudio2Thread.cpp +++ b/rpcs3/Emu/Audio/XAudio2/XAudio2Thread.cpp @@ -8,7 +8,7 @@ XAudio2Thread::~XAudio2Thread() { - if (m_source_voice) Quit(); + Quit(); } XAudio2Thread::XAudio2Thread() : m_xaudio2_instance(nullptr), m_master_voice(nullptr), m_source_voice(nullptr) @@ -46,14 +46,23 @@ void XAudio2Thread::Init() void XAudio2Thread::Quit() { - Stop(); - m_source_voice->DestroyVoice(); - m_source_voice = nullptr; - m_master_voice->DestroyVoice(); - m_master_voice = nullptr; - m_xaudio2_instance->StopEngine(); - m_xaudio2_instance->Release(); - m_xaudio2_instance = nullptr; + if (m_source_voice != nullptr) + { + Stop(); + m_source_voice->DestroyVoice(); + m_source_voice = nullptr; + } + if (m_master_voice != nullptr) + { + m_master_voice->DestroyVoice(); + m_master_voice = nullptr; + } + if (m_xaudio2_instance != nullptr) + { + m_xaudio2_instance->StopEngine(); + m_xaudio2_instance->Release(); + m_xaudio2_instance = nullptr; + } CoUninitialize(); }