commit bbced4df34f4391d3be06864bb94e8461cf79957
parent a403e9a1d6788b2cf4b6372655526ccbc16b3725
Author: Christopher A. Oliver <caowasteland@gmail.com>
Date: Thu, 5 Nov 2015 19:51:12 -0500
Get cinterpolate to handle x bigger than len.
Diffstat:
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/src/Misc/Util.cpp b/src/Misc/Util.cpp
@@ -207,9 +207,10 @@ float interpolate(const float *data, size_t len, float pos)
float cinterpolate(const float *data, size_t len, float pos)
{
- const int l_pos = ((int)pos) % len,
- r_pos = (l_pos + 1) % len;
- const float leftness = pos - l_pos;
+ const unsigned int i_pos = pos,
+ l_pos = i_pos % len,
+ r_pos = l_pos + 1 < len ? l_pos + 1 : 0;
+ const float leftness = pos - i_pos;
return data[l_pos] * leftness + data[r_pos] * (1.0f - leftness);
}
diff --git a/src/Synth/OscilGen.cpp b/src/Synth/OscilGen.cpp
@@ -449,7 +449,7 @@ float OscilGen::userfunc(float x)
}
return cinterpolate(cachedbasefunc,
synth.oscilsize,
- synth.oscilsize * x + (synth.oscilsize - 1));
+ synth.oscilsize * (x + 1) - 1);
}
/*