diff --git a/interface/src/Audio.cpp b/interface/src/Audio.cpp index 40c9faac7f..60f28ca5df 100644 --- a/interface/src/Audio.cpp +++ b/interface/src/Audio.cpp @@ -193,6 +193,21 @@ int audioCallback (const void *inputBuffer, } // play whatever we have in the audio buffer + // check if we have more than we need to play out + int thresholdFrames = ceilf((PACKET_LENGTH_SAMPLES + JITTER_BUFFER_SAMPLES) / (float)PACKET_LENGTH_SAMPLES); + int thresholdSamples = thresholdFrames * PACKET_LENGTH_SAMPLES; + + if (ringBuffer->diffLastWriteNextOutput() > thresholdSamples) { + // we need to push the next output forwards + int samplesToPush = ringBuffer->diffLastWriteNextOutput() - thresholdSamples; + + if (ringBuffer->getNextOutput() + samplesToPush > ringBuffer->getBuffer()) { + ringBuffer->setNextOutput(ringBuffer->getBuffer() + (samplesToPush - (ringBuffer->getBuffer() + RING_BUFFER_SAMPLES - ringBuffer->getNextOutput()))); + } else { + ringBuffer->setNextOutput(ringBuffer->getNextOutput() + samplesToPush); + } + } + memcpy(outputLeft, ringBuffer->getNextOutput(), PACKET_LENGTH_BYTES_PER_CHANNEL); memcpy(outputRight, ringBuffer->getNextOutput() + PACKET_LENGTH_SAMPLES_PER_CHANNEL, PACKET_LENGTH_BYTES_PER_CHANNEL);