示例#1
0
        /// <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;
        }
示例#2
0
        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;
            }
        }