summaryrefslogtreecommitdiff
path: root/libs/ardour/midi_clock_slave.cc
diff options
context:
space:
mode:
authorHans Baier <hansfbaier@googlemail.com>2008-08-07 04:03:17 +0000
committerHans Baier <hansfbaier@googlemail.com>2008-08-07 04:03:17 +0000
commit025f7a1c693149e84646993ab676d71a2202b1ce (patch)
tree3a044aedcfa13aa61607946c4ad6844947fd7fd0 /libs/ardour/midi_clock_slave.cc
parent9e677f9a9b4a9bee13656ea08466a9de9096038b (diff)
* enabled moving averages again... plays much nicer in a realtime setup
* disabled excessive tracing git-svn-id: svn://localhost/ardour2/branches/3.0@3668 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/midi_clock_slave.cc')
-rw-r--r--libs/ardour/midi_clock_slave.cc29
1 files changed, 25 insertions, 4 deletions
diff --git a/libs/ardour/midi_clock_slave.cc b/libs/ardour/midi_clock_slave.cc
index db33902fd3..f570b5406a 100644
--- a/libs/ardour/midi_clock_slave.cc
+++ b/libs/ardour/midi_clock_slave.cc
@@ -97,10 +97,11 @@ MIDIClock_Slave::update_midi_clock (Parser& parser)
midi_clock_frame += (long) (one_ppqn_in_frames)
+ session.worst_output_latency();
+ /*
std::cerr << "got MIDI Clock message at time " << now
<< " midi_clock_frame: " << midi_clock_frame
<< " one_ppqn_in_frames: " << one_ppqn_in_frames << std::endl;
-
+ */
if (first_midi_clock_frame == 0) {
first_midi_clock_frame = midi_clock_frame;
first_midi_clock_time = now;
@@ -204,9 +205,29 @@ MIDIClock_Slave::speed_and_position (float& speed, nframes_t& pos)
speed_now = (float) ((last.position - first_midi_clock_frame) / (double) (now - first_midi_clock_time));
}
- cerr << "speed_and_position: speed_now: " << speed_now ;
+ //cerr << "speed_and_position: speed_now: " << speed_now ;
- midi_clock_speed = speed_now;
+ accumulator[accumulator_index++] = speed_now;
+
+ if (accumulator_index >= accumulator_size) {
+ have_first_accumulated_speed = true;
+ accumulator_index = 0;
+ }
+
+ if (have_first_accumulated_speed) {
+ float total = 0;
+
+ for (int32_t i = 0; i < accumulator_size; ++i) {
+ total += accumulator[i];
+ }
+
+ midi_clock_speed = total / accumulator_size;
+
+ } else {
+
+ midi_clock_speed = speed_now;
+
+ }
if (midi_clock_speed == 0.0f) {
@@ -229,7 +250,7 @@ MIDIClock_Slave::speed_and_position (float& speed, nframes_t& pos)
speed = midi_clock_speed;
- cerr << " final speed: " << speed << " position: " << pos << endl;
+ //cerr << " final speed: " << speed << " position: " << pos << endl;
return true;
}