void ReadMThdAndTracks(string fileName) { int i = 0; bool hasError = false; using (var STREAM = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) using (var READER = new BinaryReader(STREAM)) { ReadMThd(READER); Tracks = new MTrk[NumberOfTracks]; for (i = 0; i < NumberOfTracks; i++) { if (READER.BaseStream.Position >= READER.BaseStream.Length) { OverrideNumberOfTracks((short)i); FileIsIncomplete = true; hasError = true; } if (hasError) { continue; } Tracks[i] = new MTrk(READER); } } }
internal long Write(MidiMessageCollection model, System.IO.BinaryWriter writer) { Tracks = new MTrk[model.NTracks]; for (int n = 0; n < model.NTracks; n++) { Tracks[n] = new MTrk(model[n]); } writer.Write(new char[] { 'M', 'T', 'h', 'd' }); writer.Write(6.GetBytesEndian()); writer.Write(Format.GetBytesEndian(true)); writer.Write(model.NTracks.GetBytesEndian()); writer.Write(Division.GetBytesEndian(true)); for (int n = 0; n < Tracks.Length; n++) { Tracks[n].Write(writer); } return(writer.BaseStream.Position); }