MidiDriver.KnobDelegate CreateControlChangeDelegate(int ccNumber, FieldInfo portField) { MidiDriver.KnobDelegate knobDelegate = (MidiChannel channel, int knobNumber, float knobValue) => { if (channel.Equals(this.MidiChannel)) { if (knobNumber.Equals(ccNumber)) { portField.SetValue(this, knobValue); Debug.Log("cc: " + ccNumber + ", " + knobValue); } } }; ControlChangeDelegates.Add(knobDelegate); return(knobDelegate); }
public override void Apply() { MidiDriver.KnobDelegate action = (MidiChannel ch, int knob, float val) => { if ((ch == channel || channel == MidiChannel.All) && knob == knobNumber) { onKnob.Invoke(val); } }; info = new MidiCcEventInfo() { knobName = knobName, channel = channel, knobNumber = knobNumber, methods = Enumerable.Range(0, onKnob.GetPersistentEventCount()) .Select(idx => onKnob.GetPersistentTarget(idx).ToString() + "." + onKnob.GetPersistentMethodName(idx)) .ToArray() }; MidiController.AddCcAction(action, info); }
public static void AddCcAction(MidiDriver.KnobDelegate knobAction, MidiCcEventInfo info) { MidiMaster.knobDelegate += knobAction; Instance.eventList.Add(info); Instance.eventList.OrderBy(b => b.channel.ToString() + b.knobNumber).ToList(); }