public IEnumerable <Midi.MidiMessage> GetCurrMessages(int channel, Midi.MidiMessage.Type type) { float currTime = 0f; if (audio.volume != 0.0f) { currTime = audio.time; } else { return(new List <Midi.MidiMessage>()); } if (lastTime > currTime) { Refill(); } lastTime = currTime; List <Midi.MidiMessage> targets = new List <Assets.Midi.MidiMessage>(); List <Midi.MidiMessage> afterConsume = new List <Assets.Midi.MidiMessage>(); foreach (var msg in midiMessages) { if (Math.Abs(msg.Time - currTime) < delta && audio.isPlaying && msg.Channel == channel && msg.MessageType == type) { targets.Add(msg); } else { afterConsume.Add(msg); } } midiMessages = afterConsume; return(targets); }
public ClipMidiEvent(Params ps) : base(ps) { this.clipName = ps.GetString("ClipName"); this.channel = ps.GetInt("Channel"); this.type = (Midi.MidiMessage.Type)Enum.Parse(typeof(Midi.MidiMessage.Type), ps.GetString("MessageType")); this.clip = MonoHelper.MonoFindClip(clipName); this.tracker = clip.GetTracker(); }