{
public:
void EnterBlock();
- void SaveTime();
- void RestoreTime();
+ int GetLastTime();
+ void SetTime(int t);
void UpdateTime(int relativeTime);
void PushEvent(int relativeTime, const MIDI::MIDIEvent::EventType& ev);
void SortEvents();
std::vector<AbsoluteMIDIEvent> m_Events;
int m_BaseTimeForCurrentBlock = 0;
int m_LastEventTime = 0;
- int m_PrevLastEventTime = 0;
};
class IIR2MIDICompiler
m_BaseTimeForCurrentBlock = m_LastEventTime;
}
-void TrackCompilerContext::SaveTime()
+int TrackCompilerContext::GetLastTime()
{
- m_PrevLastEventTime = m_LastEventTime;
+ return m_LastEventTime;
}
-void TrackCompilerContext::RestoreTime()
+void TrackCompilerContext::SetTime(int t)
{
- m_LastEventTime = m_PrevLastEventTime;
+ m_LastEventTime = t;
+ m_BaseTimeForCurrentBlock = t;
}
void TrackCompilerContext::UpdateTime(int relativeTime)
+#include <algorithm>
#include <exception>
+#include <vector>
#include <boost/variant.hpp>
{
CheckForUnprocessedAttributes(ir.Attributes);
+ int lastTime = 0;
+
for (auto&& i : ir.Tracks)
{
CheckForUnprocessedAttributes(i.Attributes);
EnsureTrackInitialized(i.Number);
- GetTrackContext(i.Number).SaveTime();
+ lastTime = std::max(GetTrackContext(i.Number).GetLastTime(), lastTime);
}
for (auto&& i : ir.Tracks)
{
- GetTrackContext(i.Number).RestoreTime();
+ GetTrackContext(i.Number).SetTime(lastTime);
for (auto&& j : i.Items)
{