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); } } }
internal Track(BinaryReaderBE binaryReader) { messages = new List <Message>(); curMessage = 0; checkMtrk(binaryReader.ReadBytes(4)); length = binaryReader.ReadInt32(); readMessages(binaryReader); }
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)); } }
internal Midi(BinaryReaderBE binaryReader) { load(binaryReader); }