From e4dfd23d2ef173d4ba2f12ddf50b76c9b7b801fd Mon Sep 17 00:00:00 2001 From: nick_m Date: Thu, 24 Mar 2016 23:22:28 +1100 Subject: [PATCH] Tempo ramps - bbt_time() speedup, more meter dragging performance improvements. --- libs/ardour/tempo.cc | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/libs/ardour/tempo.cc b/libs/ardour/tempo.cc index a66b126d82..a91b2e91a5 100644 --- a/libs/ardour/tempo.cc +++ b/libs/ardour/tempo.cc @@ -1397,12 +1397,25 @@ TempoMap::recompute_meters (Metrics& metrics) if (meter->position_lock_style() == AudioTime) { pair 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())); + if (prev_m) { + const double pulse = prev_m->pulse() + (meter->beat() - prev_m->beat()) / prev_m->note_divisor(); + meter->set_pulse (pulse); + } else { + const double pulse = pulse_at_frame_locked (metrics, meter->frame()); + meter->set_pulse (pulse); + } } else { - 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); + if (prev_m) { + 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); + } else { + const double pulse = pulse_at_beat_locked (metrics, meter->beat()); + meter->set_frame (frame_at_pulse_locked (metrics, pulse)); + meter->set_pulse (pulse); + } } + prev_m = meter; } } @@ -1562,8 +1575,7 @@ TempoMap::bbt_time (framepos_t frame, BBT_Time& bbt) return; } Glib::Threads::RWLock::ReaderLock lm (lock); - frameoffset_t const frame_off = frame_offset_at (_metrics, frame); - double const beat = beat_at_pulse_locked (_metrics, pulse_at_frame_locked (_metrics, frame + frame_off)); + double const beat = beat_at_frame_locked (_metrics, frame); bbt = beats_to_bbt_locked (_metrics, beat); } @@ -2120,7 +2132,8 @@ TempoMap::solve_map (Metrics& imaginary, MeterSection* section, const Meter& mt, } else { pair 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())); + const double pulse = prev_ms->pulse() + (m->beat() - prev_ms->beat()) / prev_ms->note_divisor(); + m->set_pulse (pulse); } } prev_ms = m; @@ -2175,7 +2188,8 @@ TempoMap::solve_map (Metrics& imaginary, MeterSection* section, const Meter& mt, } else { pair 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())); + const double pulse = prev_ms->pulse() + (m->beat() - prev_ms->beat()) / prev_ms->note_divisor(); + m->set_pulse (pulse); } } prev_ms = m;