summaryrefslogtreecommitdiff
path: root/libs/ardour/interpolation.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-09-03 17:41:49 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2013-09-03 17:41:49 -0400
commitd074bc586e494d7dd83d415a487195a477095a4f (patch)
tree8748ae1d85ef796449dcd30cff6ba6f2196a4704 /libs/ardour/interpolation.cc
parent6bcdf4f0f106d0b83ed7f221f546c132585e19e7 (diff)
parent91b027a4a0c0e90398b9c6dbb5611b2acc4f2f8e (diff)
Merge branch 'master' into audioengine
Diffstat (limited to 'libs/ardour/interpolation.cc')
-rw-r--r--libs/ardour/interpolation.cc13
1 files changed, 7 insertions, 6 deletions
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;
}