diff --git a/DMX-2.0/MidiEventProvider.cs b/DMX-2.0/MidiEventProvider.cs index 8447add..cf807ad 100644 --- a/DMX-2.0/MidiEventProvider.cs +++ b/DMX-2.0/MidiEventProvider.cs @@ -33,6 +33,8 @@ namespace DMX2 readonly uint page; readonly int midiEvCode; + readonly midiEventSender evsender; + public bool Bound { get { return bound; @@ -60,7 +62,7 @@ namespace DMX2 } } - public internalEvent (string _id, uint _page, int _evHCode) + public internalEvent (string _id, uint _page, int _evHCode, midiEventSender _evsender) { internalName = _id; page = _page; @@ -78,23 +80,36 @@ namespace DMX2 } } - AlsaSeqLib.snd_seq_event_t storedevent; + public void SendEvent () + { + if(evsender !=null) + evsender.SendEvent (lastknownvalue); + } + + } + + abstract class midiEventSender { + public abstract void SendEvent (int value); + } + + class midiCCEvSender : midiEventSender { + public override void SendEvent (int value) + { - public AlsaSeqLib.snd_seq_event_t StoredEvent { - get { - return storedevent; - } - set { - storedevent = value; - } } } - abstract class feedbackinfo : IFeedbackInfo + class midiPBEvSender : midiEventSender { + public override void SendEvent (int value) + { + + } + } + + class feedbackinfo : IFeedbackInfo { MidiEventProvider prov; readonly internalEvent iev; - protected AlsaSeqLib.snd_seq_event_t ev; public feedbackinfo (MidiEventProvider _prov, internalEvent _iev) { @@ -102,26 +117,14 @@ namespace DMX2 iev = _iev; } - protected abstract bool UpdateEvent (byte data); - #region IFeedbackInfo implementation bool IFeedbackInfo.FeedBack (byte data) { - bool update = UpdateEvent (data); - iev.StoredEvent = ev; - - iev.LastKnownValue = data; - if (!update) - return true; - if (prov.CurrentPage == iev.Page || iev.Page == 0) { - prov.SendEvent (ev); - foreach (int srcid in prov.feedbacksources) { - prov.lastValueOfSrc [CombineHash (srcid, iev.MidiEvCode)] = data; - } + iev.SendEvent(); } return true; @@ -129,47 +132,6 @@ namespace DMX2 #endregion } - class ctrlfeedbackinfo : feedbackinfo - { - public ctrlfeedbackinfo (MidiEventProvider _prov, internalEvent _iev, byte channel, uint param) - :base(_prov,_iev) - { - ev = new AlsaSeqLib.snd_seq_event_t (); - ev.data_ev_ctrl.channel = channel; - ev.data_ev_ctrl.param = param; - ev.type = AlsaSeqLib.snd_seq_event_type_t.SND_SEQ_EVENT_CONTROLLER; - } - - protected override bool UpdateEvent (byte data) - { - int newvalue = (int)data * 127 / 255; - if (newvalue == ev.data_ev_ctrl.value) - return false; - ev.data_ev_ctrl.value = newvalue; - return true; - } - } - - class pitchbendfeedbackinfo : feedbackinfo - { - public pitchbendfeedbackinfo (MidiEventProvider _prov, internalEvent _iev, byte channel) - :base(_prov,_iev) - { - ev = new AlsaSeqLib.snd_seq_event_t (); - ev.data_ev_ctrl.channel = channel; - ev.type = AlsaSeqLib.snd_seq_event_type_t.SND_SEQ_EVENT_PITCHBEND; - } - - protected override bool UpdateEvent (byte data) - { - int newvalue = (int)data * 14000 / 255 - 7000; - if (newvalue == ev.data_ev_ctrl.value) - return false; - ev.data_ev_ctrl.value = newvalue; - return true; - } - } - public class MidiDev { string name; @@ -438,7 +400,7 @@ namespace DMX2 { foreach (var ievent in eventlist.Values) { if (ievent.Page == page) { - SendEvent (ievent.StoredEvent); + ievent.SendEvent(); foreach (int src in feedbacksources) { int lnvk = CombineHash (src, ievent.MidiEvCode); if (ievent.LastKnownValue != -1) @@ -467,7 +429,7 @@ namespace DMX2 return false; uint _page = uint.Parse (res.Groups ["page"].Value); int _evHC = res.Groups ["id"].Value.GetHashCode (); - eventlist.Add (eventId, new internalEvent (eventId, _page, _evHC)); + eventlist.Add (eventId, new internalEvent (eventId, _page, _evHC,null)); } eventlist [eventId].Bound = true; @@ -631,7 +593,7 @@ namespace DMX2 // Creation de l'objet interne si innexistant if (!eventlist.ContainsKey (id)) - eventlist.Add (id, new internalEvent (id, page, evHC)); + eventlist.Add (id, new internalEvent (id, page, evHC,null)); levent = eventlist [id]; //Dernier Evenement recu conserve pour menu if (!lastValueOfSrc.ContainsKey (lnvk)) @@ -651,8 +613,6 @@ namespace DMX2 } lastValueOfSrc [lnvk] = (byte)value; - - eventlist [id].StoredEvent = evS; eventlist [id].LastKnownValue = (byte)value; } @@ -708,7 +668,9 @@ namespace DMX2 if (!eventlist.ContainsKey (eventId)) return null; - var res = regexCtrlEventID.Match (eventId); + return new feedbackinfo (this, eventlist [eventId]); + + /*var res = regexCtrlEventID.Match (eventId); if (res.Success) { byte chan = byte.Parse (res.Groups ["chan"].Value); uint param = uint.Parse (res.Groups ["param"].Value); @@ -719,7 +681,7 @@ namespace DMX2 byte chan = byte.Parse (res.Groups ["chan"].Value); return new pitchbendfeedbackinfo (this, eventlist [eventId], chan); } - return null; + return null;*/ }