commit fb60889c6a7e41ec4e88805370c97efdb51398ce
parent 59da039c84e1dd6d5d8c4c14b6c494b9cc3a4581
Author: falkTX <falktx@gmail.com>
Date: Sun, 17 May 2015 00:21:42 +0200
Change (plugin) zyn master switch to happen during audio output
Diffstat:
4 files changed, 18 insertions(+), 17 deletions(-)
diff --git a/src/Misc/Master.cpp b/src/Misc/Master.cpp
@@ -332,6 +332,9 @@ Master::Master(const SYNTH_T &synth_)
{
fprintf(stderr, "MIDI- got an error '%s' -- '%s'\n",a,b);
};
+
+ mastercb = 0;
+ mastercb_ptr = 0;
}
void Master::applyOscEvent(const char *msg)
@@ -535,6 +538,12 @@ void Master::partonoff(int npart, int what)
}
}
+void Master::setMasterChangedCallback(void(*cb)(void*,Master*), void *ptr)
+{
+ mastercb = cb;
+ mastercb_ptr = ptr;
+}
+
#if 0
template <class T>
struct def_skip
@@ -617,6 +626,8 @@ void Master::AudioOut(float *outl, float *outr)
Master *new_master = *(Master**)rtosc_argument(msg, 0).b.data;
new_master->AudioOut(outl, outr);
Nio::masterSwap(new_master);
+ if (mastercb)
+ mastercb(mastercb_ptr, new_master);
bToU->write("/free", "sb", "Master", sizeof(Master*), &this_master);
return;
}
diff --git a/src/Misc/Master.h b/src/Misc/Master.h
@@ -108,6 +108,9 @@ class Master
void partonoff(int npart, int what);
+ //Set callback to run when master changes
+ void setMasterChangedCallback(void(*cb)(void*,Master*),void *ptr);
+
/**parts \todo see if this can be made to be dynamic*/
class Part * part[NUM_MIDI_PARTS];
@@ -178,6 +181,10 @@ class Master
float *bufr;
off_t off;
size_t smps;
+
+ //Callback When Master changes
+ void(*mastercb)(void*,Master*);
+ void* mastercb_ptr;
};
#endif
diff --git a/src/Misc/MiddleWare.cpp b/src/Misc/MiddleWare.cpp
@@ -686,9 +686,6 @@ public:
master = m;
- if (mastercb)
- mastercb(mastercb_ptr, m);
-
//Give it to the backend and wait for the old part to return for
//deallocation
uToB->write("/load-master", "b", sizeof(Master*), &m);
@@ -815,10 +812,6 @@ public:
void(*idle)(void*);
void* idle_ptr;
- //Callback When Master changes
- void(*mastercb)(void*,Master*);
- void* mastercb_ptr;
-
//General UI callback
cb_t cb;
//UI handle
@@ -862,8 +855,6 @@ MiddleWareImpl::MiddleWareImpl(MiddleWare *mw, SYNTH_T synth_, int prefered_port
cb = [](void*, const char*){};
idle = 0;
idle_ptr = 0;
- mastercb = 0;
- mastercb_ptr = 0;
the_bToU = bToU;
master = new Master(synth);
@@ -1312,12 +1303,6 @@ void MiddleWare::setIdleCallback(void(*cb)(void*), void *ptr)
impl->idle_ptr = ptr;
}
-void MiddleWare::setMasterChangedCallback(void(*cb)(void*,Master*), void *ptr)
-{
- impl->mastercb = cb;
- impl->mastercb_ptr = ptr;
-}
-
void MiddleWare::transmitMsg(const char *msg)
{
impl->handleMsg(msg);
diff --git a/src/Misc/MiddleWare.h b/src/Misc/MiddleWare.h
@@ -20,8 +20,6 @@ class MiddleWare
void setUiCallback(void(*cb)(void*,const char *),void *ui);
//Set callback to run while busy
void setIdleCallback(void(*cb)(void*),void *ptr);
- //Set callback to run when master changed
- void setMasterChangedCallback(void(*cb)(void*,Master*),void *ptr);
//Handle events
void tick(void);
//Do A Readonly Operation (For Parameter Copy)