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;
|
internalName = _id;
|
||||||
page = _page;
|
page = _page;
|
||||||
midiEvCode = _evHCode;
|
midiEvCode = _evHCode;
|
||||||
|
evsender = _evsender;
|
||||||
}
|
}
|
||||||
|
|
||||||
int lastknownvalue = -1;
|
int lastknownvalue = -1;
|
||||||
|
|
@ -93,8 +94,31 @@ namespace DMX2
|
||||||
}
|
}
|
||||||
|
|
||||||
class midiCCEvSender : midiEventSender {
|
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)
|
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) {
|
if (prov.CurrentPage == iev.Page || iev.Page == 0) {
|
||||||
iev.SendEvent();
|
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;
|
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);
|
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;
|
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 {
|
} else {
|
||||||
id = string.Format ("CTRL-C{0}P{1}", evS.data_ev_ctrl.channel, evS.data_ev_ctrl.param);
|
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}
|
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);
|
id = string.Format ("MIDI-PAGE{0}-{1}", evpage, id);
|
||||||
|
|
||||||
// Creation de l'objet interne si innexistant
|
// Creation de l'objet interne si innexistant
|
||||||
if (!eventlist.ContainsKey (id))
|
if (!eventlist.ContainsKey (id)) {
|
||||||
eventlist.Add (id, new internalEvent (id, page, evHC,null));
|
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
|
levent = eventlist [id]; //Dernier Evenement recu conserve pour menu
|
||||||
|
|
||||||
if (!lastValueOfSrc.ContainsKey (lnvk))
|
if (!lastValueOfSrc.ContainsKey (lnvk))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue