diff --git a/src/StretchCalculator.cpp b/src/StretchCalculator.cpp index 2e0616f..a10f8d9 100644 --- a/src/StretchCalculator.cpp +++ b/src/StretchCalculator.cpp @@ -404,6 +404,10 @@ StretchCalculator::reset() { m_prevDf = 0; m_divergence = 0; + m_recovery = 0; + m_prevRatio = 1.0; + m_transientAmnesty = 0; + m_keyFrameMap.clear(); } std::vector diff --git a/src/StretcherImpl.cpp b/src/StretcherImpl.cpp index 9d2e1ec..51cc87d 100644 --- a/src/StretcherImpl.cpp +++ b/src/StretcherImpl.cpp @@ -242,7 +242,7 @@ RubberBandStretcher::Impl::reset() m_emergencyScavenger.scavenge(); if (m_stretchCalculator) { - m_stretchCalculator->setKeyFrameMap(std::map()); + m_stretchCalculator->reset(); } for (size_t c = 0; c < m_channels; ++c) { diff --git a/src/dsp/Resampler.cpp b/src/dsp/Resampler.cpp index 5e718d5..d2e560e 100644 --- a/src/dsp/Resampler.cpp +++ b/src/dsp/Resampler.cpp @@ -1033,6 +1033,8 @@ D_Speex::resampleInterleaved(const float *const R__ in, void D_Speex::reset() { + m_lastratio = -1.0; // force reset of ratio + m_initial = true; speex_resampler_reset_mem(m_resampler); } diff --git a/src/speex/resample.c b/src/speex/resample.c index 6ee8a53..2b60cef 100644 --- a/src/speex/resample.c +++ b/src/speex/resample.c @@ -1236,6 +1236,12 @@ int speex_resampler_reset_mem(SpeexResamplerState *st) st->mem[i] = 0; } + for (i = 0; i < st->nb_channels; i++) { + st->last_sample[i] = 0; + st->magic_samples[i] = 0; + st->samp_frac_num[i] = 0; + } + return RESAMPLER_ERR_SUCCESS; }