Audio: add Buffer Count setting

This commit is contained in:
Nekotekina 2017-10-28 23:23:39 +03:00
parent 89fba1c385
commit 8520ca7ef7
4 changed files with 10 additions and 8 deletions

View file

@ -50,6 +50,8 @@ OpenALThread::OpenALThread()
{ {
m_format = g_cfg.audio.convert_to_u16 ? AL_FORMAT_71CHN16 : AL_FORMAT_71CHN32; m_format = g_cfg.audio.convert_to_u16 ? AL_FORMAT_71CHN16 : AL_FORMAT_71CHN32;
} }
m_buffers = std::make_unique<ALuint[]>(g_cfg.audio.frames);
} }
OpenALThread::~OpenALThread() OpenALThread::~OpenALThread()
@ -83,7 +85,7 @@ void OpenALThread::Close()
if (alIsSource(m_source)) if (alIsSource(m_source))
alDeleteSources(1, &m_source); alDeleteSources(1, &m_source);
alDeleteBuffers(g_al_buffers_count, m_buffers); alDeleteBuffers(g_cfg.audio.frames, m_buffers.get());
checkForAlError("alDeleteBuffers"); checkForAlError("alDeleteBuffers");
} }
@ -98,7 +100,7 @@ void OpenALThread::Open(const void* src, int size)
alGenSources(1, &m_source); alGenSources(1, &m_source);
checkForAlError("alGenSources"); checkForAlError("alGenSources");
alGenBuffers(g_al_buffers_count, m_buffers); alGenBuffers(g_cfg.audio.frames, m_buffers.get());
checkForAlError("alGenBuffers"); checkForAlError("alGenBuffers");
alSourcei(m_source, AL_LOOPING, AL_FALSE); alSourcei(m_source, AL_LOOPING, AL_FALSE);
@ -106,13 +108,13 @@ void OpenALThread::Open(const void* src, int size)
m_buffer_size = size; m_buffer_size = size;
for (uint i = 0; i<g_al_buffers_count; ++i) for (int i = 0; i < g_cfg.audio.frames; ++i)
{ {
alBufferData(m_buffers[i], m_format, src, m_buffer_size, 48000); alBufferData(m_buffers[i], m_format, src, m_buffer_size, 48000);
checkForAlError("alBufferData"); checkForAlError("alBufferData");
} }
alSourceQueueBuffers(m_source, g_al_buffers_count, m_buffers); alSourceQueueBuffers(m_source, g_cfg.audio.frames, m_buffers.get());
checkForAlError("alSourceQueueBuffers"); checkForAlError("alSourceQueueBuffers");
Play(); Play();
} }

View file

@ -2,15 +2,14 @@
#include "Emu/Audio/AudioThread.h" #include "Emu/Audio/AudioThread.h"
#include "3rdparty/OpenAL/include/alext.h" #include "3rdparty/OpenAL/include/alext.h"
#include <memory>
class OpenALThread : public AudioThread class OpenALThread : public AudioThread
{ {
private: private:
static const uint g_al_buffers_count = 24;
ALint m_format; ALint m_format;
ALuint m_source; ALuint m_source;
ALuint m_buffers[g_al_buffers_count]; std::unique_ptr<ALuint[]> m_buffers;
ALsizei m_buffer_size; ALsizei m_buffer_size;
public: public:

View file

@ -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")) 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; 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; return;
if (!check(snd_pcm_hw_params_set_period_size(s_tls_handle, hw_params, 256, 0), "snd_pcm_hw_params_set_period_size")) if (!check(snd_pcm_hw_params_set_period_size(s_tls_handle, hw_params, 256, 0), "snd_pcm_hw_params_set_period_size"))

View file

@ -363,6 +363,7 @@ struct cfg_root : cfg::node
cfg::_bool dump_to_file{this, "Dump to file"}; cfg::_bool dump_to_file{this, "Dump to file"};
cfg::_bool convert_to_u16{this, "Convert to 16 bit"}; cfg::_bool convert_to_u16{this, "Convert to 16 bit"};
cfg::_bool downmix_to_2ch{this, "Downmix to Stereo", true}; cfg::_bool downmix_to_2ch{this, "Downmix to Stereo", true};
cfg::_int<2, 128> frames{this, "Buffer Count", 32};
} audio{this}; } audio{this};