comparison 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
comparison
equal deleted inserted replaced
12:59520cd6abac 13:0d4048bfadbb
73 73
74 void Agent::fillBeats(double start) { 74 void Agent::fillBeats(double start) {
75 double prevBeat = 0, nextBeat, currentInterval, beats; 75 double prevBeat = 0, nextBeat, currentInterval, beats;
76 EventList::iterator ei = events.begin(); 76 EventList::iterator ei = events.begin();
77 if (ei != events.end()) { 77 if (ei != events.end()) {
78 ++ei; 78 EventList::iterator ni = ei;
79 prevBeat = ei->time; 79 prevBeat = (++ni)->time;
80 --ei;
81 } 80 }
82 for ( ; ei != events.end(); ++ei) { 81 for ( ; ei != events.end(); ) {
83 ++ei; 82 EventList::iterator ni = ei;
84 nextBeat = ei->time; 83 nextBeat = (++ni)->time;
85 --ei; // so as to insert before nextBeat
86 beats = nearbyint((nextBeat - prevBeat) / beatInterval - 0.01); //prefer slow 84 beats = nearbyint((nextBeat - prevBeat) / beatInterval - 0.01); //prefer slow
87 currentInterval = (nextBeat - prevBeat) / beats; 85 currentInterval = (nextBeat - prevBeat) / beats;
88 for ( ; (nextBeat > start) && (beats > 1.5); beats--) { 86 for ( ; (nextBeat > start) && (beats > 1.5); beats--) {
89 prevBeat += currentInterval; 87 prevBeat += currentInterval;
90 events.insert(ei, BeatTracker::newBeat(prevBeat, 0)); 88 events.insert(ni, BeatTracker::newBeat(prevBeat, 0));
91 ++ei;
92 } 89 }
93 prevBeat = nextBeat; 90 prevBeat = nextBeat;
91 ei = ni;
94 } 92 }
95 } // fillBeats() 93 } // fillBeats()