From 7493a27a1f4e804fa9f4c8aadfb53162e31bcc30 Mon Sep 17 00:00:00 2001 From: nick_m Date: Fri, 4 Mar 2016 01:24:20 +1100 Subject: [PATCH] Tempo ramps - fix return of constant tempo, experimentally use _at_tempo() methods. --- libs/ardour/tempo.cc | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/libs/ardour/tempo.cc b/libs/ardour/tempo.cc index c263f37387..5b83f008d2 100644 --- a/libs/ardour/tempo.cc +++ b/libs/ardour/tempo.cc @@ -222,7 +222,7 @@ framepos_t TempoSection::frame_at_tempo (double bpm, framecnt_t frame_rate) const { if (_type == Constant) { - return 0; + return frame(); } return minute_to_frame (time_at_tick_tempo (bpm * BBT_Time::ticks_per_beat), frame_rate) + frame(); @@ -247,7 +247,7 @@ double TempoSection::beat_at_tempo (double bpm) const { if (_type == Constant) { - return 0; + return beat(); } return (tick_at_tick_tempo (bpm * BBT_Time::ticks_per_beat) / BBT_Time::ticks_per_beat) + beat(); @@ -1006,16 +1006,19 @@ TempoMap::imagine_new_order (TempoSection* section, const Tempo& bpm, const fram if (t == section) { /* we have already set the frame - set the beat */ prev_ts->set_c_func (prev_ts->compute_c_func (bpm.beats_per_minute(), frame, _frame_rate)); - section->set_beat (prev_ts->beat_at_frame (frame, _frame_rate)); + //section->set_beat (prev_ts->beat_at_frame (frame, _frame_rate)); + section->set_beat (prev_ts->beat_at_tempo (bpm.beats_per_minute())); prev_ts = t; continue; } if (t->position_lock_style() == MusicTime) { prev_ts->set_c_func_from_tempo_and_beat (t->beats_per_minute(), t->beat(), _frame_rate); - t->set_frame (prev_ts->frame_at_beat (t->beat(), _frame_rate)); + //t->set_frame (prev_ts->frame_at_beat (t->beat(), _frame_rate)); + t->set_frame (prev_ts->frame_at_tempo (t->beats_per_minute(), _frame_rate)); } else { prev_ts->set_c_func (prev_ts->compute_c_func (t->beats_per_minute(), t->frame(), _frame_rate)); - t->set_beat (prev_ts->beat_at_frame (t->frame(), _frame_rate)); + //t->set_beat (prev_ts->beat_at_frame (t->frame(), _frame_rate)); + t->set_beat (prev_ts->beat_at_tempo (t->beats_per_minute())); } } prev_ts = t; @@ -1467,18 +1470,22 @@ TempoMap::recompute_map (bool reassign_tempo_bbt, framepos_t end) if (t->position_lock_style() == AudioTime) { if (prev_ts->type() == TempoSection::Ramp) { prev_ts->set_c_func (prev_ts->compute_c_func (t->beats_per_minute(), t->frame(), _frame_rate)); - t->set_beat (prev_ts->beat_at_frame (t->frame(), _frame_rate)); + //t->set_beat (prev_ts->beat_at_frame (t->frame(), _frame_rate)); + t->set_beat (prev_ts->beat_at_tempo (t->beats_per_minute())); } else { prev_ts->set_c_func (0.0); - t->set_beat (prev_ts->beat_at_frame (t->frame(), _frame_rate)); + //t->set_beat (prev_ts->beat_at_frame (t->frame(), _frame_rate)); + t->set_beat (prev_ts->beat_at_tempo (t->beats_per_minute())); } - } else if (t->position_lock_style() == MusicTime) { + } else { if (prev_ts->type() == TempoSection::Ramp) { prev_ts->set_c_func_from_tempo_and_beat (t->beats_per_minute(), t->beat(), _frame_rate); - t->set_frame (prev_ts->frame_at_beat (t->beat(), _frame_rate)); + //t->set_frame (prev_ts->frame_at_beat (t->beat(), _frame_rate)); + t->set_frame (prev_ts->frame_at_tempo (t->beats_per_minute(), _frame_rate)); } else { prev_ts->set_c_func (0.0); - t->set_frame (prev_ts->frame_at_beat (t->beat(), _frame_rate)); + //t->set_frame (prev_ts->frame_at_beat (t->beat(), _frame_rate)); + t->set_frame (prev_ts->frame_at_tempo (t->beats_per_minute(), _frame_rate)); } } } @@ -1489,7 +1496,7 @@ TempoMap::recompute_map (bool reassign_tempo_bbt, framepos_t end) MeterSection* meter = 0; for (Metrics::const_iterator mi = metrics.begin(); mi != metrics.end(); ++mi) { - /* We now have the tempo map set. use it to set meter positions.*/ + /* Now we have the tempos mapped to position, set meter positions.*/ if ((meter = dynamic_cast (*mi)) != 0) { if (meter->position_lock_style() == AudioTime) { /* a frame based meter has to have a 1|1|0 bbt */