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