private static List<MidiEvent>[] StartAtPauseTime(List<MidiEvent>[] list, int pauseTime)
{
List<MidiEvent>[] newlist = new List<MidiEvent>[ list.Length];
for (int tracknum = 0; tracknum < list.Length; tracknum++) {
List<MidiEvent> events = list[tracknum];
List<MidiEvent> newevents = new List<MidiEvent>(events.Count);
newlist[tracknum] = newevents;
bool foundEventAfterPause = false;
foreach (MidiEvent mevent in events) {
if (mevent.StartTime < pauseTime) {
if (mevent.EventFlag == EventNoteOn ||
mevent.EventFlag == EventNoteOff) {
/* Skip NoteOn/NoteOff event */
}
else if (mevent.EventFlag == EventControlChange) {
mevent.DeltaTime = 0;
UpdateControlChange(newevents, mevent);
}
else {
mevent.DeltaTime = 0;
newevents.Add(mevent);
}
}
else if (!foundEventAfterPause) {
mevent.DeltaTime = (mevent.StartTime - pauseTime);
newevents.Add(mevent);
foundEventAfterPause = true;
}
else {
newevents.Add(mevent);
}
}
}
return newlist;
}