Example #1
0
        private void readMessages(BinaryReaderBE binaryReader)
        {
            long curLength = (long)binaryReader.BaseStream.Position + length;

            while (binaryReader.BaseStream.Position < curLength)
            {
                messages.Add(new VLV(binaryReader));

                //TODO implement running status

                byte status = binaryReader.ReadByte();

                switch ((Keys)(status & 0xF0))
                {
                case Keys.NoteOff: messages.Add(new NoteOff(binaryReader, status & 0x0F)); break;

                case Keys.NoteOn: messages.Add(new NoteOn(binaryReader, status & 0x0F)); break;

                case Keys.AfterTouch: messages.Add(new AfterTouch(binaryReader, status & 0x0F)); break;

                case Keys.Controller: messages.Add(new Controller(binaryReader, status & 0x0F)); break;

                case Keys.Patch: messages.Add(new Patch(binaryReader, status & 0x0F)); break;

                case Keys.Pressure: messages.Add(new Pressure(binaryReader, status & 0x0F)); break;

                case Keys.PitchBend: messages.Add(new PitchBend(binaryReader, status & 0x0F)); break;

                case Keys.Meta: messages.Add(new Meta(binaryReader)); break;

                default: throw new NotImplementedException("Unknown message: " + status);
                }
            }
        }
Example #2
0
        internal Track(BinaryReaderBE binaryReader)
        {
            messages   = new List <Message>();
            curMessage = 0;

            checkMtrk(binaryReader.ReadBytes(4));

            length = binaryReader.ReadInt32();

            readMessages(binaryReader);
        }
Example #3
0
        private void load(BinaryReaderBE binaryReader)
        {
            tracks = new List <Track>();

            checkMthd(binaryReader.ReadBytes(4));

            if (binaryReader.ReadInt32() != 6)
            {
                throw new FormatException("Wrong header size");
            }

            type = binaryReader.ReadInt16();
            short trackCount = binaryReader.ReadInt16();

            PPQ = binaryReader.ReadInt16();

            for (int i = 0; i < trackCount; i++)
            {
                tracks.Add(new Track(binaryReader));
            }
        }
Example #4
0
 internal Midi(BinaryReaderBE binaryReader)
 {
     load(binaryReader);
 }