comparison Agent.cpp @ 16:33d0b18b2509

Allocate Agents separately on the heap and make AgentList contain pointers only (much quicker)
author Chris Cannam
date Wed, 12 Oct 2011 17:01:57 +0100
parents 887c629502a9
children 55969570044e
comparison
equal deleted inserted replaced
15:887c629502a9 16:33d0b18b2509
79 err = e.time - beatTime - beats * beatInterval; 79 err = e.time - beatTime - beats * beatInterval;
80 #ifdef DEBUG_BEATROOT 80 #ifdef DEBUG_BEATROOT
81 std::cerr << "Ag#" << idNumber << ": time " << e.time << ", err " << err << " for beats " << beats << std::endl; 81 std::cerr << "Ag#" << idNumber << ": time " << e.time << ", err " << err << " for beats " << beats << std::endl;
82 #endif 82 #endif
83 if ((beats > 0) && (-preMargin <= err) && (err <= postMargin)) { 83 if ((beats > 0) && (-preMargin <= err) && (err <= postMargin)) {
84 if (fabs(err) > innerMargin) { // Create new agent that skips this 84 if (fabs(err) > innerMargin) {
85 #ifdef DEBUG_BEATROOT 85 #ifdef DEBUG_BEATROOT
86 std::cerr << "Ag#" << idNumber << ": creating another new agent" << std::endl; 86 std::cerr << "Ag#" << idNumber << ": creating another new agent" << std::endl;
87 #endif 87 #endif
88 a.add(clone()); // event (avoids large phase jump) 88 // Create new agent that skips this event (avoids
89 // large phase jump)
90 a.add(clone());
89 } 91 }
90 accept(e, err, (int)beats); 92 accept(e, err, (int)beats);
91 return true; 93 return true;
92 } 94 }
93 } 95 }
100 EventList::iterator ei = events.begin(); 102 EventList::iterator ei = events.begin();
101 if (ei != events.end()) { 103 if (ei != events.end()) {
102 EventList::iterator ni = ei; 104 EventList::iterator ni = ei;
103 prevBeat = (++ni)->time; 105 prevBeat = (++ni)->time;
104 } 106 }
105 for ( ; ei != events.end(); ) { 107 while (ei != events.end()) {
106 EventList::iterator ni = ei; 108 EventList::iterator ni = ei;
107 nextBeat = (++ni)->time; 109 ++ni;
110 if (ni == events.end()) break;
111 nextBeat = ni->time;
108 beats = nearbyint((nextBeat - prevBeat) / beatInterval - 0.01); //prefer slow 112 beats = nearbyint((nextBeat - prevBeat) / beatInterval - 0.01); //prefer slow
109 currentInterval = (nextBeat - prevBeat) / beats; 113 currentInterval = (nextBeat - prevBeat) / beats;
110 for ( ; (nextBeat > start) && (beats > 1.5); beats--) { 114 for ( ; (nextBeat > start) && (beats > 1.5); beats--) {
111 prevBeat += currentInterval; 115 prevBeat += currentInterval;
112 events.insert(ni, BeatTracker::newBeat(prevBeat, 0)); 116 events.insert(ni, BeatTracker::newBeat(prevBeat, 0));