|
- #pragma once
-
- #include "util/math.hpp"
-
-
- namespace rack {
-
- // Pre-made minBLEP samples in minBLEP.cpp
- extern const float minblep_16_32[];
-
-
- template<int ZERO_CROSSINGS>
- struct MinBLEP {
- float buf[2*ZERO_CROSSINGS] = {};
- int pos = 0;
- const float *minblep;
- int oversample;
-
- /** Places a discontinuity with magnitude dx at -1 < p <= 0 relative to the current frame */
- void jump(float p, float dx) {
- if (p <= -1 || 0 < p)
- return;
- for (int j = 0; j < 2*ZERO_CROSSINGS; j++) {
- float minblepIndex = ((float)j - p) * oversample;
- int index = (pos + j) % (2*ZERO_CROSSINGS);
- buf[index] += dx * (-1.0 + interpolateLinear(minblep, minblepIndex));
- }
- }
- float shift() {
- float v = buf[pos];
- buf[pos] = 0.0;
- pos = (pos + 1) % (2*ZERO_CROSSINGS);
- return v;
- }
- };
-
- } // namespace rack
|