28 #include <CLAM/MIDIDataTypes.hxx>
51 TempoImpl(Song* song = 0,Track* track = 0)
56 void Init(Song* song = 0,Track* track = 0)
61 if (mSong && mTrack==0)
63 for (
int i=0;i<mSong->Tracks();i++)
65 Track* t = mSong->GetTrack(i);
66 if (t->HasTempoEvents())
76 mIterator = mTrack->Begin();
88 return (
Milliseconds)((double)t*480.0/(
double)mSong->GetTicksPerQ());
94 while (mIterator!=mTrack->End())
96 const Event &ev = **mIterator;
97 if ( ev[0]==0xFF && ev[1]==0x51)
107 if (mIterator==mTrack->End() || ((*mIterator)->GetTicks()>t))
109 mIterator = mTrack->Begin();
115 std::list<Event*>::const_iterator prevIterator = mIterator;
121 while (mIterator!=mTrack->End())
123 const Event &ev = **mIterator;
124 if ( ev[0]==0xFF && ev[1]==0x51 )
131 MetaEvent* ev = (MetaEvent*) *mIterator;
137 ( (
TInt64(ev->GetTicks() - mLastTicks) *
TInt64(mUsPerQ)) /
145 mLastTicks = ev->GetTicks();
147 prevIterator = mIterator;
154 mIterator = prevIterator;
167 mImpl =
new TempoImpl(song,track);
177 mImpl->Init(song,track);
182 return mImpl->TicksToTime(t);