diff --git a/rpcs3/Emu/Audio/AL/OpenALThread.cpp b/rpcs3/Emu/Audio/AL/OpenALThread.cpp index 5569b6df05..a81f612911 100644 --- a/rpcs3/Emu/Audio/AL/OpenALThread.cpp +++ b/rpcs3/Emu/Audio/AL/OpenALThread.cpp @@ -1,9 +1,11 @@ #include "stdafx.h" +#include "Utilities/Config.h" #include "Emu/System.h" -#include "Emu/state.h" #include "OpenALThread.h" +extern cfg::bool_entry g_cfg_audio_convert_to_u16; + #ifdef _MSC_VER #pragma comment(lib, "OpenAL32.lib") #endif @@ -32,30 +34,27 @@ void printAlcError(ALCenum err, const char* situation) } } -OpenALThread::~OpenALThread() +OpenALThread::OpenALThread() { - Quit(); -} - -void OpenALThread::Init() -{ - m_device = alcOpenDevice(nullptr); + ALCdevice* m_device = alcOpenDevice(nullptr); checkForAlcError("alcOpenDevice"); - m_context = alcCreateContext(m_device, nullptr); + ALCcontext* m_context = alcCreateContext(m_device, nullptr); checkForAlcError("alcCreateContext"); alcMakeContextCurrent(m_context); checkForAlcError("alcMakeContextCurrent"); } -void OpenALThread::Quit() +OpenALThread::~OpenALThread() { - m_context = alcGetCurrentContext(); - m_device = alcGetContextsDevice(m_context); - alcMakeContextCurrent(nullptr); - alcDestroyContext(m_context); - alcCloseDevice(m_device); + if (ALCcontext* m_context = alcGetCurrentContext()) + { + ALCdevice* m_device = alcGetContextsDevice(m_context); + alcMakeContextCurrent(nullptr); + alcDestroyContext(m_context); + alcCloseDevice(m_device); + } } void OpenALThread::Play() @@ -103,7 +102,7 @@ void OpenALThread::Open(const void* src, int size) for (uint i = 0; i m_audio_out; - -public: - void Init(); - void Close(); - - AudioThread& GetAudioOut() { return *m_audio_out; } -}; diff --git a/rpcs3/Emu/Audio/AudioThread.h b/rpcs3/Emu/Audio/AudioThread.h index 6932294bb3..fc01b25d7c 100644 --- a/rpcs3/Emu/Audio/AudioThread.h +++ b/rpcs3/Emu/Audio/AudioThread.h @@ -3,10 +3,8 @@ class AudioThread { public: - virtual ~AudioThread() {} + virtual ~AudioThread() = default; - virtual void Init() = 0; - virtual void Quit() = 0; virtual void Play() = 0; virtual void Open(const void* src, int size) = 0; virtual void Close() = 0; diff --git a/rpcs3/Emu/Audio/XAudio2/XAudio2Thread.cpp b/rpcs3/Emu/Audio/XAudio2/XAudio2Thread.cpp index 80483b6c35..3611783d2e 100644 --- a/rpcs3/Emu/Audio/XAudio2/XAudio2Thread.cpp +++ b/rpcs3/Emu/Audio/XAudio2/XAudio2Thread.cpp @@ -1,20 +1,16 @@ #include "stdafx.h" #ifdef _MSC_VER +#include "Utilities/Config.h" #include "Emu/System.h" -#include "Emu/state.h" #include "XAudio2Thread.h" -XAudio2Thread::~XAudio2Thread() -{ - Quit(); -} +extern cfg::bool_entry g_cfg_audio_convert_to_u16; -XAudio2Thread::XAudio2Thread() : m_xaudio2_instance(nullptr), m_master_voice(nullptr), m_source_voice(nullptr) -{ -} - -void XAudio2Thread::Init() +XAudio2Thread::XAudio2Thread() + : m_xaudio2_instance(nullptr) + , m_master_voice(nullptr) + , m_source_voice(nullptr) { HRESULT hr = S_OK; @@ -43,24 +39,23 @@ void XAudio2Thread::Init() } } -void XAudio2Thread::Quit() +XAudio2Thread::~XAudio2Thread() { - if (m_source_voice != nullptr) + if (m_source_voice != nullptr) { - Stop(); + m_source_voice->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(); @@ -101,11 +96,11 @@ void XAudio2Thread::Open(const void* src, int size) { HRESULT hr; - WORD sample_size = rpcs3::config.audio.convert_to_u16.value() ? sizeof(u16) : sizeof(float); + WORD sample_size = g_cfg_audio_convert_to_u16 ? sizeof(u16) : sizeof(float); WORD channels = 8; WAVEFORMATEX waveformatex; - waveformatex.wFormatTag = rpcs3::config.audio.convert_to_u16.value() ? WAVE_FORMAT_PCM : WAVE_FORMAT_IEEE_FLOAT; + waveformatex.wFormatTag = g_cfg_audio_convert_to_u16 ? WAVE_FORMAT_PCM : WAVE_FORMAT_IEEE_FLOAT; waveformatex.nChannels = channels; waveformatex.nSamplesPerSec = 48000; waveformatex.nAvgBytesPerSec = 48000 * (DWORD)channels * (DWORD)sample_size; @@ -121,6 +116,8 @@ void XAudio2Thread::Open(const void* src, int size) return; } + m_source_voice->SetVolume(4.0); + AddData(src, size); Play(); } diff --git a/rpcs3/Emu/Audio/XAudio2/XAudio2Thread.h b/rpcs3/Emu/Audio/XAudio2/XAudio2Thread.h index 3f149bea57..25729c450e 100644 --- a/rpcs3/Emu/Audio/XAudio2/XAudio2Thread.h +++ b/rpcs3/Emu/Audio/XAudio2/XAudio2Thread.h @@ -11,21 +11,18 @@ class XAudio2Thread : public AudioThread { -private: IXAudio2* m_xaudio2_instance; IXAudio2MasteringVoice* m_master_voice; IXAudio2SourceVoice* m_source_voice; public: - virtual ~XAudio2Thread(); XAudio2Thread(); + virtual ~XAudio2Thread() override; - virtual void Init(); - virtual void Quit(); - virtual void Play(); - virtual void Open(const void* src, int size); - virtual void Close(); - virtual void Stop(); - virtual void AddData(const void* src, int size); + virtual void Play() override; + virtual void Open(const void* src, int size) override; + virtual void Close() override; + virtual void Stop() override; + virtual void AddData(const void* src, int size) override; }; #endif