diff --git a/src/modules/audio/openal/Source.cpp b/src/modules/audio/openal/Source.cpp index 38fb398a7..65d9113f8 100644 --- a/src/modules/audio/openal/Source.cpp +++ b/src/modules/audio/openal/Source.cpp @@ -34,8 +34,8 @@ namespace openal Source::Source(Pool * pool, love::sound::SoundData * soundData) : love::audio::Source(Source::TYPE_STATIC), pool(pool), valid(false), - pitch(1.0f), volume(1.0f), looping(false), offsetSamples(0), offsetSeconds(0), - decoder(0), toLoop(0) + pitch(1.0f), volume(1.0f), looping(false), paused(false), offsetSamples(0), + offsetSeconds(0), decoder(0), toLoop(0) { alGenBuffers(1, buffers); ALenum fmt = getFormat(soundData->getChannels(), soundData->getBits()); @@ -50,8 +50,8 @@ namespace openal Source::Source(Pool * pool, love::sound::Decoder * decoder) : love::audio::Source(Source::TYPE_STREAM), pool(pool), valid(false), - pitch(1.0f), volume(1.0f), looping(false), offsetSamples(0), offsetSeconds(0), - decoder(decoder), toLoop(0) + pitch(1.0f), volume(1.0f), looping(false), paused(false), offsetSamples(0), + offsetSeconds(0), decoder(decoder), toLoop(0) { decoder->retain(); alGenBuffers(MAX_BUFFERS, buffers); @@ -78,6 +78,12 @@ namespace openal void Source::play() { + if (valid && paused) + { + pool->resume(this); + return; + } + valid = pool->play(this, source); if(valid) @@ -433,14 +439,16 @@ namespace openal if(valid) { alSourcePause(source); + paused = true; } } void Source::resumeAtomic() { - if(valid) + if(valid && paused) { alSourcePlay(source); + paused = false; } } @@ -449,6 +457,8 @@ namespace openal if(valid && type == TYPE_STATIC) { alSourceRewind(source); + if (!paused) + alSourcePlay(source); } else if(valid && type == TYPE_STREAM) { diff --git a/src/modules/audio/openal/Source.h b/src/modules/audio/openal/Source.h index 07a86b5e1..83b050792 100644 --- a/src/modules/audio/openal/Source.h +++ b/src/modules/audio/openal/Source.h @@ -62,6 +62,7 @@ namespace openal float velocity[3]; float direction[3]; bool looping; + bool paused; float offsetSamples; float offsetSeconds;