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