Never phase reset on silence in side channel, now that such resets are carried across

This commit is contained in:
Chris Cannam
2023-03-24 17:51:44 +00:00
parent 21b968c0c5
commit ba9fe26dcd
2 changed files with 13 additions and 1 deletions

View File

@@ -208,6 +208,7 @@ public:
int unityCount, int unityCount,
bool realtime, bool realtime,
bool tighterChannelLock, bool tighterChannelLock,
bool resetOnSilence,
Guidance &guidance) const { Guidance &guidance) const {
Profiler profiler("Guide::updateGuidance"); Profiler profiler("Guide::updateGuidance");
@@ -282,7 +283,7 @@ public:
// the band ranges as well - in normal multi-window mode we // the band ranges as well - in normal multi-window mode we
// still have to do that, but we should do these first // still have to do that, but we should do these first
if (meanMagnitude < 1.0e-6) { if (resetOnSilence && meanMagnitude < 1.0e-6) {
updateForSilence(guidance); updateForSilence(guidance);
return; return;
} }

View File

@@ -1304,6 +1304,15 @@ R3Stretcher::analyseChannel(int c, int inhop, int prevInhop, int prevOuthop)
double magMean = v_mean(classifyScale->mag.data() + 1, classify/2); double magMean = v_mean(classifyScale->mag.data() + 1, classify/2);
bool resetOnSilence = true;
if (useMidSide() && c == 1) {
// Do not phase reset on silence in the side channel - the
// reset is propagated across to the mid channel, giving
// constant resets for e.g. mono material in a stereo
// configuration
resetOnSilence = false;
}
if (m_useReadahead) { if (m_useReadahead) {
m_guide.updateGuidance(ratio, m_guide.updateGuidance(ratio,
prevOuthop, prevOuthop,
@@ -1317,6 +1326,7 @@ R3Stretcher::analyseChannel(int c, int inhop, int prevInhop, int prevOuthop)
m_unityCount, m_unityCount,
isRealTime(), isRealTime(),
tighterChannelLock, tighterChannelLock,
resetOnSilence,
cd->guidance); cd->guidance);
} else { } else {
m_guide.updateGuidance(ratio, m_guide.updateGuidance(ratio,
@@ -1331,6 +1341,7 @@ R3Stretcher::analyseChannel(int c, int inhop, int prevInhop, int prevOuthop)
m_unityCount, m_unityCount,
isRealTime(), isRealTime(),
tighterChannelLock, tighterChannelLock,
resetOnSilence,
cd->guidance); cd->guidance);
} }