diff --git a/Source/Audio.cpp b/Source/Audio.cpp index c141f3a098..48076d9d87 100644 --- a/Source/Audio.cpp +++ b/Source/Audio.cpp @@ -24,7 +24,7 @@ const short PACKET_LENGTH_SAMPLES = PACKET_LENGTH_BYTES / sizeof(int16_t); const int PHASE_DELAY_AT_90 = 20; const float AMPLITUDE_RATIO_AT_90 = 0.5; -const short RING_BUFFER_FRAMES = 4; +const short RING_BUFFER_FRAMES = 5; const short RING_BUFFER_SIZE_SAMPLES = RING_BUFFER_FRAMES * BUFFER_LENGTH_SAMPLES; const short JITTER_BUFFER_LENGTH_MSECS = 1; @@ -239,6 +239,7 @@ void *receiveAudioViaUDP(void *args) { // check for possibility of overlap bufferSampleOverlap = ringBuffer->bufferOverlap(copyToPointer, PACKET_LENGTH_SAMPLES); + } if (!bufferSampleOverlap) { @@ -258,11 +259,11 @@ void *receiveAudioViaUDP(void *args) { memcpy(copyToPointer, receivedData, PACKET_LENGTH_BYTES); ringBuffer->endOfLastWrite += PACKET_LENGTH_SAMPLES; } - } else { + } else { // no jitter buffer, but overlap // copy to the end, and then from the begining to the overlap memcpy(copyToPointer, receivedData, (PACKET_LENGTH_SAMPLES - bufferSampleOverlap) * sizeof(int16_t)); - memcpy(ringBuffer->buffer, receivedData + bufferSampleOverlap, bufferSampleOverlap * sizeof(int16_t)); + memcpy(ringBuffer->buffer, receivedData + (PACKET_LENGTH_SAMPLES - bufferSampleOverlap), bufferSampleOverlap * sizeof(int16_t)); // the end of the write is the amount of overlap ringBuffer->endOfLastWrite = ringBuffer->buffer + bufferSampleOverlap; diff --git a/Source/AudioRingBuffer.cpp b/Source/AudioRingBuffer.cpp index 6cb617457d..215d2c5ad5 100644 --- a/Source/AudioRingBuffer.cpp +++ b/Source/AudioRingBuffer.cpp @@ -36,7 +36,7 @@ short AudioRingBuffer::bufferOverlap(int16_t *pointer, short addedDistance) { short samplesLeft = (buffer + ringBufferLengthSamples) - pointer; - if (samplesLeft <= addedDistance) { + if (samplesLeft < addedDistance) { return addedDistance - samplesLeft; } else { return 0;