delay xfades
This commit is contained in:
parent
27a1e4e5b0
commit
041b79c202
1 changed files with 14 additions and 4 deletions
|
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<size_t NPARAMS=46>
|
template<size_t NPARAMS=48>
|
||||||
class VerbFXAudioApp : public AudioAppBase<NPARAMS>
|
class VerbFXAudioApp : public AudioAppBase<NPARAMS>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
@ -154,6 +154,9 @@ public:
|
||||||
|
|
||||||
filterBankDelayXFade = smoothParams[45];
|
filterBankDelayXFade = smoothParams[45];
|
||||||
|
|
||||||
|
delayMorph = smoothParams[46];
|
||||||
|
delayBlend = smoothParams[47];
|
||||||
|
|
||||||
//XFADE
|
//XFADE
|
||||||
|
|
||||||
const float filterBankDelayFBLevel = sqrtf(filterBankDelayXFade);
|
const float filterBankDelayFBLevel = sqrtf(filterBankDelayXFade);
|
||||||
|
|
@ -174,7 +177,7 @@ public:
|
||||||
filterBankOut += filterBank6.bandpassChamberlain(filterBankIn, filterBankF6, filterBankRes6);
|
filterBankOut += filterBank6.bandpassChamberlain(filterBankIn, filterBankF6, filterBankRes6);
|
||||||
filterBankOut += filterBank7.bandpassChamberlain(filterBankIn, filterBankF7, filterBankRes7);
|
filterBankOut += filterBank7.bandpassChamberlain(filterBankIn, filterBankF7, filterBankRes7);
|
||||||
|
|
||||||
filterBankOut *= 0.5f;
|
filterBankOut *= 0.125f;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////// DELAYS
|
////////////// DELAYS
|
||||||
|
|
@ -189,7 +192,13 @@ public:
|
||||||
float delayed2 = enableShortDelay ? ddelay2.read(ddelayTime2) : 0.f;
|
float delayed2 = enableShortDelay ? ddelay2.read(ddelayTime2) : 0.f;
|
||||||
ddelay2.write(delayIn + (ddelayFeedback2 * delayed2));
|
ddelay2.write(delayIn + (ddelayFeedback2 * delayed2));
|
||||||
|
|
||||||
float delaySum = delayed + delayed1 + delayed2;
|
float a = fminf(delayMorph * 2.f, 1.f);
|
||||||
|
float b = fmaxf(delayMorph * 2.f - 1.f, 0.f);
|
||||||
|
constexpr float kEqualMix = 0.57735f; // 1/sqrt(3), constant-power equal mix
|
||||||
|
float w_short = kEqualMix + delayBlend * (sqrtf(1.f - a) - kEqualMix);
|
||||||
|
float w_medium = kEqualMix + delayBlend * (sqrtf(a) * sqrtf(1.f - b) - kEqualMix);
|
||||||
|
float w_long = kEqualMix + delayBlend * (sqrtf(a) * sqrtf(b) - kEqualMix);
|
||||||
|
float delaySum = (w_short * delayed2) + (w_medium * delayed1) + (w_long * delayed);
|
||||||
|
|
||||||
//////////////// VERB
|
//////////////// VERB
|
||||||
float verbIn = enableReverb ? filterBankOut : 0.f;
|
float verbIn = enableReverb ? filterBankOut : 0.f;
|
||||||
|
|
@ -226,7 +235,7 @@ public:
|
||||||
|
|
||||||
|
|
||||||
// Mix dry
|
// Mix dry
|
||||||
y = sqrtf(y * wetdry_mix_) + sqrtf(mix * (1.f - wetdry_mix_));
|
y = (y * sqrtf(wetdry_mix_)) + (mix * sqrtf(1.f - wetdry_mix_));
|
||||||
|
|
||||||
|
|
||||||
stereosample_t ret { y, y };
|
stereosample_t ret { y, y };
|
||||||
|
|
@ -344,6 +353,7 @@ protected:
|
||||||
float ddelayTime1{0}, ddelayFeedback1{0};
|
float ddelayTime1{0}, ddelayFeedback1{0};
|
||||||
float ddelayTime2{0}, ddelayFeedback2{0};
|
float ddelayTime2{0}, ddelayFeedback2{0};
|
||||||
float verbVsDelayLevel{0}, delayToVerbLevel{0}, filterBankDelayXFade{0};
|
float verbVsDelayLevel{0}, delayToVerbLevel{0}, filterBankDelayXFade{0};
|
||||||
|
float delayMorph{0.5f}, delayBlend{0.f};
|
||||||
|
|
||||||
OnePoleSmoother<kN_Params> smoother{150.f, kSampleRate};
|
OnePoleSmoother<kN_Params> smoother{150.f, kSampleRate};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue