From b8db6defb721b4e9c44b58b2175dc1230e8e6c35 Mon Sep 17 00:00:00 2001 From: jules Date: Sun, 8 Feb 2015 12:28:59 +0000 Subject: [PATCH] Fix for AudioFormatReader::read not filling extra channels when reading beyond the start of the source file. --- .../juce_audio_formats/format/juce_AudioFormatReader.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/modules/juce_audio_formats/format/juce_AudioFormatReader.cpp b/modules/juce_audio_formats/format/juce_AudioFormatReader.cpp index 5b0b34f452..b265b09396 100644 --- a/modules/juce_audio_formats/format/juce_AudioFormatReader.cpp +++ b/modules/juce_audio_formats/format/juce_AudioFormatReader.cpp @@ -46,6 +46,7 @@ bool AudioFormatReader::read (int* const* destSamples, { jassert (numDestChannels > 0); // you have to actually give this some channels to work with! + const size_t originalNumSamplesToRead = (size_t) numSamplesToRead; int startOffsetInDestBuffer = 0; if (startSampleInSource < 0) @@ -64,7 +65,7 @@ bool AudioFormatReader::read (int* const* destSamples, if (numSamplesToRead <= 0) return true; - if (! readSamples (const_cast (destSamples), + if (! readSamples (const_cast (destSamples), jmin ((int) numChannels, numDestChannels), startOffsetInDestBuffer, startSampleInSource, numSamplesToRead)) return false; @@ -87,13 +88,13 @@ bool AudioFormatReader::read (int* const* destSamples, if (lastFullChannel != nullptr) for (int i = (int) numChannels; i < numDestChannels; ++i) if (destSamples[i] != nullptr) - memcpy (destSamples[i], lastFullChannel, sizeof (int) * (size_t) numSamplesToRead); + memcpy (destSamples[i], lastFullChannel, sizeof (int) * originalNumSamplesToRead); } else { for (int i = (int) numChannels; i < numDestChannels; ++i) if (destSamples[i] != nullptr) - zeromem (destSamples[i], sizeof (int) * (size_t) numSamplesToRead); + zeromem (destSamples[i], sizeof (int) * originalNumSamplesToRead); } }