diff --git a/rpcs3/Emu/Audio/AL/OpenALThread.cpp b/rpcs3/Emu/Audio/AL/OpenALThread.cpp index c7fea5041b..976ad26e58 100644 --- a/rpcs3/Emu/Audio/AL/OpenALThread.cpp +++ b/rpcs3/Emu/Audio/AL/OpenALThread.cpp @@ -50,6 +50,8 @@ OpenALThread::OpenALThread() { m_format = g_cfg.audio.convert_to_u16 ? AL_FORMAT_71CHN16 : AL_FORMAT_71CHN32; } + + m_buffers = std::make_unique(g_cfg.audio.frames); } OpenALThread::~OpenALThread() @@ -83,7 +85,7 @@ void OpenALThread::Close() if (alIsSource(m_source)) alDeleteSources(1, &m_source); - alDeleteBuffers(g_al_buffers_count, m_buffers); + alDeleteBuffers(g_cfg.audio.frames, m_buffers.get()); checkForAlError("alDeleteBuffers"); } @@ -98,7 +100,7 @@ void OpenALThread::Open(const void* src, int size) alGenSources(1, &m_source); checkForAlError("alGenSources"); - alGenBuffers(g_al_buffers_count, m_buffers); + alGenBuffers(g_cfg.audio.frames, m_buffers.get()); checkForAlError("alGenBuffers"); alSourcei(m_source, AL_LOOPING, AL_FALSE); @@ -106,13 +108,13 @@ void OpenALThread::Open(const void* src, int size) m_buffer_size = size; - for (uint i = 0; i class OpenALThread : public AudioThread { private: - static const uint g_al_buffers_count = 24; - ALint m_format; ALuint m_source; - ALuint m_buffers[g_al_buffers_count]; + std::unique_ptr m_buffers; ALsizei m_buffer_size; public: diff --git a/rpcs3/Emu/Audio/ALSA/ALSAThread.cpp b/rpcs3/Emu/Audio/ALSA/ALSAThread.cpp index e9e08bbe5a..12e6d0045b 100644 --- a/rpcs3/Emu/Audio/ALSA/ALSAThread.cpp +++ b/rpcs3/Emu/Audio/ALSA/ALSAThread.cpp @@ -59,7 +59,7 @@ ALSAThread::ALSAThread() if (!check(snd_pcm_hw_params_set_channels(s_tls_handle, hw_params, g_cfg.audio.downmix_to_2ch ? 2 : 8), "snd_pcm_hw_params_set_channels")) return; - if (!check(snd_pcm_hw_params_set_buffer_size(s_tls_handle, hw_params, 8 * 256), "snd_pcm_hw_params_set_buffer_size")) + if (!check(snd_pcm_hw_params_set_buffer_size(s_tls_handle, hw_params, g_cfg.audio.frames * 256), "snd_pcm_hw_params_set_buffer_size")) return; if (!check(snd_pcm_hw_params_set_period_size(s_tls_handle, hw_params, 256, 0), "snd_pcm_hw_params_set_period_size")) diff --git a/rpcs3/Emu/System.h b/rpcs3/Emu/System.h index f827ceeef5..8db2537c95 100644 --- a/rpcs3/Emu/System.h +++ b/rpcs3/Emu/System.h @@ -363,6 +363,7 @@ struct cfg_root : cfg::node cfg::_bool dump_to_file{this, "Dump to file"}; cfg::_bool convert_to_u16{this, "Convert to 16 bit"}; cfg::_bool downmix_to_2ch{this, "Downmix to Stereo", true}; + cfg::_int<2, 128> frames{this, "Buffer Count", 32}; } audio{this};