diff --git a/src/StretcherChannelData.cpp b/src/StretcherChannelData.cpp index 2c1225f..5ddc30f 100644 --- a/src/StretcherChannelData.cpp +++ b/src/StretcherChannelData.cpp @@ -86,6 +86,7 @@ RubberBandStretcher::Impl::ChannelData::construct(const std::set &sizes, accumulator = allocate_and_zero(maxSize); windowAccumulator = allocate_and_zero(maxSize); + ms = allocate_and_zero(maxSize); interpolator = allocate_and_zero(maxSize); interpolatorScale = 0; @@ -176,8 +177,8 @@ RubberBandStretcher::Impl::ChannelData::setSizes(size_t windowSize, envelope = reallocate_and_zero(envelope, oldReal, realSize); fltbuf = reallocate_and_zero(fltbuf, oldMax, maxSize); dblbuf = reallocate_and_zero(dblbuf, oldMax, maxSize); - - interpolator = reallocate_and_zero(interpolator, oldMax, maxSize); + ms = reallocate_and_zero(ms, oldMax, maxSize); + interpolator = reallocate_and_zero(interpolator, oldMax, maxSize); // But we do want to preserve data in these @@ -243,6 +244,8 @@ RubberBandStretcher::Impl::ChannelData::~ChannelData() deallocate(prevError); deallocate(unwrappedPhase); deallocate(envelope); + deallocate(interpolator); + deallocate(ms); deallocate(accumulator); deallocate(windowAccumulator); deallocate(fltbuf); diff --git a/src/StretcherChannelData.h b/src/StretcherChannelData.h index 93b4ce8..05f6cf4 100644 --- a/src/StretcherChannelData.h +++ b/src/StretcherChannelData.h @@ -111,6 +111,7 @@ public: float *accumulator; size_t accumulatorFill; float *windowAccumulator; + float *ms; // only used when mid-side processing float *interpolator; // only used when time-domain smoothing is on int interpolatorScale; diff --git a/src/StretcherProcess.cpp b/src/StretcherProcess.cpp index 05b9ddf..2bf152a 100644 --- a/src/StretcherProcess.cpp +++ b/src/StretcherProcess.cpp @@ -183,7 +183,6 @@ RubberBandStretcher::Impl::consumeChannel(size_t c, bool resampling = resampleBeforeStretching(); - float *ms = 0; const float *input = 0; bool useMidSide = ((m_options & OptionChannelsTogether) && @@ -214,9 +213,8 @@ RubberBandStretcher::Impl::consumeChannel(size_t c, #endif if (useMidSide) { - ms = (float *)alloca(samples * sizeof(float)); - prepareChannelMS(c, inputs, offset, samples, ms); - input = ms; + prepareChannelMS(c, inputs, offset, samples, cd.ms); + input = cd.ms; } else { input = inputs[c] + offset; } @@ -252,9 +250,8 @@ RubberBandStretcher::Impl::consumeChannel(size_t c, } else { if (useMidSide) { - ms = (float *)alloca(toWrite * sizeof(float)); - prepareChannelMS(c, inputs, offset, toWrite, ms); - input = ms; + prepareChannelMS(c, inputs, offset, toWrite, cd.ms); + input = cd.ms; } else { input = inputs[c] + offset; }