zynaddsubfx

ZynAddSubFX open source synthesizer
Log | Files | Refs | Submodules | LICENSE

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:
Msrc/Misc/Util.cpp | 7++++---
Msrc/Synth/OscilGen.cpp | 2+-
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); } /*