public override void Evaluate(double CurrentTime) { base.Evaluate(CurrentTime); if (FMidiScore == null) { return; } List <TLBaseKeyFrame> activeNotes = new List <TLBaseKeyFrame>(); foreach (TLMidiSlice ms in FOutputSlices) { activeNotes.AddRange(ms.KeyFrames.FindAll(delegate(TLBaseKeyFrame mk) { return(mk.Time <= CurrentTime && CurrentTime < (mk as TLMidiKeyFrame).End); })); } for (int i = 0; i < 128; i++) { TLMidiKeyFrame m = activeNotes.Find(delegate(TLBaseKeyFrame mk) { return((mk as TLMidiKeyFrame).Note == i); }) as TLMidiKeyFrame; if (m == null) { FChannelOut.SetValue(i, 0); FVelocityOut.SetValue(i, 0); } else { FChannelOut.SetValue(i, m.Channel); FVelocityOut.SetValue(i, m.Velocity); } } }
private TLBaseKeyFrame AddKeyFrame(double Start, double End, int Track, int Channel, int Note, int Velocity) { //called via configpinchanged and gui-doubleclick float sliceheight = FPin.Height / FPin.SliceCount; float slicetop = FPin.Top + FSliceIndex * sliceheight; TLMidiKeyFrame k = new TLMidiKeyFrame(FPin.Transformer, Track, Channel, Note, Velocity, Start, End, FMinNote, FMaxNote, slicetop, sliceheight); FKeyFrames.Add(k); return(k); }