diff Agent.cpp @ 13:0d4048bfadbb

Fixes to beat insertion in Agent. We get plausible results now, but there's probably quite a lot still to do.
author Chris Cannam
date Thu, 06 Oct 2011 18:37:50 +0100
parents 59520cd6abac
children 887c629502a9
line wrap: on
line diff
--- a/Agent.cpp	Thu Oct 06 15:21:03 2011 +0100
+++ b/Agent.cpp	Thu Oct 06 18:37:50 2011 +0100
@@ -75,21 +75,19 @@
     double prevBeat = 0, nextBeat, currentInterval, beats;
     EventList::iterator ei = events.begin();
     if (ei != events.end()) {
-	++ei;
-	prevBeat = ei->time;
-	--ei;
+        EventList::iterator ni = ei;
+	prevBeat = (++ni)->time;
     }
-    for ( ; ei != events.end(); ++ei) {
-	++ei;
-	nextBeat = ei->time;
-	--ei; // so as to insert before nextBeat
+    for ( ; ei != events.end(); ) {
+        EventList::iterator ni = ei;
+	nextBeat = (++ni)->time;
 	beats = nearbyint((nextBeat - prevBeat) / beatInterval - 0.01); //prefer slow
 	currentInterval = (nextBeat - prevBeat) / beats;
 	for ( ; (nextBeat > start) && (beats > 1.5); beats--) {
 	    prevBeat += currentInterval;
-            events.insert(ei, BeatTracker::newBeat(prevBeat, 0));
-            ++ei;
+            events.insert(ni, BeatTracker::newBeat(prevBeat, 0));
 	}
 	prevBeat = nextBeat;
+        ei = ni;
     }
 } // fillBeats()