From 9fb78d091de6abcf155e73728b15ea3c311e124e Mon Sep 17 00:00:00 2001 From: nick_m Date: Thu, 5 May 2016 13:49:01 +1000 Subject: [PATCH] Tempo ramps - correct fix for adding/replacing meters. --- libs/ardour/tempo.cc | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/libs/ardour/tempo.cc b/libs/ardour/tempo.cc index 8625d85eaf..a5149bbb23 100644 --- a/libs/ardour/tempo.cc +++ b/libs/ardour/tempo.cc @@ -1095,7 +1095,6 @@ TempoMap::add_meter_locked (const Meter& meter, double beat, const BBT_Time& whe const double pulse = pulse_at_beat_locked (_metrics, beat); MeterSection* new_meter = new MeterSection (pulse, beat, where, meter.divisions_per_bar(), meter.note_divisor()); - new_meter->set_frame (frame_at_pulse_locked (_metrics, pulse)); do_insert (new_meter); @@ -1109,17 +1108,17 @@ TempoMap::add_meter_locked (const Meter& meter, double beat, const BBT_Time& whe MeterSection* TempoMap::add_meter_locked (const Meter& meter, framepos_t frame, double beat, const Timecode::BBT_Time& where, bool recompute) { + /* add meter-locked tempo */ + TempoSection* t = add_tempo_locked (tempo_at_locked (_metrics, frame), frame, true, TempoSection::Ramp); + if (t) { + t->set_locked_to_meter (true); + } + MeterSection* new_meter = new MeterSection (frame, beat, where, meter.divisions_per_bar(), meter.note_divisor()); - TempoSection* t = 0; - double pulse = pulse_at_frame_locked (_metrics, frame); - new_meter->set_pulse (pulse); + new_meter->set_pulse (pulse_at_frame_locked (_metrics, frame)); do_insert (new_meter); - /* add meter-locked tempo */ - t = add_tempo_locked (tempo_at_locked (_metrics, frame), frame, true, TempoSection::Ramp); - t->set_locked_to_meter (true); - if (recompute) { solve_map (_metrics, new_meter, frame); } @@ -2263,7 +2262,7 @@ TempoMap::solve_map (Metrics& imaginary, MeterSection* section, const BBT_Time& for (Metrics::iterator i = imaginary.begin(); i != imaginary.end(); ++i) { MeterSection* m; if ((m = dynamic_cast (*i)) != 0) { - if (m->bbt().bars == when.bars) { + if (m != section && m->bbt().bars == when.bars) { return false; } } @@ -2359,6 +2358,7 @@ TempoMap::solve_map (Metrics& imaginary, MeterSection* section, const BBT_Time& MetricSectionSorter cmp; imaginary.sort (cmp); + if (section->position_lock_style() == AudioTime) { /* we're setting the pulse */ section->set_position_lock_style (MusicTime);