| @@ -185,7 +185,8 @@ static ZynAddSubFxPrograms sPrograms; | |||||
| // ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
| class ZynAddSubFxPlugin : public NativePluginAndUiClass | |||||
| class ZynAddSubFxPlugin : public NativePluginAndUiClass, | |||||
| private CarlaThread | |||||
| { | { | ||||
| public: | public: | ||||
| enum Parameters { | enum Parameters { | ||||
| @@ -237,8 +238,8 @@ public: | |||||
| fSynth.buffersize = static_cast<int>(getBufferSize()); | fSynth.buffersize = static_cast<int>(getBufferSize()); | ||||
| fSynth.samplerate = static_cast<uint>(getSampleRate()); | fSynth.samplerate = static_cast<uint>(getSampleRate()); | ||||
| //if (fSynth.buffersize > 32) | |||||
| // fSynth.buffersize = 32; | |||||
| if (fSynth.buffersize > 32) | |||||
| fSynth.buffersize = 32; | |||||
| fSynth.alias(); | fSynth.alias(); | ||||
| @@ -636,14 +637,6 @@ protected: | |||||
| CarlaExternalUI::stopPipeServer(2000); | CarlaExternalUI::stopPipeServer(2000); | ||||
| } | } | ||||
| } | } | ||||
| void uiIdle() override | |||||
| { | |||||
| NativePluginAndUiClass::uiIdle(); | |||||
| if (isPipeRunning()) | |||||
| fMiddleWare->tick(); | |||||
| } | |||||
| #endif | #endif | ||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| @@ -769,6 +762,19 @@ private: | |||||
| } | } | ||||
| } | } | ||||
| void run() noexcept override | |||||
| { | |||||
| for (;;) | |||||
| { | |||||
| if (MiddleWare* const mw = fMiddleWare) | |||||
| mw->tick(); | |||||
| else | |||||
| break; | |||||
| carla_msleep(1); | |||||
| } | |||||
| } | |||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| void _initMaster() | void _initMaster() | ||||
| @@ -777,6 +783,7 @@ private: | |||||
| fMiddleWare->setUiCallback(__uiCallback, this); | fMiddleWare->setUiCallback(__uiCallback, this); | ||||
| fMiddleWare->setIdleCallback(_idleCallback, this); | fMiddleWare->setIdleCallback(_idleCallback, this); | ||||
| _masterChangedCallback(fMiddleWare->spawnMaster()); | _masterChangedCallback(fMiddleWare->spawnMaster()); | ||||
| startThread(); | |||||
| } | } | ||||
| void _setMasterParameters() | void _setMasterParameters() | ||||
| @@ -819,8 +826,12 @@ private: | |||||
| void _deleteMaster() | void _deleteMaster() | ||||
| { | { | ||||
| fMaster = nullptr; | fMaster = nullptr; | ||||
| delete fMiddleWare; | |||||
| MiddleWare* const tmp(fMiddleWare); | |||||
| fMiddleWare = nullptr; | fMiddleWare = nullptr; | ||||
| stopThread(1000); | |||||
| delete tmp; | |||||
| } | } | ||||
| void _masterChangedCallback(Master* m) | void _masterChangedCallback(Master* m) | ||||