M src/finer/PhaseAdvance.h +4 -0
@@ 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)) {
M src/finer/R3Stretcher.cpp +3 -6
@@ 819,9 819,7 @@ R3Stretcher::retrieve(float *const *outp
}
}
- 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 *outp
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);
}
M src/finer/R3Stretcher.h +6 -0
@@ 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;