diff --git a/src/finer/PhaseAdvance.h b/src/finer/PhaseAdvance.h index f5a6496..1c1384f 100644 --- a/src/finer/PhaseAdvance.h +++ b/src/finer/PhaseAdvance.h @@ -94,6 +94,7 @@ public: const process_t *const *prevMag, const Guide::Configuration &configuration, const Guide::Guidance *const *guidance, + bool usingMidSide, int inhop, int outhop) { @@ -197,6 +198,9 @@ public: process_t ph = 0.0; if (inRange(f, g->phaseReset) || inRange(f, g->kick)) { ph = phase[c][i]; + } else if (usingMidSide && channels == 2 && + c == 0 && inRange(f, guidance[1]->phaseReset)) { + ph = phase[c][i]; } else if (inhop == outhop) { ph = m_unlocked[c][i]; } else if (inRange (f, g->highUnlocked)) { diff --git a/src/finer/R3Stretcher.cpp b/src/finer/R3Stretcher.cpp index a4e0945..406133a 100644 --- a/src/finer/R3Stretcher.cpp +++ b/src/finer/R3Stretcher.cpp @@ -819,9 +819,7 @@ R3Stretcher::retrieve(float *const *output, size_t samples) const } } - bool useMidSide = (m_parameters.channels == 2); //!!! - - if (useMidSide) { + if (useMidSide()) { for (int i = 0; i < got; ++i) { float m = output[0][i]; float s = output[1][i]; @@ -838,9 +836,7 @@ R3Stretcher::retrieve(float *const *output, size_t samples) const void R3Stretcher::prepareInput(const float *const *input, int ix, int n) { - bool useMidSide = (m_parameters.channels == 2); //!!! - - if (useMidSide) { + if (useMidSide()) { auto &c0 = m_channelData.at(0)->mixdown; auto &c1 = m_channelData.at(1)->mixdown; for (int i = 0; i < n; ++i) { @@ -971,6 +967,7 @@ R3Stretcher::consume() m_channelAssembly.prevMag.data(), m_guideConfiguration, m_channelAssembly.guidance.data(), + useMidSide(), m_prevInhop, m_prevOuthop); } diff --git a/src/finer/R3Stretcher.h b/src/finer/R3Stretcher.h index 57a3187..88660f1 100644 --- a/src/finer/R3Stretcher.h +++ b/src/finer/R3Stretcher.h @@ -472,6 +472,12 @@ protected: } } + bool useMidSide() const { + return m_parameters.channels == 2 && + (m_parameters.options & + RubberBandStretcher::OptionChannelsTogether); + } + bool isSingleWindowed() const { return m_parameters.options & RubberBandStretcher::OptionWindowShort;