public void WriteTo(IWriteable s)
{
// build track data first
var trackData = ByteBuffer.Empty();
var current = FirstEvent;
int count = 0;
while (current != null)
{
current.WriteTo(trackData);
current = current.NextEvent;
count++;
}
// magic number "MTrk" (0x4D54726B)
var b = new byte[] { 0x4D, 0x54, 0x72, 0x6B };
s.Write(b, 0, b.Length);
// size as integer
var data = trackData.ToArray();
var l = data.Length;
b = new[]{
(byte)((l >> 24) & 0xFF), (byte)((l >> 16) & 0xFF),
(byte)((l >> 8) & 0xFF), (byte)((l >> 0) & 0xFF)
};
s.Write(b, 0, b.Length);
s.Write(data, 0, data.Length);
}