diff --git a/src/modules/audio/openal/Source.cpp b/src/modules/audio/openal/Source.cpp index c08d01dde..ddefb5302 100644 --- a/src/modules/audio/openal/Source.cpp +++ b/src/modules/audio/openal/Source.cpp @@ -1000,11 +1000,19 @@ bool Source::play(const std::vector &sources) toPlay.reserve(sources.size()); for (size_t i = 0; i < sources.size(); i++) { - if (wasPlaying[i]) + // If the source was paused, wasPlaying[i] will be true but we still + // want to resume it. We don't want to call alSourcePlay on sources + // that are actually playing though. + if (wasPlaying[i] && sources[i]->isPlaying()) continue; - Source *source = (Source*) sources[i]; - source->source = ids[i]; - source->prepareAtomic(); + + if (!wasPlaying[i]) + { + Source *source = (Source*) sources[i]; + source->source = ids[i]; + source->prepareAtomic(); + } + toPlay.push_back(ids[i]); }