mirror of
https://github.com/RPCSX/rpcsx.git
synced 2026-04-09 08:25:16 +00:00
Improved AudioThread interface, added XAudio2 audio output
This commit is contained in:
parent
e6e60795b7
commit
b5c33ec26b
12 changed files with 289 additions and 70 deletions
|
|
@ -15,7 +15,7 @@ static const ALenum g_audio_format = Ini.AudioConvertToU16.GetValue() ? AL_FORMA
|
|||
|
||||
void printAlError(ALenum err, const char* situation)
|
||||
{
|
||||
if(err != AL_NO_ERROR)
|
||||
if (err != AL_NO_ERROR)
|
||||
{
|
||||
LOG_ERROR(HLE, "%s: OpenAL error 0x%04x", situation, err);
|
||||
Emu.Pause();
|
||||
|
|
@ -24,7 +24,7 @@ void printAlError(ALenum err, const char* situation)
|
|||
|
||||
void printAlcError(ALCenum err, const char* situation)
|
||||
{
|
||||
if(err != ALC_NO_ERROR)
|
||||
if (err != ALC_NO_ERROR)
|
||||
{
|
||||
LOG_ERROR(HLE, "%s: OpenALC error 0x%04x", situation, err);
|
||||
Emu.Pause();
|
||||
|
|
@ -63,7 +63,7 @@ void OpenALThread::Play()
|
|||
alGetSourcei(m_source, AL_SOURCE_STATE, &state);
|
||||
checkForAlError("OpenALThread::Play -> alGetSourcei");
|
||||
|
||||
if(state != AL_PLAYING)
|
||||
if (state != AL_PLAYING)
|
||||
{
|
||||
alSourcePlay(m_source);
|
||||
checkForAlError("alSourcePlay");
|
||||
|
|
@ -74,7 +74,7 @@ void OpenALThread::Close()
|
|||
{
|
||||
alSourceStop(m_source);
|
||||
checkForAlError("alSourceStop");
|
||||
if (alIsSource(m_source))
|
||||
if (alIsSource(m_source))
|
||||
alDeleteSources(1, &m_source);
|
||||
|
||||
alDeleteBuffers(g_al_buffers_count, m_buffers);
|
||||
|
|
@ -87,7 +87,7 @@ void OpenALThread::Stop()
|
|||
checkForAlError("alSourceStop");
|
||||
}
|
||||
|
||||
void OpenALThread::Open(const void* src, ALsizei size)
|
||||
void OpenALThread::Open(const void* src, int size)
|
||||
{
|
||||
alGenSources(1, &m_source);
|
||||
checkForAlError("alGenSources");
|
||||
|
|
@ -100,9 +100,10 @@ void OpenALThread::Open(const void* src, ALsizei size)
|
|||
|
||||
m_buffer_size = size;
|
||||
|
||||
for(uint i=0; i<g_al_buffers_count; ++i)
|
||||
for (uint i = 0; i<g_al_buffers_count; ++i)
|
||||
{
|
||||
AddBlock(m_buffers[i], m_buffer_size, src);
|
||||
alBufferData(m_buffers[i], g_audio_format, src, m_buffer_size, 48000);
|
||||
checkForAlError("alBufferData");
|
||||
}
|
||||
|
||||
alSourceQueueBuffers(m_source, g_al_buffers_count, m_buffers);
|
||||
|
|
@ -110,7 +111,7 @@ void OpenALThread::Open(const void* src, ALsizei size)
|
|||
Play();
|
||||
}
|
||||
|
||||
void OpenALThread::AddData(const void* src, ALsizei size)
|
||||
void OpenALThread::AddData(const void* src, int size)
|
||||
{
|
||||
const char* bsrc = (const char*)src;
|
||||
ALuint buffer;
|
||||
|
|
@ -118,16 +119,16 @@ void OpenALThread::AddData(const void* src, ALsizei size)
|
|||
|
||||
alGetSourcei(m_source, AL_BUFFERS_PROCESSED, &buffers_count);
|
||||
checkForAlError("OpenALThread::AddData -> alGetSourcei");
|
||||
|
||||
while(size)
|
||||
|
||||
while (size)
|
||||
{
|
||||
if(buffers_count-- <= 0)
|
||||
if (buffers_count-- <= 0)
|
||||
{
|
||||
Play();
|
||||
|
||||
alGetSourcei(m_source, AL_BUFFERS_PROCESSED, &buffers_count);
|
||||
checkForAlError("OpenALThread::AddData(in loop) -> alGetSourcei");
|
||||
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
@ -135,8 +136,9 @@ void OpenALThread::AddData(const void* src, ALsizei size)
|
|||
checkForAlError("alSourceUnqueueBuffers");
|
||||
|
||||
int bsize = size < m_buffer_size ? size : m_buffer_size;
|
||||
if (!AddBlock(buffer, bsize, bsrc))
|
||||
LOG_ERROR(HLE, "OpenALThread::AddBlock: invalid block size: %d", bsize);
|
||||
|
||||
alBufferData(buffer, g_audio_format, bsrc, bsize, 48000);
|
||||
checkForAlError("alBufferData");
|
||||
|
||||
alSourceQueueBuffers(m_source, 1, &buffer);
|
||||
checkForAlError("alSourceQueueBuffers");
|
||||
|
|
@ -146,14 +148,4 @@ void OpenALThread::AddData(const void* src, ALsizei size)
|
|||
}
|
||||
|
||||
Play();
|
||||
}
|
||||
|
||||
bool OpenALThread::AddBlock(const ALuint buffer_id, const ALsizei size, const void* src)
|
||||
{
|
||||
if (size < 1) return false;
|
||||
|
||||
alBufferData(buffer_id, g_audio_format, src, size, 48000);
|
||||
checkForAlError("alBufferData");
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue