mirror of
https://codeberg.org/armin/chromaflock.git
synced 2026-09-01 04:10:47 +02:00
Fix delay plucking with interpolated read tap
This commit is contained in:
parent
c632bda92f
commit
d4db11b195
1 changed files with 12 additions and 7 deletions
|
|
@ -14,9 +14,9 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
void setParameters(float timeMs, float fb, float mx) {
|
void setParameters(float timeMs, float fb, float mx) {
|
||||||
timeSamples = static_cast<int>(timeMs * 0.001f * sampleRate);
|
timeSamplesF = timeMs * 0.001f * static_cast<float>(sampleRate);
|
||||||
int bufMax = static_cast<int>(bufferL.size()) - 1;
|
float bufMax = static_cast<float>(bufferL.size()) - 1.0f;
|
||||||
timeSamples = std::clamp(timeSamples, 1, bufMax);
|
timeSamplesF = std::clamp(timeSamplesF, 1.0f, bufMax);
|
||||||
feedback = std::clamp(fb, 0.0f, 0.95f);
|
feedback = std::clamp(fb, 0.0f, 0.95f);
|
||||||
mix = std::clamp(mx, 0.0f, 1.0f);
|
mix = std::clamp(mx, 0.0f, 1.0f);
|
||||||
}
|
}
|
||||||
|
|
@ -24,10 +24,15 @@ public:
|
||||||
void process(float& left, float& right) {
|
void process(float& left, float& right) {
|
||||||
int bufSize = static_cast<int>(bufferL.size());
|
int bufSize = static_cast<int>(bufferL.size());
|
||||||
|
|
||||||
int readPos = (writePos - timeSamples + bufSize) % bufSize;
|
float readPosF = static_cast<float>(writePos) - timeSamplesF;
|
||||||
|
while (readPosF < 0.0f) readPosF += static_cast<float>(bufSize);
|
||||||
|
|
||||||
float outL = bufferL[readPos];
|
int i0 = static_cast<int>(readPosF) % bufSize;
|
||||||
float outR = bufferR[readPos];
|
int i1 = (i0 + 1) % bufSize;
|
||||||
|
float frac = readPosF - std::floor(readPosF);
|
||||||
|
|
||||||
|
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;
|
bufferL[writePos] = left + outL * feedback;
|
||||||
bufferR[writePos] = right + outR * feedback;
|
bufferR[writePos] = right + outR * feedback;
|
||||||
|
|
@ -42,7 +47,7 @@ private:
|
||||||
std::vector<float> bufferL, bufferR;
|
std::vector<float> bufferL, bufferR;
|
||||||
int writePos = 0;
|
int writePos = 0;
|
||||||
double sampleRate = 44100;
|
double sampleRate = 44100;
|
||||||
int timeSamples = 8820;
|
float timeSamplesF = 8820.0f;
|
||||||
float feedback = 0.3f;
|
float feedback = 0.3f;
|
||||||
float mix = 0.25f;
|
float mix = 0.25f;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue