re-adjust computation of non-beat aligned tempo change
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 6 Jan 2012 22:50:34 +0000 (22:50 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Fri, 6 Jan 2012 22:50:34 +0000 (22:50 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@11179 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/ardour/tempo.cc

index 5e694b1541a23ea9a154ef69c66c471a6e5bab39..5ad947ed68089593fff51a36a0bd07f376541804 100644 (file)
@@ -830,6 +830,8 @@ TempoMap::recompute_map (bool reassign_tempo_bbt, framepos_t end)
        }
 
        _extend_map (tempo, meter, next_metric, current, current_frame, end);
+
+       dump (cerr);
 }
 
 void
@@ -939,8 +941,15 @@ TempoMap::_extend_map (TempoSection* tempo, MeterSection* meter,
 
                                                /* set tempo section location based on offset from last beat */
 
-                                               double bar_offset_in_beats = (ts->bar_offset() * meter->divisions_per_bar()) - 1;
-                                               bar_offset_in_beats -= current.beats;
+                                               double bar_offset_in_beats = 1 + (ts->bar_offset() * meter->divisions_per_bar());
+
+                                               /* we've already advanced
+                                                * current.beats, but we want
+                                                * the previous beat's value
+                                                */
+
+                                               bar_offset_in_beats -= current.beats - 1;
+
                                                tempo->set_frame (current_frame + (bar_offset_in_beats * beat_frames));
 
                                                /* advance to the location of the new (adjusted) beat */