static MidiTrack ReadTrack(MidiDataStreamReader reader)
{
var track = new MidiTrack();
// Chunk type.
if (new string (reader.ReadChars(4)) != "MTrk")
{
throw new System.FormatException("Can't find track chunk.");
}
// Chunk length.
var chunkEnd = reader.ReadBEInt32();
chunkEnd += reader.Offset;
// Read delta-time and event pairs.
byte ev = 0;
while (reader.Offset < chunkEnd)
{
// Delta time.
var delta = reader.ReadMultiByteValue();
// Event type.
if ((reader.PeekByte() & 0x80) != 0)
{
ev = reader.ReadByte();
}
if (ev == 0xff)
{
// 0xff: Meta event (unused).
reader.Advance(1);
reader.Advance(reader.ReadMultiByteValue());
}
else if (ev == 0xf0)
{
// 0xf0: SysEx (unused).
while (reader.ReadByte() != 0xf7)
{
}
}
else
{
// MIDI event
byte data1 = reader.ReadByte();
byte data2 = ((ev & 0xe0) == 0xc0) ? (byte)0 : reader.ReadByte();
//CHANGES HEREE______________________________________________________________________________________________
track.AddEvent(delta, new MidiEvent(ev, data1, data2, Time.time));
}
}
return(track);
}