En cours : Passage a 14 bits / feedback
This commit is contained in:
parent
4494e5420d
commit
3803a830da
1 changed files with 42 additions and 3 deletions
|
|
@ -67,6 +67,7 @@ namespace DMX2
|
|||
internalName = _id;
|
||||
page = _page;
|
||||
midiEvCode = _evHCode;
|
||||
evsender = _evsender;
|
||||
}
|
||||
|
||||
int lastknownvalue = -1;
|
||||
|
|
@ -93,8 +94,31 @@ namespace DMX2
|
|||
}
|
||||
|
||||
class midiCCEvSender : midiEventSender {
|
||||
readonly MidiEventProvider prov;
|
||||
|
||||
AlsaSeqLib.snd_seq_event_t ev;
|
||||
AlsaSeqLib.snd_seq_event_t ev2;
|
||||
|
||||
public midiCCEvSender (MidiEventProvider _prov, byte _chan, uint _param){
|
||||
prov = _prov;
|
||||
ev = new AlsaSeqLib.snd_seq_event_t();
|
||||
ev.type = AlsaSeqLib.snd_seq_event_type_t.SND_SEQ_EVENT_CONTROLLER;
|
||||
ev.data_ev_ctrl.channel = _chan;
|
||||
ev.data_ev_ctrl.param = _param;
|
||||
ev2 = ev;
|
||||
ev2.data_ev_ctrl.param -= 32;
|
||||
}
|
||||
public override void SendEvent (int value)
|
||||
{
|
||||
if (prov.Fourteenbits && ev2.data_ev_ctrl.param <32 ) {
|
||||
ev2.data_ev_ctrl.value = value >> 7;
|
||||
ev.data_ev_ctrl.value = value & 0xFF;
|
||||
prov.SendEvent (ev2);
|
||||
prov.SendEvent (ev);
|
||||
} else {
|
||||
ev.data_ev_ctrl.value = value * 127 / 255;
|
||||
prov.SendEvent (ev);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -125,6 +149,11 @@ namespace DMX2
|
|||
|
||||
if (prov.CurrentPage == iev.Page || iev.Page == 0) {
|
||||
iev.SendEvent();
|
||||
foreach (int src in prov.feedbacksources) {
|
||||
int lnvk = CombineHash (src, iev.MidiEvCode);
|
||||
if (iev.LastKnownValue != -1)
|
||||
prov.lastValueOfSrc [lnvk] = (byte)iev.LastKnownValue;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
@ -525,7 +554,7 @@ namespace DMX2
|
|||
}
|
||||
id = string.Format ("CTRL-C{0}P{1}", evS.data_ev_ctrl.channel, evS.data_ev_ctrl.param-32);
|
||||
msbAddr = evS.data_ev_ctrl.channel * 32 + evS.data_ev_ctrl.param - 32;
|
||||
value = ((fbTmpData [msbAddr] << 7) ^ evS.data_ev_ctrl.value) >> 6;
|
||||
value = ((fbTmpData [msbAddr] << 7) ^ evS.data_ev_ctrl.value);
|
||||
} else {
|
||||
id = string.Format ("CTRL-C{0}P{1}", evS.data_ev_ctrl.channel, evS.data_ev_ctrl.param);
|
||||
value = 255 * evS.data_ev_ctrl.value / 127; // Conversion {0,127} => {0,255}
|
||||
|
|
@ -592,8 +621,18 @@ namespace DMX2
|
|||
id = string.Format ("MIDI-PAGE{0}-{1}", evpage, id);
|
||||
|
||||
// Creation de l'objet interne si innexistant
|
||||
if (!eventlist.ContainsKey (id))
|
||||
if (!eventlist.ContainsKey (id)) {
|
||||
switch (evS.type) {
|
||||
case AlsaSeqLib.snd_seq_event_type_t.SND_SEQ_EVENT_CONTROLLER:
|
||||
eventlist.Add (id, new internalEvent (id, page, evHC,
|
||||
new midiCCEvSender(this,channel,evS.data_ev_ctrl.param))
|
||||
);
|
||||
break;
|
||||
default:
|
||||
eventlist.Add (id, new internalEvent (id, page, evHC, null));
|
||||
break;
|
||||
}
|
||||
}
|
||||
levent = eventlist [id]; //Dernier Evenement recu conserve pour menu
|
||||
|
||||
if (!lastValueOfSrc.ContainsKey (lnvk))
|
||||
|
|
|
|||
Loading…
Reference in a new issue