Add ping-pong delay, fix preset save extension, align reverb/scale UI

This commit is contained in:
Armin 2026-07-16 00:49:09 +02:00
commit af87193643
5 changed files with 129 additions and 1110 deletions

View file

@ -13,12 +13,13 @@ public:
writePos = 0;
}
void setParameters(float timeMs, float fb, float mx) {
void setParameters(float timeMs, float fb, float mx, bool pingpong = false) {
timeSamplesF = timeMs * 0.001f * static_cast<float>(sampleRate);
float bufMax = static_cast<float>(bufferL.size()) - 1.0f;
timeSamplesF = std::clamp(timeSamplesF, 1.0f, bufMax);
feedback = std::clamp(fb, 0.0f, 0.95f);
mix = std::clamp(mx, 0.0f, 1.0f);
pingPong = pingpong;
}
void process(float& left, float& right) {
@ -34,8 +35,15 @@ public:
float outL = bufferL[i0] * (1.0f - frac) + bufferL[i1] * frac;
float outR = bufferR[i0] * (1.0f - frac) + bufferR[i1] * frac;
bufferL[writePos] = left + outL * feedback;
bufferR[writePos] = right + outR * feedback;
if (pingPong) {
// Classic ping-pong: each channel's echo bounces to the opposite
// channel on the next repeat, so the taps alternate L/R.
bufferL[writePos] = left + outR * feedback;
bufferR[writePos] = right + outL * feedback;
} else {
bufferL[writePos] = left + outL * feedback;
bufferR[writePos] = right + outR * feedback;
}
writePos = (writePos + 1) % bufSize;
@ -50,4 +58,5 @@ private:
float timeSamplesF = 8820.0f;
float feedback = 0.3f;
float mix = 0.25f;
bool pingPong = false;
};