private static int GetTrackLength(List<MidiEvent> events)
{
int len = 0;
byte[] buf = new byte[1024];
foreach (MidiEvent mevent in events) {
len += VarlenToBytes(mevent.DeltaTime, buf, 0);
len += 1; /* for eventflag */
switch (mevent.EventFlag) {
case EventNoteOn: len += 2; break;
case EventNoteOff: len += 2; break;
case EventKeyPressure: len += 2; break;
case EventControlChange: len += 2; break;
case EventProgramChange: len += 1; break;
case EventChannelPressure: len += 1; break;
case EventPitchBend: len += 2; break;
case SysexEvent1:
case SysexEvent2:
len += VarlenToBytes(mevent.Metalength, buf, 0);
len += mevent.Metalength;
break;
case MetaEvent:
len += 1;
len += VarlenToBytes(mevent.Metalength, buf, 0);
len += mevent.Metalength;
break;
default: break;
}
}
return len;
}