Ajout du feedback sur masters.
Ajout du feedback sur autres controles
This commit is contained in:
parent
5b810eaa8c
commit
68055d0bb9
6 changed files with 68 additions and 40 deletions
|
|
@ -87,7 +87,7 @@ namespace DMX2
|
|||
delegate{
|
||||
return master * 255 /100;
|
||||
},
|
||||
false
|
||||
true
|
||||
);
|
||||
|
||||
if (startthread) StartThread();
|
||||
|
|
@ -155,6 +155,7 @@ namespace DMX2
|
|||
}
|
||||
set {
|
||||
master= value;
|
||||
masterEventTarget.FeedBack ();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -140,7 +140,7 @@ namespace DMX2
|
|||
public delegate int GetData();
|
||||
EventAction action;
|
||||
GetData getdata;
|
||||
bool canfeedback=false , nofeedback=false;
|
||||
bool canfeedback=false;// , nofeedback=false;
|
||||
readonly List<IFeedbackInfo> fbInfos = new List<IFeedbackInfo>();
|
||||
|
||||
public actionEventTargetEx(EventAction _action, GetData _getdata,bool feedback)
|
||||
|
|
@ -161,16 +161,16 @@ namespace DMX2
|
|||
return true;
|
||||
}
|
||||
|
||||
nofeedback=true;
|
||||
//nofeedback=true;
|
||||
bool res =action(data);
|
||||
nofeedback=false;
|
||||
//nofeedback=false;
|
||||
return res;
|
||||
}
|
||||
|
||||
public void FeedBack (byte data)
|
||||
public void FeedBack ()
|
||||
{
|
||||
if (nofeedback)
|
||||
return;
|
||||
//if (nofeedback) return;
|
||||
byte data = (byte)getdata ();
|
||||
foreach (var info in fbInfos) {
|
||||
info.FeedBack(data);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -174,13 +174,14 @@ namespace DMX2
|
|||
|
||||
public MidiEventProvider (EventManager manager)
|
||||
{
|
||||
/*MidiDevice dev = new MidiDevice("VMPK Input:VMPK Input");
|
||||
#if DEBUG
|
||||
MidiDevice dev = new MidiDevice("VMPK Input:VMPK Input");
|
||||
dev.HasFeedback = true;
|
||||
knowndevices.Add(dev.Name,dev);
|
||||
dev = new MidiDevice("VMPK Output:VMPK Output");
|
||||
dev.HasFeedback = true;
|
||||
knowndevices.Add(dev.Name,dev);*/
|
||||
|
||||
knowndevices.Add(dev.Name,dev);
|
||||
#endif
|
||||
manager.RegisterProvider (this);
|
||||
AlsaSeqLib.Init ();
|
||||
|
||||
|
|
@ -277,7 +278,7 @@ namespace DMX2
|
|||
{
|
||||
foreach (var ievent in eventlist.Values) {
|
||||
if (ievent.Page == page) {
|
||||
ievent.SendEvent();
|
||||
ievent.SendFeedback();
|
||||
foreach (int src in feedbacksources) {
|
||||
int lnvk = CombineHash (src, ievent.MidiEvCode);
|
||||
if (ievent.LastKnownValue != -1)
|
||||
|
|
@ -303,16 +304,16 @@ namespace DMX2
|
|||
return false;
|
||||
uint _page = uint.Parse (res.Groups ["page"].Value);
|
||||
int _evHC = res.Groups ["id"].Value.GetHashCode ();
|
||||
midiEventSender sender = null;
|
||||
midiFeedbackSender sender = null;
|
||||
|
||||
res = regexCtrlEventID.Match (eventId);
|
||||
if (res.Success) {
|
||||
byte chan = byte.Parse (res.Groups ["chan"].Value);
|
||||
uint param = uint.Parse (res.Groups ["param"].Value);
|
||||
sender = new midiCCEvSender (this, chan, param);
|
||||
sender = new midiCCFbSender (this, chan, param);
|
||||
} else if ((res = regexPbEventID.Match (eventId)).Success){
|
||||
byte chan = byte.Parse (res.Groups ["chan"].Value);
|
||||
sender = new midiPBEvSender (this, chan);
|
||||
sender = new midiPBFbSender (this, chan);
|
||||
}
|
||||
eventlist.Add (eventId, new internalEventDesc (eventId, _page, _evHC,sender));
|
||||
}
|
||||
|
|
@ -478,12 +479,12 @@ namespace DMX2
|
|||
// TODO : Pitchbend feedback
|
||||
case AlsaSeqLib.snd_seq_event_type_t.SND_SEQ_EVENT_CONTROLLER:
|
||||
eventlist.Add (id, new internalEventDesc (id, page, evHC,
|
||||
new midiCCEvSender(this,channel,evS.data_ev_ctrl.param))
|
||||
new midiCCFbSender(this,channel,evS.data_ev_ctrl.param))
|
||||
);
|
||||
break;
|
||||
case AlsaSeqLib.snd_seq_event_type_t.SND_SEQ_EVENT_PITCHBEND:
|
||||
eventlist.Add (id, new internalEventDesc (id, page, evHC,
|
||||
new midiPBEvSender(this,channel))
|
||||
new midiPBFbSender(this,channel))
|
||||
);
|
||||
break;
|
||||
default:
|
||||
|
|
@ -506,9 +507,11 @@ namespace DMX2
|
|||
continue; */
|
||||
//last = evData;
|
||||
|
||||
if (eventlist [id].Bound) {
|
||||
eventlist [id].CallEvent (callback, evData);
|
||||
|
||||
/*if (eventlist [id].Bound) {
|
||||
callback (evData);
|
||||
}
|
||||
}*/
|
||||
|
||||
lastValueOfSrc [lnvk] = (byte)value;
|
||||
eventlist [id].LastKnownValue = (byte)value;
|
||||
|
|
@ -654,7 +657,7 @@ namespace DMX2
|
|||
readonly uint page;
|
||||
readonly int midiEvCode;
|
||||
|
||||
readonly midiEventSender evsender;
|
||||
readonly midiFeedbackSender fbSender;
|
||||
|
||||
public bool Bound {
|
||||
get {
|
||||
|
|
@ -683,12 +686,12 @@ namespace DMX2
|
|||
}
|
||||
}
|
||||
|
||||
public internalEventDesc (string _id, uint _page, int _evHCode, midiEventSender _evsender)
|
||||
public internalEventDesc (string _id, uint _page, int _evHCode, midiFeedbackSender _evsender)
|
||||
{
|
||||
internalName = _id;
|
||||
page = _page;
|
||||
midiEvCode = _evHCode;
|
||||
evsender = _evsender;
|
||||
fbSender = _evsender;
|
||||
}
|
||||
|
||||
int lastknownvalue = -1;
|
||||
|
|
@ -702,25 +705,33 @@ namespace DMX2
|
|||
}
|
||||
}
|
||||
|
||||
public void SendEvent ()
|
||||
bool nofbflag=false;
|
||||
|
||||
public void SendFeedback ()
|
||||
{
|
||||
if(evsender !=null)
|
||||
evsender.SendEvent (lastknownvalue);
|
||||
if(fbSender !=null && !nofbflag)
|
||||
fbSender.SendFeedback (lastknownvalue);
|
||||
}
|
||||
|
||||
public void CallEvent (EventManagerCallback callback, EventData evData)
|
||||
{
|
||||
nofbflag = true;
|
||||
callback (evData);
|
||||
nofbflag = false;
|
||||
}
|
||||
}
|
||||
|
||||
abstract class midiEventSender {
|
||||
public abstract void SendEvent (int value);
|
||||
abstract class midiFeedbackSender {
|
||||
public abstract void SendFeedback (int value);
|
||||
}
|
||||
|
||||
class midiCCEvSender : midiEventSender {
|
||||
class midiCCFbSender : midiFeedbackSender {
|
||||
readonly MidiEventProvider prov;
|
||||
|
||||
AlsaSeqLib.snd_seq_event_t ev;
|
||||
AlsaSeqLib.snd_seq_event_t ev2;
|
||||
|
||||
public midiCCEvSender (MidiEventProvider _prov, byte _chan, uint _param){
|
||||
public midiCCFbSender (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;
|
||||
|
|
@ -729,7 +740,7 @@ namespace DMX2
|
|||
ev2 = ev;
|
||||
ev2.data_ev_ctrl.param += 32;
|
||||
}
|
||||
public override void SendEvent (int value)
|
||||
public override void SendFeedback (int value)
|
||||
{
|
||||
if (prov.use14b && ev.data_ev_ctrl.param <32 ) {
|
||||
value = value * prov.max14bValue / 255;
|
||||
|
|
@ -745,19 +756,19 @@ namespace DMX2
|
|||
}
|
||||
}
|
||||
|
||||
class midiPBEvSender : midiEventSender {
|
||||
class midiPBFbSender : midiFeedbackSender {
|
||||
readonly MidiEventProvider prov;
|
||||
|
||||
AlsaSeqLib.snd_seq_event_t ev;
|
||||
|
||||
public midiPBEvSender (MidiEventProvider _prov, byte _chan){
|
||||
public midiPBFbSender (MidiEventProvider _prov, byte _chan){
|
||||
prov = _prov;
|
||||
ev = new AlsaSeqLib.snd_seq_event_t();
|
||||
ev.type = AlsaSeqLib.snd_seq_event_type_t.SND_SEQ_EVENT_PITCHBEND;
|
||||
ev.data_ev_ctrl.channel = _chan;
|
||||
|
||||
}
|
||||
public override void SendEvent (int value)
|
||||
public override void SendFeedback (int value)
|
||||
{ // value = ((evS.data_ev_ctrl.value + 7000) * 255 / 14000);
|
||||
|
||||
ev.data_ev_ctrl.value = value * 14000 / 255 - 7000;
|
||||
|
|
@ -783,7 +794,7 @@ namespace DMX2
|
|||
iev.LastKnownValue = data;
|
||||
|
||||
if (prov.CurrentPage == iev.Page || iev.Page == 0) {
|
||||
iev.SendEvent();
|
||||
iev.SendFeedback();
|
||||
foreach (int src in prov.feedbacksources) {
|
||||
int lnvk = CombineHash (src, iev.MidiEvCode);
|
||||
if (iev.LastKnownValue != -1)
|
||||
|
|
|
|||
|
|
@ -127,7 +127,7 @@ namespace DMX2
|
|||
Dictionary<string,int> valeursrecues= new Dictionary<string, int>();
|
||||
SequenceurLineaire seq;
|
||||
int max=0;//, signe=-2;
|
||||
bool nofeedback = false;
|
||||
//bool nofeedback = false;
|
||||
|
||||
bool attache;
|
||||
|
||||
|
|
@ -161,9 +161,9 @@ namespace DMX2
|
|||
return true;
|
||||
}
|
||||
|
||||
nofeedback = true;
|
||||
//nofeedback = true;
|
||||
seq.ChangeValeur(circuit,max);
|
||||
nofeedback = false;
|
||||
//nofeedback = false;
|
||||
attache = true;
|
||||
return true;
|
||||
}
|
||||
|
|
@ -190,8 +190,8 @@ namespace DMX2
|
|||
|
||||
public void FeedBack (byte data)
|
||||
{
|
||||
if (nofeedback)
|
||||
return;
|
||||
/*if (nofeedback)
|
||||
return;*/
|
||||
Attache = false;
|
||||
|
||||
foreach (var fb in feedbacks) {
|
||||
|
|
@ -238,6 +238,7 @@ namespace DMX2
|
|||
}
|
||||
set {
|
||||
master = value;
|
||||
masterEventTarget.FeedBack ();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -253,7 +254,7 @@ namespace DMX2
|
|||
delegate{
|
||||
return Master * 255 /100;
|
||||
},
|
||||
false
|
||||
true
|
||||
);
|
||||
|
||||
goNextEventTarget = new actionEventTarget (
|
||||
|
|
|
|||
|
|
@ -166,6 +166,7 @@ namespace DMX2
|
|||
}
|
||||
set {
|
||||
master = value;
|
||||
masterEventTarget.FeedBack ();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -190,7 +191,7 @@ namespace DMX2
|
|||
delegate{
|
||||
return Master *255/100;
|
||||
},
|
||||
false
|
||||
true
|
||||
);
|
||||
|
||||
goNextEventTarget = new actionEventTarget (
|
||||
|
|
|
|||
|
|
@ -55,6 +55,8 @@ namespace DMX2
|
|||
Gst.State state,pending;
|
||||
Gst.StateChangeReturn scret;
|
||||
|
||||
actionEventTargetEx volumeEventTarget=null;
|
||||
|
||||
public ReadOnlyCollection<string> Files {
|
||||
get {
|
||||
return files.AsReadOnly();
|
||||
|
|
@ -92,6 +94,7 @@ namespace DMX2
|
|||
volume=value;
|
||||
if(element!=null)
|
||||
element["volume"] = (double)volume / 100.0d ;
|
||||
volumeEventTarget.FeedBack ();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -188,6 +191,17 @@ namespace DMX2
|
|||
public SequenceurSon ()
|
||||
{
|
||||
GstInit();
|
||||
volumeEventTarget = new actionEventTargetEx (
|
||||
delegate(EventData data) {
|
||||
Volume = (uint)(100 * data.value / 255);
|
||||
return true;
|
||||
},
|
||||
delegate{
|
||||
return (int)(Volume * 255 /100);
|
||||
},
|
||||
true
|
||||
);
|
||||
|
||||
}
|
||||
#region implemented abstract members of DMX2.Sequenceur
|
||||
public override SequenceurUI GetUI ()
|
||||
|
|
|
|||
Loading…
Reference in a new issue