From a372dcaec805f5d304dee7c911afd56c9e1d8009 Mon Sep 17 00:00:00 2001 From: Bart van Strien Date: Wed, 8 Jun 2011 23:37:01 +0200 Subject: [PATCH] Some audio fixes (no more mp3 clicking and popping?) (issue #217) --- src/modules/audio/openal/Source.cpp | 8 ++++---- src/modules/sound/lullaby/Mpg123Decoder.cpp | 1 + src/modules/sound/lullaby/VorbisDecoder.cpp | 6 +++--- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/modules/audio/openal/Source.cpp b/src/modules/audio/openal/Source.cpp index 241c2b7c5..49a47c387 100644 --- a/src/modules/audio/openal/Source.cpp +++ b/src/modules/audio/openal/Source.cpp @@ -169,8 +169,8 @@ namespace openal offsetSamples += (curOffsetSamples - newOffsetSamples); offsetSeconds += (curOffsetSecs - newOffsetSecs); - if(streamAtomic(buffer, decoder) > 0) - alSourceQueueBuffers(source, 1, &buffer); + streamAtomic(buffer, decoder); + alSourceQueueBuffers(source, 1, &buffer); } } } @@ -349,7 +349,7 @@ namespace openal { int decoded = streamAtomic(buffers[i], decoder); ++usedBuffers; - if(decoded < decoder->getSize()) + if(decoder->isFinished()) break; } @@ -466,7 +466,7 @@ namespace openal if(decoded > 0 && fmt != 0) alBufferData(buffer, fmt, d->getBuffer(), decoded, d->getSampleRate()); - if(decoded < d->getSize() && isLooping()) { + if(decoder->isFinished() && isLooping()) { offsetSamples = 0; offsetSeconds = 0; d->rewind(); diff --git a/src/modules/sound/lullaby/Mpg123Decoder.cpp b/src/modules/sound/lullaby/Mpg123Decoder.cpp index 6cd151a4e..928e168c5 100644 --- a/src/modules/sound/lullaby/Mpg123Decoder.cpp +++ b/src/modules/sound/lullaby/Mpg123Decoder.cpp @@ -129,6 +129,7 @@ namespace lullaby continue; case MPG123_NEED_MORE: { + size += numbytes; int v = feed(8192); switch(v) diff --git a/src/modules/sound/lullaby/VorbisDecoder.cpp b/src/modules/sound/lullaby/VorbisDecoder.cpp index 292dfc075..074a8485d 100644 --- a/src/modules/sound/lullaby/VorbisDecoder.cpp +++ b/src/modules/sound/lullaby/VorbisDecoder.cpp @@ -193,14 +193,14 @@ namespace lullaby else if(result <= OV_EREAD) return -1; else if(result == 0) + { + eof = true; break; + } else if(result > 0) size += result; } - if(oggFile.dataSize - oggFile.dataRead == 0) - eof = true; - return size; }