fix TempoMap::frame_at_tempo().
authornick_m <mainsbridge@gmail.com>
Sun, 26 Feb 2017 14:28:59 +0000 (01:28 +1100)
committerRobin Gareus <robin@gareus.org>
Mon, 27 Feb 2017 19:16:10 +0000 (20:16 +0100)
libs/ardour/tempo.cc

index e600382aa511a447bfe5573f86c1f9691af228dd..dbc0457f8a2b35d603307bc7b00f82929ea6de5b 100644 (file)
@@ -1807,17 +1807,20 @@ TempoMap::minute_at_tempo_locked (const Metrics& metrics, const Tempo& tempo) co
                                continue;
                        }
 
-                       const double t_bpm = t->note_types_per_minute();
 
-                       if (t_bpm == tempo_bpm) {
+
+                       if (t->note_types_per_minute() == tempo_bpm) {
                                return t->minute();
                        }
 
                        if (prev_t) {
                                const double prev_t_bpm = prev_t->note_types_per_minute();
+                               const double prev_t_end_bpm = prev_t->end_note_types_per_minute();
+                               if (prev_t_bpm > tempo_bpm && prev_t_end_bpm < tempo_bpm
+                                   || prev_t_bpm < tempo_bpm && prev_t_end_bpm > tempo_bpm
+                                   || prev_t_end_bpm == tempo_bpm) {
 
-                               if ((t_bpm > tempo_bpm && prev_t_bpm < tempo_bpm) || (t_bpm < tempo_bpm && prev_t_bpm > tempo_bpm)) {
-                                       return prev_t->minute_at_ntpm (prev_t->note_types_per_minute(), prev_t->pulse());
+                                       return prev_t->minute_at_ntpm (tempo_bpm, t->pulse());
                                }
                        }
                        prev_t = t;