Tempo rmps - amend last commit, speeding up dragging of audio-locked meters quite...
authornick_m <mainsbridge@gmail.com>
Thu, 24 Mar 2016 11:17:59 +0000 (22:17 +1100)
committernick_m <mainsbridge@gmail.com>
Fri, 27 May 2016 13:38:12 +0000 (23:38 +1000)
libs/ardour/tempo.cc

index 36cf1af73fc2a0d063ec36c610c3ef9a827b7f8a..a66b126d821ca6583bcab6eeca0b45a0dafd64d8 100644 (file)
@@ -1397,10 +1397,12 @@ TempoMap::recompute_meters (Metrics& metrics)
                        if (meter->position_lock_style() == AudioTime) {
                                pair<double, BBT_Time> bt = make_pair (accumulated_beats, BBT_Time (accumulated_bars + 1, 1, 0));
                                meter->set_beat (bt);
+                               meter->set_pulse (pulse_at_frame_locked (metrics, meter->frame()));
                        } else {
-                               meter->set_frame (frame_at_pulse_locked (metrics, prev_m->pulse() + (meter->beat() - prev_m->beat()) / prev_m->note_divisor()));
+                               const double pulse = prev_m->pulse() + (meter->beat() - prev_m->beat()) / prev_m->note_divisor();
+                               meter->set_frame (frame_at_pulse_locked (metrics, pulse));
+                               meter->set_pulse (pulse);
                        }
-                       meter->set_pulse (pulse_at_frame_locked (metrics, meter->frame()));
                        prev_m = meter;
                }
        }
@@ -2112,12 +2114,14 @@ TempoMap::solve_map (Metrics& imaginary, MeterSection* section, const Meter& mt,
                        }
                        if (prev_ms) {
                                if (m->position_lock_style() == MusicTime) {
-                                       m->set_frame (frame_at_pulse_locked (imaginary, prev_ms->pulse() + (m->beat() - prev_ms->beat()) / prev_ms->note_divisor()));
+                                       const double pulse = prev_ms->pulse() + (m->beat() - prev_ms->beat()) / prev_ms->note_divisor();
+                                       m->set_frame (frame_at_pulse_locked (imaginary, pulse));
+                                       m->set_pulse (pulse);
                                } else {
                                        pair<double, BBT_Time> b_bbt = make_pair (accumulated_beats, BBT_Time (accumulated_bars + 1, 1, 0));
                                        m->set_beat (b_bbt);
+                                       m->set_pulse (pulse_at_frame_locked (imaginary, m->frame()));
                                }
-                               m->set_pulse (pulse_at_frame_locked (imaginary, m->frame()));
                        }
                        prev_ms = m;
                }
@@ -2165,12 +2169,14 @@ TempoMap::solve_map (Metrics& imaginary, MeterSection* section, const Meter& mt,
                        }
                        if (prev_ms) {
                                if (m->position_lock_style() == MusicTime) {
-                                       m->set_frame (frame_at_pulse_locked (imaginary, prev_ms->pulse() + (m->beat() - prev_ms->beat()) / prev_ms->note_divisor()));
+                                       const double pulse = prev_ms->pulse() + (m->beat() - prev_ms->beat()) / prev_ms->note_divisor();
+                                       m->set_frame (frame_at_pulse_locked (imaginary, pulse));
+                                       m->set_pulse (pulse);
                                } else {
                                        pair<double, BBT_Time> b_bbt = make_pair (accumulated_beats, BBT_Time (accumulated_bars + 1, 1, 0));
                                        m->set_beat (b_bbt);
+                                       m->set_pulse (pulse_at_frame_locked (imaginary, m->frame()));
                                }
-                               m->set_pulse (pulse_at_frame_locked (imaginary, m->frame()));
                        }
                        prev_ms = m;
                }