Switch to OpenAL Soft (see issue #166). Use native FLOAT32 data now. Add small check in OpenALThread.

This commit is contained in:
Oil
2014-05-25 01:38:29 +04:00
parent 60514cc48d
commit 6072fd2fbb
19 changed files with 2114 additions and 2109 deletions
+10 -7
View File
@@ -55,7 +55,7 @@ void OpenALThread::Play()
{
ALint state;
alGetSourcei(m_source, AL_SOURCE_STATE, &state);
checkForAlError("alGetSourcei");
checkForAlError("OpenALThread::Play -> alGetSourcei");
if(state != AL_PLAYING)
{
@@ -90,7 +90,7 @@ void OpenALThread::Open(const void* src, ALsizei size)
checkForAlError("alGenBuffers");
alSourcei(m_source, AL_LOOPING, AL_FALSE);
checkForAlError("alSourcei");
checkForAlError("OpenALThread::Open ->alSourcei");
m_buffer_size = size;
@@ -109,9 +109,10 @@ void OpenALThread::AddData(const void* src, ALsizei size)
const char* bsrc = (const char*)src;
ALuint buffer;
ALint buffers_count;
alGetSourcei(m_source, AL_BUFFERS_PROCESSED, &buffers_count);
checkForAlError("alGetSourcei");
alGetSourcei(m_source, AL_BUFFERS_PROCESSED, &buffers_count);
checkForAlError("OpenALThread::AddData -> alGetSourcei");
while(size)
{
if(buffers_count-- <= 0)
@@ -119,7 +120,8 @@ void OpenALThread::AddData(const void* src, ALsizei size)
Play();
alGetSourcei(m_source, AL_BUFFERS_PROCESSED, &buffers_count);
checkForAlError("alGetSourcei");
checkForAlError("OpenALThread::AddData(in loop) -> alGetSourcei");
continue;
}
@@ -127,7 +129,8 @@ void OpenALThread::AddData(const void* src, ALsizei size)
checkForAlError("alSourceUnqueueBuffers");
int bsize = size < m_buffer_size ? size : m_buffer_size;
AddBlock(buffer, bsize, bsrc);
if (!AddBlock(buffer, bsize, bsrc))
ConLog.Error("OpenALThread::AddBlock: invalid block size: %d", bsize);
alSourceQueueBuffers(m_source, 1, &buffer);
checkForAlError("alSourceQueueBuffers");
@@ -143,7 +146,7 @@ bool OpenALThread::AddBlock(const ALuint buffer_id, ALsizei size, const void* sr
{
if (size < 1) return false;
alBufferData(buffer_id, AL_FORMAT_STEREO16, src, size, 48000);
alBufferData(buffer_id, AL_FORMAT_STEREO_FLOAT32, src, size, 48000);
checkForAlError("alBufferData");
return true;