コード例 #1
0
ファイル: MidiSequence.cs プロジェクト: huming2207/ghgame
        /// <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);
        }
コード例 #2
0
ファイル: MidiSequence.cs プロジェクト: huming2207/ghgame
        /// <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);
        }
コード例 #3
0
ファイル: MidiSequence.cs プロジェクト: rsenn/s2midi
        /// <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);
        }