X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fevoral%2Fsrc%2FCurve.cpp;h=f99a8075d5d4f5572e9aa232d092916910e9ab66;hb=c6e71a683e6a685ed55c35670c6b4bfd20e38b5f;hp=44fc48f7282c168d7f31f3d70a7fa7234089cea8;hpb=aaabaf5d3c8624f398809bb468e2b121a23abda0;p=ardour.git diff --git a/libs/evoral/src/Curve.cpp b/libs/evoral/src/Curve.cpp index 44fc48f728..f99a8075d5 100644 --- a/libs/evoral/src/Curve.cpp +++ b/libs/evoral/src/Curve.cpp @@ -302,14 +302,11 @@ Curve::_get_vector (double x0, double x1, float *vec, int32_t veclen) if (veclen > 1) { dx_num = hx - lx; dx_den = veclen - 1; - } - - if (veclen > 1) { for (int i = 0; i < veclen; ++i) { vec[i] = (lx * (m_num / m_den) + m_num * i * dx_num / (m_den * dx_den)) + c; } } else { - vec[0] = lx; + vec[0] = lx * (m_num / m_den) + c; } return; @@ -403,15 +400,13 @@ Curve::multipoint_eval (double x) double tdelta = x - before->when; double trange = after->when - before->when; - return before->value + (vdelta * (tdelta / trange)); - -#if 0 - double x2 = x * x; - ControlEvent* ev = *range.second; - - return = ev->coeff[0] + (ev->coeff[1] * x) + (ev->coeff[2] * x2) + (ev->coeff[3] * x2 * x); -#endif - + if (_list.interpolation() == ControlList::Curved && after->coeff) { + ControlEvent* ev = after; + double x2 = x * x; + return ev->coeff[0] + (ev->coeff[1] * x) + (ev->coeff[2] * x2) + (ev->coeff[3] * x2 * x); + } else { + return before->value + (vdelta * (tdelta / trange)); + } } /* x is a control point in the data */