mirror of
https://codeberg.org/armin/chromaflock.git
synced 2026-09-01 04:10:47 +02:00
Add ping-pong delay, fix preset save extension, align reverb/scale UI
This commit is contained in:
parent
d4db11b195
commit
af87193643
5 changed files with 129 additions and 1110 deletions
|
|
@ -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;
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue