Loosen locking gradually as the ratio increases
This commit is contained in:
@@ -66,10 +66,10 @@ public:
|
|||||||
|
|
||||||
struct Guidance {
|
struct Guidance {
|
||||||
FftBand fftBands[3];
|
FftBand fftBands[3];
|
||||||
PhaseLockBand phaseLockBands[5];
|
PhaseLockBand phaseLockBands[4];
|
||||||
Range kick;
|
Range kick;
|
||||||
Range preKick;
|
Range preKick;
|
||||||
Range highPercussive;
|
Range highUnlocked;
|
||||||
Range phaseReset;
|
Range phaseReset;
|
||||||
Range channelLock;
|
Range channelLock;
|
||||||
};
|
};
|
||||||
@@ -152,7 +152,7 @@ public:
|
|||||||
|
|
||||||
guidance.kick.present = false;
|
guidance.kick.present = false;
|
||||||
guidance.preKick.present = false;
|
guidance.preKick.present = false;
|
||||||
guidance.highPercussive.present = false;
|
guidance.highUnlocked.present = false;
|
||||||
guidance.phaseReset.present = false;
|
guidance.phaseReset.present = false;
|
||||||
|
|
||||||
double nyquist = m_parameters.sampleRate / 2.0;
|
double nyquist = m_parameters.sampleRate / 2.0;
|
||||||
@@ -168,7 +168,9 @@ public:
|
|||||||
guidance.fftBands[1].f1 = m_minHigher;
|
guidance.fftBands[1].f1 = m_minHigher;
|
||||||
guidance.fftBands[2].f0 = m_minHigher;
|
guidance.fftBands[2].f0 = m_minHigher;
|
||||||
guidance.fftBands[2].f1 = nyquist;
|
guidance.fftBands[2].f1 = nyquist;
|
||||||
for (int i = 0; i < 5; ++i) {
|
for (int i = 0; i <
|
||||||
|
sizeof(guidance.phaseLockBands) /
|
||||||
|
sizeof(guidance.phaseLockBands[0]); ++i) {
|
||||||
guidance.phaseLockBands[i].p = 0;
|
guidance.phaseLockBands[i].p = 0;
|
||||||
guidance.phaseLockBands[i].beta = 1.0;
|
guidance.phaseLockBands[i].beta = 1.0;
|
||||||
guidance.phaseLockBands[i].f0 = nyquist;
|
guidance.phaseLockBands[i].f0 = nyquist;
|
||||||
@@ -214,9 +216,9 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (segmentation.residualAbove > segmentation.percussiveAbove) {
|
if (segmentation.residualAbove > segmentation.percussiveAbove) {
|
||||||
guidance.highPercussive.present = true;
|
guidance.highUnlocked.present = true;
|
||||||
guidance.highPercussive.f0 = segmentation.percussiveAbove;
|
guidance.highUnlocked.f0 = segmentation.percussiveAbove;
|
||||||
guidance.highPercussive.f1 = segmentation.residualAbove;
|
guidance.highUnlocked.f1 = segmentation.residualAbove;
|
||||||
}
|
}
|
||||||
|
|
||||||
double bigGap = 4000.0;
|
double bigGap = 4000.0;
|
||||||
@@ -283,12 +285,33 @@ public:
|
|||||||
guidance.phaseLockBands[3].beta = betaFor(10000.0, ratio);
|
guidance.phaseLockBands[3].beta = betaFor(10000.0, ratio);
|
||||||
guidance.phaseLockBands[3].f0 = higher;
|
guidance.phaseLockBands[3].f0 = higher;
|
||||||
guidance.phaseLockBands[3].f1 = nyquist;
|
guidance.phaseLockBands[3].f1 = nyquist;
|
||||||
|
|
||||||
|
if (outhop > 256) {
|
||||||
|
guidance.phaseLockBands[3].p = 3;
|
||||||
|
}
|
||||||
|
|
||||||
// Currently unused
|
if (ratio > 2.0) {
|
||||||
guidance.phaseLockBands[4].p = 0;
|
|
||||||
guidance.phaseLockBands[4].beta = 1.0;
|
// For very long stretches, diffuse is better than
|
||||||
guidance.phaseLockBands[4].f0 = nyquist;
|
// metallic - gradually unlock the higher frequencies and
|
||||||
guidance.phaseLockBands[4].f1 = nyquist;
|
// reduce the channel lock
|
||||||
|
|
||||||
|
double channelLimit = guidance.channelLock.f1;
|
||||||
|
channelLimit = channelLimit - (ratio - 2.0) * 150.0;
|
||||||
|
if (channelLimit < 100.0) channelLimit = 100.0;
|
||||||
|
guidance.channelLock.f1 = channelLimit;
|
||||||
|
|
||||||
|
double unlockedAbove = 12000.0 - (ratio - 2.0) * 400.0;
|
||||||
|
if (unlockedAbove < channelLimit) unlockedAbove = channelLimit;
|
||||||
|
if (guidance.highUnlocked.present) {
|
||||||
|
guidance.highUnlocked.f0 = std::min(guidance.highUnlocked.f0,
|
||||||
|
unlockedAbove);
|
||||||
|
} else {
|
||||||
|
guidance.highUnlocked.f0 = unlockedAbove;
|
||||||
|
}
|
||||||
|
guidance.highUnlocked.f1 = nyquist;
|
||||||
|
guidance.highUnlocked.present = true;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
std::ostringstream str;
|
std::ostringstream str;
|
||||||
|
|||||||
@@ -190,7 +190,7 @@ public:
|
|||||||
ph = m_unlocked[c][i];
|
ph = m_unlocked[c][i];
|
||||||
} else if (inRange(f, g->phaseReset) || inRange(f, g->kick)) {
|
} else if (inRange(f, g->phaseReset) || inRange(f, g->kick)) {
|
||||||
ph = phase[c][i];
|
ph = phase[c][i];
|
||||||
} else if (inRange (f, g->highPercussive)) {
|
} else if (inRange (f, g->highUnlocked)) {
|
||||||
ph = m_unlocked[c][i];
|
ph = m_unlocked[c][i];
|
||||||
} else {
|
} else {
|
||||||
int peak = m_currentPeaks[c][i];
|
int peak = m_currentPeaks[c][i];
|
||||||
|
|||||||
Reference in New Issue
Block a user