mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 14:19:46 -06:00
Added volume control for OpenAL, also improved its performance a bit, but don't expect too much.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4712 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
@ -20,6 +20,9 @@
|
||||
|
||||
#if defined HAVE_OPENAL && HAVE_OPENAL
|
||||
|
||||
//
|
||||
// AyuanX: Spec says OpenAL1.1 is thread safe already
|
||||
//
|
||||
bool OpenALStream::Start()
|
||||
{
|
||||
ALDeviceList *pDeviceList = NULL;
|
||||
@ -68,8 +71,6 @@ void OpenALStream::Stop()
|
||||
// kick the thread if it's waiting
|
||||
soundSyncEvent.Set();
|
||||
|
||||
// AyuanX: Spec says OpenAL1.1 is thread safe already
|
||||
// soundCriticalSection.Enter();
|
||||
delete thread;
|
||||
thread = NULL;
|
||||
|
||||
@ -78,6 +79,7 @@ void OpenALStream::Stop()
|
||||
|
||||
// Clean up buffers and sources
|
||||
alDeleteSources(1, &uiSource);
|
||||
uiSource = 0;
|
||||
alDeleteBuffers(OAL_NUM_BUFFERS, uiBuffers);
|
||||
|
||||
ALCcontext *pContext = alcGetCurrentContext();
|
||||
@ -86,11 +88,18 @@ void OpenALStream::Stop()
|
||||
alcMakeContextCurrent(NULL);
|
||||
alcDestroyContext(pContext);
|
||||
alcCloseDevice(pDevice);
|
||||
// soundCriticalSection.Leave();
|
||||
|
||||
soundSyncEvent.Shutdown();
|
||||
}
|
||||
|
||||
void OpenALStream::SetVolume(int volume)
|
||||
{
|
||||
fVolume = (float)volume / 100.0f;
|
||||
|
||||
if (uiSource)
|
||||
alSourcef(uiSource, AL_GAIN, fVolume);
|
||||
}
|
||||
|
||||
void OpenALStream::Update()
|
||||
{
|
||||
soundSyncEvent.Set();
|
||||
@ -100,7 +109,6 @@ void OpenALStream::Clear(bool mute)
|
||||
{
|
||||
m_muted = mute;
|
||||
|
||||
// soundCriticalSection.Enter();
|
||||
if(m_muted)
|
||||
{
|
||||
alSourceStop(uiSource);
|
||||
@ -109,7 +117,6 @@ void OpenALStream::Clear(bool mute)
|
||||
{
|
||||
alSourcePlay(uiSource);
|
||||
}
|
||||
// soundCriticalSection.Leave();
|
||||
}
|
||||
|
||||
THREAD_RETURN OpenALStream::ThreadFunc(void* args)
|
||||
@ -146,14 +153,13 @@ void OpenALStream::SoundLoop()
|
||||
|
||||
while (!threadData)
|
||||
{
|
||||
// soundCriticalSection.Enter();
|
||||
if (iBuffersProcessed == iBuffersFilled)
|
||||
{
|
||||
alGetSourcei(uiSource, AL_BUFFERS_PROCESSED, &iBuffersProcessed);
|
||||
iBuffersFilled = 0;
|
||||
}
|
||||
int numSamples = m_mixer->GetNumSamples();
|
||||
numSamples &= ~0x400;
|
||||
numSamples &= ~0x100;
|
||||
|
||||
if (iBuffersProcessed && numSamples)
|
||||
{
|
||||
@ -177,7 +183,6 @@ void OpenALStream::SoundLoop()
|
||||
if (state != AL_PLAYING)
|
||||
alSourcePlay(uiSource);
|
||||
}
|
||||
// soundCriticalSection.Leave();
|
||||
soundSyncEvent.Wait();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user