From 486483366926e45c8236c26915dd417d8bb404dd Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Tue, 27 Aug 2013 20:55:15 +0200 Subject: fix vari-speed phase (when used for calculation only) and clarify an old comment. --- libs/ardour/interpolation.cc | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'libs/ardour/interpolation.cc') diff --git a/libs/ardour/interpolation.cc b/libs/ardour/interpolation.cc index fccc805cb0..bccaa45553 100644 --- a/libs/ardour/interpolation.cc +++ b/libs/ardour/interpolation.cc @@ -135,17 +135,18 @@ CubicInterpolation::interpolate (int channel, framecnt_t nframes, Sample *input, inm1 = input[i]; } - } else { - - /* not sure that this is ever utilized - it implies that one of the input/output buffers is missing */ + i = floor(distance); + phase[channel] = distance - floor(distance); + } else { + /* used to calculate play-distance with acceleration (silent roll) + * (use same algorithm as real playback for identical rounding/floor'ing) + */ for (framecnt_t outsample = 0; outsample < nframes; ++outsample) { distance += _speed + acceleration; } + i = floor(distance); } - i = floor(distance); - phase[channel] = distance - floor(distance); - return i; } -- cgit v1.2.3