/// <summary>Writes a MIDI file header out to the stream.</summary> /// <param name="outputStream">The output stream to which the header should be written.</param> /// <param name="numTracks">The number of tracks that will be a part of this sequence.</param> /// <remarks>This functionality is automatically performed during a Save.</remarks> private void WriteHeader(Stream outputStream, int numTracks) { // Check parameters Validate.NonNull("outputStream", outputStream); Validate.InRange("numTracks", numTracks, 1, int.MaxValue); // Write out the main header for the sequence MThdChunkHeader mainHeader = new MThdChunkHeader(Format, numTracks, m_division); mainHeader.Write(outputStream); }
/// <summary>Reads a MIDI stream into a new MidiSequence.</summary> /// <param name="inputStream">The stream containing the MIDI data.</param> /// <returns>A MidiSequence containing the parsed MIDI data.</returns> public static MidiSequence Open(Stream inputStream) { Validate.NonNull("inputStream", inputStream); // Read in the main MIDI header MThdChunkHeader mainHeader = MThdChunkHeader.Read(inputStream); // Read in all of the tracks MTrkChunkHeader[] trackChunks = new MTrkChunkHeader[mainHeader.NumberOfTracks]; for (int i = 0; i < mainHeader.NumberOfTracks; i++) { trackChunks[i] = MTrkChunkHeader.Read(inputStream); } // Create the MIDI sequence MidiSequence sequence = new MidiSequence(mainHeader.Format, mainHeader.Division); for (int i = 0; i < mainHeader.NumberOfTracks; i++) { sequence.Tracks.Add(MidiParser.ParseToTrack(trackChunks[i].Data)); } return(sequence); }