//指定したイベントの前のイベントを得る public MIDIEvent getPrevEvent(MIDIEvent eve) { if (eve == null || eve.BeforeIndex == null) { return(null); } return(Event[(int)eve.BeforeIndex]); }
//指定したイベントの次のイベントを得る public MIDIEvent getNextEvent(MIDIEvent eve) { if (eve == null || eve.AfterIndex == null) { return(null); } return(Event[(int)eve.AfterIndex]); }
/// <summary> /// 指定されたイベントの後ろにイベントを挿入する /// </summary> /// <param name="TargetEvent">このイベントの後ろに新たに入る</param> /// <param name="Step">Step値</param> /// <param name="EventType">イベントタイプ</param> /// <param name="MIDImessageLst">MIDIメッセージ</param> /// <returns>新たに挿入したイベント</returns> public MIDIEvent insertSpEvent(MIDIEvent TargetEvent, int Step, MIDISpEventType EventType, byte[][] MIDImessageLst) { //if (MIDImessageLst == null) return null; MIDIEvent eve = new MIDIEvent(); eve.EventType = MIDIEventType.MetaSequencerSpecific; eve.MIDIMessage = new byte[1] { (byte)EventType }; eve.MIDIMessageLst = MIDImessageLst; eve.Step = Step; insertEve(TargetEvent, Step, eve); return(eve); }
/// <summary> /// 指定されたイベントの後ろにイベントを挿入する /// </summary> /// <param name="TargetEvent">このイベントの後ろに新たに入る</param> /// <param name="Step">Step値</param> /// <param name="EventType">イベントタイプ</param> /// <param name="MIDImessage">MIDIメッセージ(Chは0固定であること)</param> /// <returns>新たに挿入したイベント</returns> public MIDIEvent insertEvent(MIDIEvent TargetEvent, int Step, MIDIEventType EventType, byte[] MIDImessage) { if (MIDImessage == null) { return(null); } MIDIEvent eve = new MIDIEvent(); eve.EventType = EventType; eve.MIDIMessage = MIDImessage; eve.MIDIMessageLst = null; eve.Step = Step; insertEve(TargetEvent, Step, eve); return(eve); }
//指定したイベントをメモリから消去する(removeEventに比べ低速) public bool clearEvent(MIDIEvent eve) { if (eve == null) { return(false); } MIDIEvent pEvent = getPrevEvent(eve); MIDIEvent nEvent = getNextEvent(eve); if (pEvent != null) { pEvent.AfterIndex = (nEvent == null) ? null : (int?)nEvent.Number; } if (nEvent != null) { nEvent.BeforeIndex = (pEvent == null) ? null : (int?)pEvent.Number; } pEvent.Step += eve.Step; this.eCounter--; this.eNumber--; int num = eve.Number; this.Event.Remove(eve); foreach (MIDIEvent evt in this.Event) { if (evt.Number >= num) { evt.Number--; } if (evt.AfterIndex >= num) { evt.AfterIndex--; } if (evt.BeforeIndex >= num) { evt.BeforeIndex--; } } return(true); }
//指定したイベントを除外する(メモリには残る) public bool removeEvent(MIDIEvent eve) { if (eve == null) { return(false); } MIDIEvent pEvent = getPrevEvent(eve); MIDIEvent nEvent = getNextEvent(eve); if (pEvent != null) { pEvent.AfterIndex = (nEvent == null) ? null : (int?)nEvent.Number; } if (nEvent != null) { nEvent.BeforeIndex = (pEvent == null) ? null : (int?)pEvent.Number; } pEvent.Step += eve.Step; this.eCounter--; return(true); }
/// <summary> /// Tickを考慮せずに最後のイベントの後ろに追加する。 /// </summary> /// <param name="Tick"></param> /// <param name="EventType"></param> /// <param name="MIDImessage"></param> public void addEvent(int Step, MIDIEventType EventType, byte[] MIDImessage) { if (MIDImessage == null) { return; } MIDIEvent eve = new MIDIEvent(); eve.EventType = EventType; eve.MIDIMessage = MIDImessage; eve.MIDIMessageLst = null; eve.Step = Step; MIDIEvent lastEvent = this.getEndEvent(); if (lastEvent == null)//初めのイベント { eve.AfterIndex = null; eve.BeforeIndex = null; eve.Number = this.eNumber; this.Event.Add(eve); this.eStartIndex = 0; this.eEndIndex = 0; this.eCounter = 1; this.eNumber++; return; } eve.BeforeIndex = lastEvent.Number; eve.AfterIndex = null; eve.Number = this.eNumber; this.eEndIndex = this.eNumber; this.Event.Add(eve); this.eCounter++; this.eNumber++; lastEvent.AfterIndex = eve.Number; }
private void insertEve(MIDIEvent TargetEvent, int Step, MIDIEvent eve) { //イベントリストを生成 if (this.Event == null) { this.Event = new List <MIDIEvent>(); } if (TargetEvent == null || this.Event.Count == 0 || this.eStartIndex == null)//初めのイベント { eve.AfterIndex = null; eve.BeforeIndex = null; eve.Number = this.eNumber; this.Event.Add(eve); this.eStartIndex = 0; this.eEndIndex = 0; this.eCounter = 1; this.eNumber++; return; } eve.BeforeIndex = TargetEvent.Number; eve.AfterIndex = TargetEvent.AfterIndex; eve.Number = this.eNumber; TargetEvent.AfterIndex = eve.Number; this.Event.Add(eve); if (eve.AfterIndex == null) { this.eEndIndex = this.eNumber; } else { TargetEvent = getNextEvent(eve); TargetEvent.BeforeIndex = eve.Number; } this.eCounter++; this.eNumber++; }