/// <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 Import(Stream inputStream) { // Validate input if (inputStream == null) { throw new ArgumentNullException("inputStream"); } if (!inputStream.CanRead) { throw new ArgumentException("Stream must be readable.", "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.AddTrack(MidiParser.ParseToTrack(trackChunks[i].Data)); } return(sequence); }
/// <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> public void WriteHeader(Stream outputStream, int numTracks) { // Check parameters if (outputStream == null) { throw new ArgumentNullException("outputStream"); } if (!outputStream.CanWrite) { throw new ArgumentException("Can't write to stream.", "outputStream"); } if (numTracks < 1) { throw new ArgumentOutOfRangeException("numTracks", numTracks, "Sequences require at least 1 track."); } // Write out the main header for the sequence MThdChunkHeader mainHeader = new MThdChunkHeader(_format, numTracks, _division); mainHeader.Write(outputStream); }
/// <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> public void WriteHeader(Stream outputStream, int numTracks) { // Check parameters if (outputStream == null) throw new ArgumentNullException("outputStream"); if (!outputStream.CanWrite) throw new ArgumentException("Can't write to stream.", "outputStream"); if (numTracks < 1) throw new ArgumentOutOfRangeException("numTracks", numTracks, "Sequences require at least 1 track."); // Write out the main header for the sequence MThdChunkHeader mainHeader = new MThdChunkHeader(_format, numTracks, _division); mainHeader.Write(outputStream); }