Example #1
0
        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);
                    }
                }
        }
Example #2
0
 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);
 }