Mercurial > hg > beatroot-vamp
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()