Modifs en cours : feedback
This commit is contained in:
parent
86f98d03fe
commit
4494e5420d
1 changed files with 34 additions and 72 deletions
|
|
@ -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);
|
||||
}
|
||||
|
||||
public AlsaSeqLib.snd_seq_event_t StoredEvent {
|
||||
get {
|
||||
return storedevent;
|
||||
}
|
||||
set {
|
||||
storedevent = value;
|
||||
|
||||
abstract class midiEventSender {
|
||||
public abstract void SendEvent (int value);
|
||||
}
|
||||
|
||||
class midiCCEvSender : midiEventSender {
|
||||
public override void SendEvent (int 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;*/
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue