From cd6848a912fe4d91e8797961d5fed228a824ffb7 Mon Sep 17 00:00:00 2001 From: LRN1986 Date: Wed, 28 Apr 2010 16:42:22 +0000 Subject: [PATCH] Fix Resample cutting the tracks off --- src/WaveClip.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/WaveClip.cpp b/src/WaveClip.cpp index 520150d8a..335a20565 100644 --- a/src/WaveClip.cpp +++ b/src/WaveClip.cpp @@ -1529,12 +1529,18 @@ bool WaveClip::Resample(int rate, ProgressDialog *progress) float* outBuffer = new float[bufsize]; sampleCount pos = 0; bool error = false; + int outGenerated = 0; sampleCount numSamples = mSequence->GetNumSamples(); Sequence* newSequence = new Sequence(mSequence->GetDirManager(), mSequence->GetSampleFormat()); - while (pos < numSamples) + /** + * We want to keep going as long as we have something to feed the resampler + * with OR as long as the resampler spews out samples (which could continue + * for a few iterations after we stop feeding it) + */ + while (pos < numSamples || outGenerated > 0) { int inLen = numSamples - pos; if (inLen > bufsize) @@ -1549,7 +1555,7 @@ bool WaveClip::Resample(int rate, ProgressDialog *progress) } int inBufferUsed = 0; - int outGenerated = resample->Process(factor, inBuffer, inLen, isLast, + outGenerated = resample->Process(factor, inBuffer, inLen, isLast, &inBufferUsed, outBuffer, bufsize); pos += inBufferUsed;