35 double acceleration = 0;
41 for (
framecnt_t outsample = 0; outsample < nframes; ++outsample) {
42 double const d =
phase[channel] + outsample * (
_speed + acceleration);
44 Sample fractional_phase_part = d - i;
45 if (fractional_phase_part >= 1.0) {
46 fractional_phase_part -= 1.0;
50 if (input && output) {
53 input[i] * (1.0f - fractional_phase_part) +
54 input[i+1] * fractional_phase_part;
58 double const distance =
phase[channel] + nframes * (
_speed + acceleration);
60 phase[channel] = distance - i;
71 double distance = 0.0;
79 distance =
phase[channel];
84 if (input && output) {
85 for (i = 0; i < nframes; ++i) {
95 if (input && output) {
99 if (floor (distance) == 0.0) {
103 inm1 = input[i] - (input[i+1] - input[i]);
108 for (
framecnt_t outsample = 0; outsample < nframes; ++outsample) {
110 float f = floor (distance);
111 float fractional_phase_part = distance -
f;
124 if (fractional_phase_part >= 1.0) {
125 fractional_phase_part -= 1.0;
133 output[outsample] = input[i] + 0.5f * fractional_phase_part * (input[i+1] - inm1 +
134 fractional_phase_part * (4.0f * input[i+1] + 2.0f * inm1 - 5.0f * input[i] - input[i+2] +
135 fractional_phase_part * (3.0f * (input[i] - input[i+1]) - inm1 + input[i+2])));
137 distance +=
_speed + acceleration;
142 phase[channel] = distance - floor(distance);
148 for (
framecnt_t outsample = 0; outsample < nframes; ++outsample) {
149 distance +=
_speed + acceleration;
160 assert(
phase.size() == 1);
179 for (
framecnt_t outsample = 0; outsample < nframes; ++outsample) {
180 distance +=
_speed + acceleration;
184 phase[0] = distance - floor(distance);
framecnt_t distance(framecnt_t nframes, bool roll=true)
std::vector< double > phase
framecnt_t interpolate(int channel, framecnt_t nframes, Sample *input, Sample *output)
framecnt_t interpolate(int channel, framecnt_t nframes, Sample *input, Sample *output)