Browse Source

iOS: fix audio clicks immediately after playing a source. Resolves issue #1485.

Alex Szpakowski 6 years ago
parent
commit
276bdd1dbf
1 changed files with 10 additions and 6 deletions
  1. 10 6
      src/modules/audio/openal/Source.cpp

+ 10 - 6
src/modules/audio/openal/Source.cpp

@@ -919,27 +919,31 @@ bool Source::playAtomic(ALuint source)
 	// Clear errors.
 	alGetError();
 
-	alSourcePlay(source);
+	// Seek to the current/pending offset before playing. If this call happens
+	// immediately after alSourcePlay it could introduce a click depending on
+	// the platform, because the source is asynchronously playing by then.
+	alSourcef(source, AL_SAMPLE_OFFSET, offsetSamples);
 
 	bool success = alGetError() == AL_NO_ERROR;
 
+	alSourcePlay(source);
+
+	success &= alGetError() == AL_NO_ERROR;
+
 	if (sourceType == TYPE_STREAM)
 	{
 		valid = true; //isPlaying() needs source to be valid
 		if (!isPlaying())
 			success = false;
 	}
-	else if (success)
-	{
-		alSourcef(source, AL_SAMPLE_OFFSET, offsetSamples);
-		success = alGetError() == AL_NO_ERROR;
-	}
 
 	if (!success)
 	{
 		valid = true; //stop() needs source to be valid
 		stop();
 	}
+
+	// Static sources: reset the pending offset since it's not valid anymore.
 	if (sourceType != TYPE_STREAM)
 		offsetSamples = offsetSeconds = 0;