예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
        }