/// <summary> /// Parse all tracks to mididatalist /// </summary> /// <returns>The length (in bytes) of the track.</returns> public void ParseAll() { MidiDataList.Clear(); for (int i = 0; i < SmfFileHandle.NumberOfTracks; i++) { MidiDataList.CreateKey(i); } lock (ParseAllLock) { for (int TrackToParse = 0; TrackToParse < this.SmfFileHandle.NumberOfTracks; TrackToParse++) { ResetTiming(); this.selectedTrackNumber = TrackToParse; lock (this) { long delta = 0; int i = 0; while (i < SmfFileHandle.Tracks[TrackToParse].track.Length) { i = GetIntVar(TrackToParse, i, out delta); TicksPerQuarterNote += Convert.ToUInt64(delta); i = GetNTrackMessage(TrackToParse, i, Convert.ToInt32(delta)); } } } } // OnAfterTrackLoaded(EventArgs.Empty); // return SmfFileHandle.Tracks[SelectedTrackNumber].track.Length; }
void PARSER_MidiDataList(MidiMsgType t, int track, int offset, int imsg, byte bmsg, ulong ppq, int rse, bool isrse) { switch (t) { case MidiMsgType.MetaStr: midiDataList.AddV(SelectedTrackNumber, new MidiMetaMessage(MidiMsgType.MetaStr, ppq, imsg, GetMetaBString(offset))); break; case MidiMsgType.MetaInf: midiDataList.AddV(SelectedTrackNumber, new MidiMetaMessage(ppq, imsg, GetMetaData(offset))); break; case MidiMsgType.System: case MidiMsgType.SysCommon: // MetaHelpers.MetaNameFF( imsg ) if (imsg == 0xFF7F) { // { // Debug.Print("rse? {0} -----------sys---------------\n{1}",isrse ? 0 :1, SmfStringFormatter.byteToString(GetEventValue(offset))); midiDataList.AddV(SelectedTrackNumber, new MidiSysexMessage(ppq, imsg, GetMetaValue(offset))); } // } else if (imsg == 0xF0) { Debug.Print("0xF0 {0} {1}", isrse, GetEventValue(offset).StringifyHex()); midiDataList.AddV(SelectedTrackNumber, new MidiSysexMessage(ppq, imsg, GetEventValue(offset))); } break; default: if (isrse) { MidiDataList.AddV(SelectedTrackNumber, new MidiChannelMessage(ppq, rse, GetRseEventValue(offset))); } else { MidiDataList.AddV(SelectedTrackNumber, new MidiChannelMessage(ppq, rse, GetEventValue(offset))); } break; } }