zynaddsubfx

ZynAddSubFX open source synthesizer
Log | Files | Refs | Submodules | LICENSE

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:
Msrc/Misc/Master.cpp | 11+++++++++++
Msrc/Misc/Master.h | 7+++++++
Msrc/Misc/MiddleWare.cpp | 15---------------
Msrc/Misc/MiddleWare.h | 2--
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)