From ba3282e12b034e2b2ec48a6b579b763b7a7dbc58 Mon Sep 17 00:00:00 2001 From: Ken Cooke Date: Thu, 23 May 2019 08:03:59 -0700 Subject: [PATCH] Fix rounding error in allOrNothing mode --- libraries/audio/src/InboundAudioStream.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/libraries/audio/src/InboundAudioStream.cpp b/libraries/audio/src/InboundAudioStream.cpp index 3964c9a6ed..7a81b8a67a 100644 --- a/libraries/audio/src/InboundAudioStream.cpp +++ b/libraries/audio/src/InboundAudioStream.cpp @@ -364,9 +364,17 @@ int InboundAudioStream::popSamples(int maxSamples, bool allOrNothing) { // buffer calculations. setToStarved(); _consecutiveNotMixedCount++; - //Kick PLC to generate a filler frame, reducing 'click' - lostAudioData(allOrNothing ? (maxSamples - samplesAvailable) / _ringBuffer.getNumFrameSamples() : 1); + + // use PLC to generate extrapolated audio data, to reduce clicking + if (allOrNothing) { + int samplesNeeded = maxSamples - samplesAvailable; + int packetsNeeded = (samplesNeeded + _ringBuffer.getNumFrameSamples() - 1) / _ringBuffer.getNumFrameSamples(); + lostAudioData(packetsNeeded); + } else { + lostAudioData(1); + } samplesAvailable = _ringBuffer.samplesAvailable(); + if (samplesAvailable > 0) { samplesPopped = std::min(samplesAvailable, maxSamples); popSamplesNoCheck(samplesPopped);