diff --git a/SurrealEngine/Audio/AudioDevice.cpp b/SurrealEngine/Audio/AudioDevice.cpp index fbc2e261..177ac556 100644 --- a/SurrealEngine/Audio/AudioDevice.cpp +++ b/SurrealEngine/Audio/AudioDevice.cpp @@ -316,10 +316,9 @@ class OpenALAudioDevice : public AudioDevice void PlayMusic(std::unique_ptr source) { - playbackMutex.lock(); + std::unique_lock lock(playbackMutex); music = std::move(source); musicUpdate = true; - playbackMutex.unlock(); } int PlaySound(int channel, USound* sound, vec3& location, float volume, float radius, float pitch) @@ -393,13 +392,13 @@ class OpenALAudioDevice : public AudioDevice void PlayMusicBuffer() override { - playbackMutex.lock(); + std::unique_lock lock(playbackMutex); if (!music) return; int format = (music->GetChannels() == 1) ? AL_FORMAT_MONO_FLOAT32 : AL_FORMAT_STEREO_FLOAT32; int freq = music->GetFrequency(); - playbackMutex.unlock(); + lock.unlock(); ALenum error; for (int i = 0; i < musicBufferCount; i++) @@ -428,14 +427,14 @@ class OpenALAudioDevice : public AudioDevice ALuint buffer; alSourceUnqueueBuffers(alMusicSource, 1, &buffer); - playbackMutex.lock(); + std::unique_lock lock(playbackMutex); if (!music) return; int format = (music->GetChannels() == 1) ? AL_FORMAT_MONO_FLOAT32 : AL_FORMAT_STEREO_FLOAT32; int freq = music->GetFrequency(); - playbackMutex.unlock(); + lock.unlock(); alBufferData(buffer, format, musicQueue.Pop(), musicBufferSize*4, freq); if (alGetError() != AL_NO_ERROR) @@ -490,7 +489,7 @@ class OpenALAudioDevice : public AudioDevice { while (!bExit) { - playbackMutex.lock(); + std::unique_lock lock(playbackMutex); if (musicUpdate) { musicUpdate = false; @@ -510,7 +509,7 @@ class OpenALAudioDevice : public AudioDevice music->ReadSamples(musicQueue.GetNextFree(), musicBufferSize); musicQueue.Push(musicQueue.GetNextFree()); } - playbackMutex.unlock(); + lock.unlock(); if (!bMusicPlaying) { @@ -526,7 +525,7 @@ class OpenALAudioDevice : public AudioDevice } else { - playbackMutex.unlock(); + lock.unlock(); bMusicPlaying = false; } using namespace std::chrono_literals;