summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour/interpolation.h
diff options
context:
space:
mode:
authorHans Baier <hansfbaier@googlemail.com>2009-06-23 14:53:37 +0000
committerHans Baier <hansfbaier@googlemail.com>2009-06-23 14:53:37 +0000
commit26410407010e64dd6c00ffa17fc6bcdb7cf5168e (patch)
tree462be452724a4a4d251f8773178c108492f5ecb5 /libs/ardour/ardour/interpolation.h
parent417309d6d40e486e7a4757715b67780617a9c248 (diff)
interpolation.h / audio_diskstream.cc: make varispeed sound well again, by replacing the code by the original implementation for later comparison and step-by-step refactoring
git-svn-id: svn://localhost/ardour2/branches/3.0@5260 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/ardour/interpolation.h')
-rw-r--r--libs/ardour/ardour/interpolation.h28
1 files changed, 17 insertions, 11 deletions
diff --git a/libs/ardour/ardour/interpolation.h b/libs/ardour/ardour/interpolation.h
index a2945ffc2b..e398171d2b 100644
--- a/libs/ardour/ardour/interpolation.h
+++ b/libs/ardour/ardour/interpolation.h
@@ -40,25 +40,31 @@ class FixedPointLinearInterpolation : public Interpolation {
std::vector<uint64_t> last_phase;
- // Fixed point is just an integer with an implied scaling factor.
- // In 40.24 the scaling factor is 2^24 = 16777216,
- // so a value of 10*2^24 (in integer space) is equivalent to 10.0.
- //
- // The advantage is that addition and modulus [like x = (x + y) % 2^40]
- // have no rounding errors and no drift, and just require a single integer add.
- // (swh)
-
- static const int64_t fractional_part_mask = 0xFFFFFF;
- static const Sample binary_scaling_factor = 16777216.0f;
+ // Fixed point is just an integer with an implied scaling factor.
+ // In 40.24 the scaling factor is 2^24 = 16777216,
+ // so a value of 10*2^24 (in integer space) is equivalent to 10.0.
+ //
+ // The advantage is that addition and modulus [like x = (x + y) % 2^40]
+ // have no rounding errors and no drift, and just require a single integer add.
+ // (swh)
+
+ static const int64_t fractional_part_mask = 0xFFFFFF;
+ static const Sample binary_scaling_factor = 16777216.0f;
public:
- FixedPointLinearInterpolation () : phi (FIXPOINT_ONE), target_phi (FIXPOINT_ONE) {}
+
+ FixedPointLinearInterpolation () : phi (FIXPOINT_ONE), target_phi (FIXPOINT_ONE) {}
void set_speed (double new_speed) {
target_phi = (uint64_t) (FIXPOINT_ONE * fabs(new_speed));
phi = target_phi;
}
+ uint64_t get_phi() { return phi; }
+ uint64_t get_target_phi() { return target_phi; }
+ uint64_t get_last_phase() { assert(last_phase.size()); return last_phase[0]; }
+ void set_last_phase(uint64_t phase) { assert(last_phase.size()); last_phase[0] = phase; }
+
void add_channel_to (int input_buffer_size, int output_buffer_size);
void remove_channel_from ();