diff --git a/.gitignore b/.gitignore index a78890c0e..12179e03d 100644 --- a/.gitignore +++ b/.gitignore @@ -90,6 +90,7 @@ carla-discovery-posix64 carla-frontend carla-lv2-export +bls1-ui rev1-ui zynaddsubfx-ui diff --git a/Makefile b/Makefile index f2e790ea7..8885acb7d 100644 --- a/Makefile +++ b/Makefile @@ -412,7 +412,11 @@ ifeq ($(EXPERIMENTAL_PLUGINS),true) install -d $(DESTDIR)$(PREFIX)/share/carla/resources/rev1/ endif install -d $(DESTDIR)$(PREFIX)/share/carla/resources/nekofilter/ +ifeq ($(HAVE_ZYN_DEPS),true) +ifeq ($(HAVE_ZYN_UI_DEPS),true) install -d $(DESTDIR)$(PREFIX)/share/carla/resources/zynaddsubfx/ +endif +endif install -d $(DESTDIR)$(PREFIX)/share/icons/hicolor/16x16/apps/ install -d $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/ install -d $(DESTDIR)$(PREFIX)/share/icons/hicolor/128x128/apps/ @@ -531,6 +535,7 @@ ifeq ($(EXPERIMENTAL_PLUGINS),true) $(DESTDIR)$(PREFIX)/share/carla/resources/rev1/ install -m 755 \ + bin/resources/bls1-ui \ bin/resources/rev1-ui \ $(DESTDIR)$(PREFIX)/share/carla/resources/ endif @@ -541,13 +546,13 @@ endif ifeq ($(HAVE_ZYN_DEPS),true) ifeq ($(HAVE_ZYN_UI_DEPS),true) - install -m 755 \ - bin/resources/zynaddsubfx-ui \ - $(DESTDIR)$(PREFIX)/share/carla/resources/ - install -m 644 \ bin/resources/zynaddsubfx/*.png \ $(DESTDIR)$(PREFIX)/share/carla/resources/zynaddsubfx/ + + install -m 755 \ + bin/resources/zynaddsubfx-ui \ + $(DESTDIR)$(PREFIX)/share/carla/resources/ endif endif diff --git a/source/native-plugins/Makefile b/source/native-plugins/Makefile index a8130077e..6f585c594 100644 --- a/source/native-plugins/Makefile +++ b/source/native-plugins/Makefile @@ -13,6 +13,19 @@ include ../modules/Makefile.mk BUILD_C_FLAGS += -I.. BUILD_CXX_FLAGS += -I.. -isystem $(CWD)/modules -I$(CWD)/modules/distrho +# ---------------------------------------------------------------------------------------------------------------------------- +# Flags for Zita UIs + +ifeq ($(EXPERIMENTAL_PLUGINS),true) +ZITA_DSP_CXX_FLAGS = $(BUILD_CXX_FLAGS) -Wno-unused-parameter +ZITA_DSP_CXX_FLAGS += $(shell pkg-config --cflags fftw3f) +ZITA_UI_CXX_FLAGS = $(BUILD_CXX_FLAGS) -Wno-unused-parameter -Wno-ignored-qualifiers +ZITA_UI_CXX_FLAGS += $(shell pkg-config --cflags cairo libpng12 x11 xft zlib) +ZITA_UI_LINK_FLAGS = $(LINK_FLAGS) -lclxclient -lclthreads +ZITA_UI_LINK_FLAGS += $(shell pkg-config --libs cairo libpng12 x11 xft zlib) +ZITA_UI_LINK_FLAGS += -ldl -lpthread -lrt +endif # EXPERIMENTAL_PLUGINS + # ---------------------------------------------------------------------------------------------------------------------------- # Flags for ZynAddSubFX @@ -156,7 +169,9 @@ OBJS += \ $(OBJDIR)/zita-bls1.cpp.o \ $(OBJDIR)/zita-rev1.cpp.o -TARGETS += resources/rev1-ui$(APP_EXT) +TARGETS += \ + resources/bls1-ui$(APP_EXT) \ + resources/rev1-ui$(APP_EXT) endif # ---------------------------------------------------------------------------------------------------------------------------- @@ -179,10 +194,15 @@ $(MODULEDIR)/$(MODULENAME).a: $(OBJS) @rm -f $@ @$(AR) crs $@ $^ +resources/bls1-ui$(APP_EXT): $(OBJDIR)/zita-bls1-ui.cpp.o + -@mkdir -p $(OBJDIR) + @echo "Linking zita-bls1-ui" + @$(CXX) $^ $(ZITA_UI_LINK_FLAGS) -o $@ + resources/rev1-ui$(APP_EXT): $(OBJDIR)/zita-rev1-ui.cpp.o -@mkdir -p $(OBJDIR) @echo "Linking zita-rev1-ui" - @$(CXX) $^ $(LINK_FLAGS) -lclxclient -lclthreads $(shell pkg-config --libs cairo libpng12 x11 xft zlib) -ldl -lpthread -lrt -o $@ + @$(CXX) $^ $(ZITA_UI_LINK_FLAGS) -o $@ resources/zynaddsubfx-ui$(APP_EXT): $(OBJDIR)/zynaddsubfx-ui.cpp.o -@mkdir -p $(OBJDIR) @@ -281,25 +301,21 @@ $(OBJDIR)/zynaddsubfx-ui.cpp.o: zynaddsubfx-ui.cpp $(ZYN_UI_FILES_H) $(ZYN_UI_FI # ---------------------------------------------------------------------------------------------------------------------------- -$(OBJDIR)/zita-at1.cpp.o: zita-at1.cpp - -@mkdir -p $(OBJDIR) - @echo "Compiling $<" - @$(CXX) $< $(BUILD_CXX_FLAGS) $(shell pkg-config --cflags fftw3f x11 xft) -Wno-unused-parameter -Wno-unused-result -c -o $@ - -$(OBJDIR)/zita-bls1.cpp.o: zita-bls1.cpp +$(OBJDIR)/zita-%.cpp.o: zita-%.cpp -@mkdir -p $(OBJDIR) @echo "Compiling $<" - @$(CXX) $< $(BUILD_CXX_FLAGS) $(shell pkg-config --cflags fftw3f x11 xft) -Wno-unused-parameter -Wno-unused-result -c -o $@ + @$(CXX) $< $(ZITA_DSP_CXX_FLAGS) -c -o $@ -$(OBJDIR)/zita-rev1.cpp.o: zita-rev1.cpp +$(OBJDIR)/zita-%-ui.cpp.o: zita-%-ui.cpp -@mkdir -p $(OBJDIR) @echo "Compiling $<" - @$(CXX) $< $(BUILD_CXX_FLAGS) $(shell pkg-config --cflags fftw3f) -Wno-unused-parameter -c -o $@ + @$(CXX) $< $(ZITA_UI_CXX_FLAGS) -c -o $@ -$(OBJDIR)/zita-rev1-ui.cpp.o: zita-rev1-ui.cpp +# TODO +$(OBJDIR)/zita-at1.cpp.o: zita-at1.cpp -@mkdir -p $(OBJDIR) @echo "Compiling $<" - @$(CXX) $< $(BUILD_CXX_FLAGS) $(shell pkg-config --cflags cairo libpng12 x11 xft zlib) -Wno-unused-parameter -Wno-ignored-qualifiers -c -o $@ + @$(CXX) $< $(BUILD_CXX_FLAGS) $(shell pkg-config --cflags fftw3f x11 xft) -Wno-unused-parameter -Wno-unused-result -c -o $@ # ---------------------------------------------------------------------------------------------------------------------------- @@ -311,7 +327,8 @@ $(OBJDIR)/%.cpp.o: %.cpp # ---------------------------------------------------------------------------------------------------------------------------- -include $(OBJS:%.o=%.d) --include $(OBJDIR)/zita-rev-ui.cpp.d +-include $(OBJDIR)/zita-bls1-ui.cpp.d +-include $(OBJDIR)/zita-rev1-ui.cpp.d -include $(OBJDIR)/zynaddsubfx-ui.cpp.d # ---------------------------------------------------------------------------------------------------------------------------- diff --git a/source/native-plugins/zita-bls1-ui.cpp b/source/native-plugins/zita-bls1-ui.cpp new file mode 100644 index 000000000..c343a3f18 --- /dev/null +++ b/source/native-plugins/zita-bls1-ui.cpp @@ -0,0 +1,191 @@ +/* + * Carla Native Plugins + * Copyright (C) 2012-2015 Filipe Coelho + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For a full copy of the GNU General Public License see the doc/GPL.txt file. + */ + +#include "CarlaPipeUtils.cpp" + +#include "zita-bls1/png2img.cc" +#include "zita-bls1/guiclass.cc" +#include "zita-bls1/mainwin.cc" +#include "zita-bls1/rotary.cc" +#include "zita-bls1/styles.cc" + +using namespace BLS1; + +static Mainwin* mainwin = nullptr; + +// -------------------------------------------------------------------------------------------- + +class ZitaPipeClient : public CarlaPipeClient, + public Mainwin::ValueChangedCallback +{ +public: + ZitaPipeClient() noexcept + : CarlaPipeClient(), + fQuitReceived(false) {} + + ~ZitaPipeClient() noexcept override + { + if (fQuitReceived || ! isPipeRunning()) + return; + + const CarlaMutexLocker cml(getPipeLock()); + + writeMessage("exiting\n"); + flushMessages(); + } + + bool quitRequested() const noexcept + { + return fQuitReceived; + } + +protected: + bool msgReceived(const char* const msg) noexcept override + { + if (std::strcmp(msg, "control") == 0) + { + uint index; + float value; + CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(index), true); + CARLA_SAFE_ASSERT_RETURN(readNextLineAsFloat(value), true); + + mainwin->_rotary[index]->set_value(value); + return true; + } + + if (std::strcmp(msg, "show") == 0) + { + mainwin->x_map(); + return true; + } + + if (std::strcmp(msg, "hide") == 0) + { + mainwin->x_unmap(); + return true; + } + + if (std::strcmp(msg, "focus") == 0) + { + mainwin->x_mapraised(); + return true; + } + + if (std::strcmp(msg, "uiTitle") == 0) + { + const char* uiTitle; + + CARLA_SAFE_ASSERT_RETURN(readNextLineAsString(uiTitle), true); + + mainwin->x_set_title(uiTitle); + return true; + } + + if (std::strcmp(msg, "quit") == 0) + { + fQuitReceived = true; + return true; + } + + carla_stderr("ZitaPipeClient::msgReceived : %s", msg); + return false; + } + + void valueChangedCallback(uint index, double value) override + { + if (isPipeRunning()) + writeControlMessage(index, value); + } + +private: + bool fQuitReceived; +}; + +// -------------------------------------------------------------------------------------------- + +int main(int argc, const char* argv[]) +{ + X_resman xresman; + X_display *display; + X_handler *handler; + X_rootwin *rootwin; + int ev, xp, yp, xs, ys; + + int fake_argc = 1; + char* fake_argv[] = { (char*)"rev1" }; + xresman.init(&fake_argc, fake_argv, (char*)"rev1", nullptr, 0); + + display = new X_display(nullptr); + if (display->dpy () == 0) + { + carla_stderr("Can't open display."); + delete display; + return 1; + } + + ZitaPipeClient pipe; + const char* uiTitle = "Test UI"; + + if (argc > 1) + { + uiTitle = argv[2]; + + if (! pipe.initPipeClient(argv)) + return 1; + } + + xp = yp = 100; + xs = Mainwin::XSIZE + 4; + ys = Mainwin::YSIZE + 30; + xresman.geometry(".geometry", display->xsize(), display->ysize(), 1, xp, yp, xs, ys); + + styles_init(display, &xresman); + rootwin = new X_rootwin(display); + mainwin = new Mainwin(rootwin, &xresman, xp, yp, &pipe); + mainwin->x_set_title(uiTitle); + rootwin->handle_event(); + handler = new X_handler(display, mainwin, EV_X11); + handler->next_event(); + XFlush(display->dpy()); + + do + { + ev = mainwin->process(); + if (ev == EV_X11) + { + rootwin->handle_event(); + handler->next_event(); + } + else if (ev == Esync::EV_TIME) + { + handler->next_event(); + + if (pipe.isPipeRunning()) + pipe.idlePipe(); + } + } + while (ev != EV_EXIT && ! pipe.quitRequested()); + + styles_fini(display); + delete handler; + delete rootwin; + delete display; + + return 0; +} + +// -------------------------------------------------------------------------------------------- diff --git a/source/native-plugins/zita-bls1.cpp b/source/native-plugins/zita-bls1.cpp index c32911b3c..d299227e9 100644 --- a/source/native-plugins/zita-bls1.cpp +++ b/source/native-plugins/zita-bls1.cpp @@ -15,22 +15,15 @@ * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ -#include "CarlaNative.hpp" -#include "CarlaMathUtils.hpp" +#include "CarlaNativeExtUI.hpp" #include "CarlaJuceUtils.hpp" #include "juce_audio_basics.h" -#include "zita-common.hpp" -#include "zita-bls1/guiclass.cc" #include "zita-bls1/hp3filt.cc" #include "zita-bls1/jclient.cc" #include "zita-bls1/lfshelf2.cc" -#include "zita-bls1/mainwin.cc" -#include "zita-bls1/png2img.cc" -#include "zita-bls1/rotary.cc" #include "zita-bls1/shuffler.cc" -#include "zita-bls1/styles.cc" using juce::FloatVectorOperations; using juce::ScopedPointer; @@ -40,9 +33,7 @@ using namespace BLS1; // ----------------------------------------------------------------------- // BLS1 Plugin -class BLS1Plugin : public NativePluginClass, - public X_handler_thread::SetValueCallback, - private Mainwin::ValueChangedCallback +class BLS1Plugin : public NativePluginAndUiClass { public: static const uint32_t kNumInputs = 2; @@ -59,15 +50,9 @@ public: }; BLS1Plugin(const NativeHostDescriptor* const host) - : NativePluginClass(host), + : NativePluginAndUiClass(host, "bls1-ui"), fJackClient(), - xresman(), jclient(nullptr), - display(nullptr), - rootwin(nullptr), - mainwin(nullptr), - handler(nullptr), - handlerThread(this), leakDetector_BLS1Plugin() { CARLA_SAFE_ASSERT(host != nullptr); @@ -78,12 +63,6 @@ public: fJackClient.bufferSize = getBufferSize(); fJackClient.sampleRate = getSampleRate(); - int argc = 1; - char* argv[] = { (char*)"bls1" }; - xresman.init(&argc, argv, (char*)"bls1", nullptr, 0); - - jclient = new Jclient(xresman.rname(), &fJackClient); - // set initial values fParameters[kParameterINPBAL] = 0.0f; fParameters[kParameterHPFILT] = 40.0f; @@ -92,10 +71,7 @@ public: fParameters[kParameterLFFREQ] = 80.0f; fParameters[kParameterLFGAIN] = 0.0f; - jclient->set_inpbal(fParameters[kParameterINPBAL]); - jclient->set_hpfilt(fParameters[kParameterHPFILT]); - jclient->shuffler()->prepare(fParameters[kParameterSHGAIN], fParameters[kParameterSHFREQ]); - jclient->set_loshelf(fParameters[kParameterLFGAIN], fParameters[kParameterLFFREQ]); + _recreateZitaClient(); } // ------------------------------------------------------------------- @@ -238,120 +214,19 @@ public: fJackClient.processCallback(frames, fJackClient.processPtr); } - // ------------------------------------------------------------------- - // Plugin UI calls - - void uiShow(const bool show) override - { - if (show) - { - if (display != nullptr) - return; - - display = new X_display(nullptr); - - if (display->dpy() == nullptr) - return hostUiUnavailable(); - - styles_init(display, &xresman, getResourceDir()); - - rootwin = new X_rootwin(display); - mainwin = new Mainwin(rootwin, &xresman, 0, 0, jclient, this); - rootwin->handle_event(); - mainwin->x_set_title(getUiName()); - - handler = new X_handler(display, mainwin, EV_X11); - - if (const uintptr_t winId = getUiParentId()) - XSetTransientForHint(display->dpy(), mainwin->win(), static_cast(winId)); - - handler->next_event(); - XFlush(display->dpy()); - - handlerThread.setupAndRun(handler, rootwin, mainwin); - } - else - { - if (handlerThread.isThreadRunning()) - handlerThread.stopThread(); - - handler = nullptr; - mainwin = nullptr; - rootwin = nullptr; - display = nullptr; - } - } - - void uiIdle() override - { - if (mainwin == nullptr) - return; - - if (handlerThread.wasClosed()) - { - { - const CarlaMutexLocker cml(handlerThread.getLock()); - handler = nullptr; - mainwin = nullptr; - rootwin = nullptr; - display = nullptr; - } - uiClosed(); - } - } - - void uiSetParameterValue(const uint32_t index, const float value) override - { - CARLA_SAFE_ASSERT_RETURN(index < kParameterNROTARY,); - - if (mainwin == nullptr) - return; - - handlerThread.setParameterValueLater(index, value); - } - // ------------------------------------------------------------------- // Plugin dispatcher calls void bufferSizeChanged(const uint32_t bufferSize) override { fJackClient.bufferSize = bufferSize; + _recreateZitaClient(); } void sampleRateChanged(const double sampleRate) override { fJackClient.sampleRate = sampleRate; - } - - void uiNameChanged(const char* const uiName) override - { - CARLA_SAFE_ASSERT_RETURN(uiName != nullptr && uiName[0] != '\0',); - - if (mainwin == nullptr) - return; - - const CarlaMutexLocker cml(handlerThread.getLock()); - - mainwin->x_set_title(uiName); - } - - // ------------------------------------------------------------------- - // Mainwin callbacks - - void valueChangedCallback(uint index, double value) override - { - fParameters[index] = value; - uiParameterChanged(index, value); - } - - // ------------------------------------------------------------------- - // X_handler_thread callbacks - - void setParameterValueFromHandlerThread(uint32_t index, float value) override - { - CARLA_SAFE_ASSERT_RETURN(mainwin != nullptr,); - - mainwin->_rotary[index]->set_value(value); + _recreateZitaClient(); } // ------------------------------------------------------------------- @@ -361,16 +236,20 @@ private: jack_client_t fJackClient; // Zita stuff (core) - X_resman xresman; - ScopedPointer jclient; - ScopedPointer display; - ScopedPointer rootwin; - ScopedPointer mainwin; - ScopedPointer handler; - X_handler_thread handlerThread; + ScopedPointer jclient; + // Parameters float fParameters[kParameterNROTARY]; + void _recreateZitaClient() + { + jclient = new Jclient(&fJackClient); + jclient->set_inpbal(fParameters[kParameterINPBAL]); + jclient->set_hpfilt(fParameters[kParameterHPFILT]); + jclient->shuffler()->prepare(fParameters[kParameterSHGAIN], fParameters[kParameterSHFREQ]); + jclient->set_loshelf(fParameters[kParameterLFGAIN], fParameters[kParameterLFFREQ]); + } + PluginClassEND(BLS1Plugin) CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(BLS1Plugin) }; @@ -381,9 +260,7 @@ static const NativePluginDescriptor bls1Desc = { /* category */ NATIVE_PLUGIN_CATEGORY_FILTER, /* hints */ static_cast(NATIVE_PLUGIN_IS_RTSAFE |NATIVE_PLUGIN_HAS_UI - |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS - |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD - |NATIVE_PLUGIN_USES_PARENT_ID), + |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS), /* supports */ static_cast(0x0), /* audioIns */ BLS1Plugin::kNumInputs, /* audioOuts */ BLS1Plugin::kNumOutputs, diff --git a/source/native-plugins/zita-bls1/global.h b/source/native-plugins/zita-bls1/global.h index 76e638387..8774105bb 100644 --- a/source/native-plugins/zita-bls1/global.h +++ b/source/native-plugins/zita-bls1/global.h @@ -1,8 +1,8 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2011 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla -// +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla +// // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or diff --git a/source/native-plugins/zita-bls1/guiclass.cc b/source/native-plugins/zita-bls1/guiclass.cc index 60a6bef1d..fb68fdc1e 100644 --- a/source/native-plugins/zita-bls1/guiclass.cc +++ b/source/native-plugins/zita-bls1/guiclass.cc @@ -1,8 +1,8 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2011 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla -// +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla +// // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or diff --git a/source/native-plugins/zita-bls1/guiclass.h b/source/native-plugins/zita-bls1/guiclass.h index c85f2640f..00dc37a5e 100644 --- a/source/native-plugins/zita-bls1/guiclass.h +++ b/source/native-plugins/zita-bls1/guiclass.h @@ -1,8 +1,8 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2011 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla -// +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla +// // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or diff --git a/source/native-plugins/zita-bls1/hp3filt.cc b/source/native-plugins/zita-bls1/hp3filt.cc index a583f1aac..e36f973ad 100644 --- a/source/native-plugins/zita-bls1/hp3filt.cc +++ b/source/native-plugins/zita-bls1/hp3filt.cc @@ -1,8 +1,8 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2011 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla -// +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla +// // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or diff --git a/source/native-plugins/zita-bls1/hp3filt.h b/source/native-plugins/zita-bls1/hp3filt.h index af8c6cc94..b84d2680b 100644 --- a/source/native-plugins/zita-bls1/hp3filt.h +++ b/source/native-plugins/zita-bls1/hp3filt.h @@ -1,8 +1,8 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2011 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla -// +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla +// // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or diff --git a/source/native-plugins/zita-bls1/jclient.cc b/source/native-plugins/zita-bls1/jclient.cc index 39a7ffa92..44de80be4 100644 --- a/source/native-plugins/zita-bls1/jclient.cc +++ b/source/native-plugins/zita-bls1/jclient.cc @@ -1,8 +1,8 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2011 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla -// +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla +// // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or @@ -26,11 +26,10 @@ namespace BLS1 { -Jclient::Jclient (const char *jname, jack_client_t *jclient) : +Jclient::Jclient (jack_client_t *jclient) : A_thread ("Jclient"), _jack_client (jclient), _active (false), - _jname (0), _inpbal0 (0), _inpbal1 (0), _ga (1.0f), @@ -38,7 +37,7 @@ Jclient::Jclient (const char *jname, jack_client_t *jclient) : _da (0.0f), _db (0.0f) { - init_jack (jname); + init_jack (); } @@ -48,37 +47,25 @@ Jclient::~Jclient (void) } -void Jclient::init_jack (const char *jname) +void Jclient::init_jack (void) { - struct sched_param spar; - int abspri, policy, k; - jack_set_process_callback (_jack_client, jack_static_process, (void *) this); jack_on_shutdown (_jack_client, jack_static_shutdown, (void *) this); + jack_activate (_jack_client); - if (jack_activate (_jack_client)) - { - fprintf (stderr, "Can't activate JACK.\n"); - exit (1); - } - - _jname = jack_get_client_name (_jack_client); _fsamp = jack_get_sample_rate (_jack_client); _psize = jack_get_buffer_size (_jack_client); if (_psize > 4096) { fprintf (stderr, "Period size can't be more than 4096.\n"); - exit (1); + return; } if (_psize & (_psize - 1)) { fprintf (stderr, "Period size must be a power of 2.\n"); - exit (1); + return; } - pthread_getschedparam (jack_client_thread_id (_jack_client), &policy, &spar); - abspri = spar.sched_priority; - _inpports [0] = jack_port_register (_jack_client, "inp.L", JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0); _inpports [1] = jack_port_register (_jack_client, "inp.R", JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0); _outports [0] = jack_port_register (_jack_client, "out.L", JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0); @@ -87,10 +74,10 @@ void Jclient::init_jack (const char *jname) _hpfilt.setfsamp (_fsamp); _lshelf.setfsamp (_fsamp); _lshelf.bypass (false); - _shuffl.init (_fsamp, _psize, abspri, policy); + _shuffl.init (_fsamp, _psize); - for (k = _fsamp, _fragm = 1024; k > 56000; k >>= 1, _fragm <<= 1); + for (int k = _fsamp, _fragm = 1024; k > 56000; k >>= 1, _fragm <<= 1); _nsamp = 0; _active = true; } diff --git a/source/native-plugins/zita-bls1/jclient.h b/source/native-plugins/zita-bls1/jclient.h index dd7597477..ffe7f8c56 100644 --- a/source/native-plugins/zita-bls1/jclient.h +++ b/source/native-plugins/zita-bls1/jclient.h @@ -1,8 +1,8 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2011 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla -// +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla +// // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or @@ -41,11 +41,9 @@ class Jclient : public A_thread { public: - Jclient (const char *jname, jack_client_t *jclient); + Jclient (jack_client_t *jclient); ~Jclient (void); - const char *jname (void) const { return _jname; } - void set_inpbal (float diff) { _inpbal0 = diff; @@ -68,7 +66,7 @@ public: private: - void init_jack (const char *jname); + void init_jack (void); void close_jack (void); void jack_shutdown (void); int jack_process (int nframes); @@ -79,7 +77,6 @@ private: jack_port_t *_inpports [2]; jack_port_t *_outports [2]; bool _active; - const char *_jname; unsigned int _fsamp; int _psize; int _fragm; diff --git a/source/native-plugins/zita-bls1/lfshelf2.cc b/source/native-plugins/zita-bls1/lfshelf2.cc index 8bdc16cef..b12cedfc1 100644 --- a/source/native-plugins/zita-bls1/lfshelf2.cc +++ b/source/native-plugins/zita-bls1/lfshelf2.cc @@ -1,8 +1,8 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2011 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla -// +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla +// // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or diff --git a/source/native-plugins/zita-bls1/lfshelf2.h b/source/native-plugins/zita-bls1/lfshelf2.h index 4eed7f227..e159fdf08 100644 --- a/source/native-plugins/zita-bls1/lfshelf2.h +++ b/source/native-plugins/zita-bls1/lfshelf2.h @@ -1,8 +1,8 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2011 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla -// +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla +// // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or diff --git a/source/native-plugins/zita-bls1/mainwin.cc b/source/native-plugins/zita-bls1/mainwin.cc index d2f1c1a1b..2f3732d3a 100644 --- a/source/native-plugins/zita-bls1/mainwin.cc +++ b/source/native-plugins/zita-bls1/mainwin.cc @@ -1,8 +1,8 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2011 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla -// +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla +// // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or @@ -30,25 +30,21 @@ namespace BLS1 { -Mainwin::Mainwin (X_rootwin *parent, X_resman *xres, int xp, int yp, Jclient *jclient, ValueChangedCallback* valuecb) : +Mainwin::Mainwin (X_rootwin *parent, X_resman *xres, int xp, int yp, ValueChangedCallback* valuecb) : A_thread ("Main"), X_window (parent, xp, yp, XSIZE, YSIZE, XftColors [C_MAIN_BG]->pixel), _stop (false), _xres (xres), - _jclient (jclient), _touch (false), _valuecb (valuecb) { X_hints H; - char s [1024]; int i; _atom = XInternAtom (dpy (), "WM_DELETE_WINDOW", True); XSetWMProtocols (dpy (), win (), &_atom, 1); _atom = XInternAtom (dpy (), "WM_PROTOCOLS", True); - sprintf (s, "%s", jclient->jname ()); - x_set_title (s); H.position (xp, yp); H.minsize (XSIZE, YSIZE); H.maxsize (XSIZE, YSIZE); @@ -56,6 +52,7 @@ Mainwin::Mainwin (X_rootwin *parent, X_resman *xres, int xp, int yp, Jclient *jc H.rclas (xres->rclas ()); x_apply (&H); + RotaryCtl::init (disp ()); _rotary [INPBAL] = new Rlinctl (this, this, &inpbal_img, 20, 0, 120, 4, -3.0f, 3.0f, 0.0f, INPBAL); _rotary [HPFILT] = new Rlogctl (this, this, &hpfilt_img, 20, 0, 120, 4, 10.0f, 320.0f, 40.0f, HPFILT); _rotary [SHGAIN] = new Rlinctl (this, this, &shgain_img, 190, 0, 120, 5, 0.0f, 24.0f, 15.0f, SHGAIN); @@ -78,6 +75,7 @@ Mainwin::Mainwin (X_rootwin *parent, X_resman *xres, int xp, int yp, Jclient *jc Mainwin::~Mainwin (void) { + RotaryCtl::fini (); } @@ -133,16 +131,15 @@ void Mainwin::handle_time (void) if (--_timeout == 0) numdisp (-1); } - if (_touch && _jclient->shuffler ()->ready ()) + if (_touch) { double v1 = _rotary [SHGAIN]->value (), v2 = _rotary [SHFREQ]->value (); - _jclient->shuffler ()->prepare (v1, v2); _valuecb->valueChangedCallback (SHGAIN, v1); _valuecb->valueChangedCallback (SHFREQ, v2); _touch = 0; } - inc_time (50000); + inc_time (5000); XFlush (dpy ()); } @@ -178,12 +175,10 @@ void Mainwin::handle_callb (int type, X_window *W, XEvent *E) { case INPBAL: v = _rotary [INPBAL]->value (); - _jclient->set_inpbal (v); _valuecb->valueChangedCallback (INPBAL, v); break; case HPFILT: v = _rotary [HPFILT]->value (); - _jclient->set_hpfilt (v); _valuecb->valueChangedCallback (HPFILT, v); break; case SHGAIN: @@ -194,7 +189,6 @@ void Mainwin::handle_callb (int type, X_window *W, XEvent *E) case LFGAIN: v = _rotary [LFGAIN]->value (); v2 = _rotary [LFFREQ]->value (); - _jclient->set_loshelf (v, v2); _valuecb->valueChangedCallback (LFGAIN, v); _valuecb->valueChangedCallback (LFFREQ, v2); break; diff --git a/source/native-plugins/zita-bls1/mainwin.h b/source/native-plugins/zita-bls1/mainwin.h index 355c6e8db..c4dcb4527 100644 --- a/source/native-plugins/zita-bls1/mainwin.h +++ b/source/native-plugins/zita-bls1/mainwin.h @@ -1,8 +1,8 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2011 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla -// +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla +// // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or @@ -29,7 +29,7 @@ #include "jclient.h" #include "global.h" -class BLS1Plugin; +class ZitaPipeClient; namespace BLS1 { @@ -43,9 +43,10 @@ public: virtual void valueChangedCallback(uint, double) = 0; }; + enum { XSIZE = 540, YSIZE = 75 }; - Mainwin (X_rootwin *parent, X_resman *xres, int xp, int yp, Jclient *jclient, ValueChangedCallback* valuecb); + Mainwin (X_rootwin *parent, X_resman *xres, int xp, int yp, ValueChangedCallback* valuecb); ~Mainwin (void); Mainwin (const Mainwin&); Mainwin& operator=(const Mainwin&); @@ -72,7 +73,6 @@ private: Atom _atom; bool _stop; X_resman *_xres; - Jclient *_jclient; RotaryCtl *_rotary [NROTARY]; X_textip *_numtext; int _parmind; @@ -81,7 +81,7 @@ private: ValueChangedCallback* _valuecb; - friend class ::BLS1Plugin; + friend class ::ZitaPipeClient; }; diff --git a/source/native-plugins/zita-bls1/png2img.cc b/source/native-plugins/zita-bls1/png2img.cc index 88d31417b..72adccb4d 100644 --- a/source/native-plugins/zita-bls1/png2img.cc +++ b/source/native-plugins/zita-bls1/png2img.cc @@ -1,8 +1,8 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2007-2010 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla -// +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla +// // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or diff --git a/source/native-plugins/zita-bls1/png2img.h b/source/native-plugins/zita-bls1/png2img.h index 13a83ce97..2c599c0bb 100644 --- a/source/native-plugins/zita-bls1/png2img.h +++ b/source/native-plugins/zita-bls1/png2img.h @@ -1,8 +1,8 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2007-2010 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla -// +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla +// // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or diff --git a/source/native-plugins/zita-bls1/rotary.cc b/source/native-plugins/zita-bls1/rotary.cc index ab0bdecaa..0fc14f3ac 100644 --- a/source/native-plugins/zita-bls1/rotary.cc +++ b/source/native-plugins/zita-bls1/rotary.cc @@ -1,8 +1,8 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2010 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla -// +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla +// // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or @@ -28,6 +28,8 @@ namespace BLS1 { +cairo_t *RotaryCtl::_cairotype = 0; +cairo_surface_t *RotaryCtl::_cairosurf = 0; int RotaryCtl::_wb_up = 4; int RotaryCtl::_wb_dn = 5; @@ -59,10 +61,6 @@ RotaryCtl::RotaryCtl (X_window *parent, { x_add_events ( ExposureMask | Button1MotionMask | ButtonPressMask | ButtonReleaseMask); - - _cairo->initIfNeeded(parent->disp()); - _cairotype = _cairo->type; - _cairosurf = _cairo->surf; } @@ -71,6 +69,20 @@ RotaryCtl::~RotaryCtl (void) } +void RotaryCtl::init (X_display *disp) +{ + _cairosurf = cairo_xlib_surface_create (disp->dpy (), 0, disp->dvi (), 50, 50); + _cairotype = cairo_create (_cairosurf); +} + + +void RotaryCtl::fini (void) +{ + cairo_destroy (_cairotype); + cairo_surface_destroy (_cairosurf); +} + + void RotaryCtl::handle_event (XEvent *E) { switch (E->type) diff --git a/source/native-plugins/zita-bls1/rotary.h b/source/native-plugins/zita-bls1/rotary.h index 1d752833a..39b7394d0 100644 --- a/source/native-plugins/zita-bls1/rotary.h +++ b/source/native-plugins/zita-bls1/rotary.h @@ -1,8 +1,8 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2010 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla -// +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla +// // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or @@ -73,6 +73,9 @@ public: virtual void set_value (double v) = 0; virtual void get_string (char *p, int n) {} + static void init (X_display *disp); + static void fini (void); + static int _wb_up; static int _wb_dn; @@ -107,9 +110,8 @@ private: virtual int handle_motion (int dx, int dy) = 0; virtual int handle_mwheel (int dw) = 0; - juce::SharedResourcePointer _cairo; - cairo_t *_cairotype; - cairo_surface_t *_cairosurf; + static cairo_t *_cairotype; + static cairo_surface_t *_cairosurf; }; diff --git a/source/native-plugins/zita-bls1/shuffler.cc b/source/native-plugins/zita-bls1/shuffler.cc index 3528bd7db..3ee3a1812 100644 --- a/source/native-plugins/zita-bls1/shuffler.cc +++ b/source/native-plugins/zita-bls1/shuffler.cc @@ -1,8 +1,8 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2011 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla -// +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla +// // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or @@ -54,7 +54,7 @@ Shuffler::~Shuffler (void) } -void Shuffler::init (int fsamp, int quant, int abspri, int policy) +void Shuffler::init (int fsamp, int quant) { int k; @@ -80,7 +80,7 @@ void Shuffler::init (int fsamp, int quant, int abspri, int policy) _convproc.configure (1, 1, _iplen, _quant, _minpt, _minpt); _convproc.impdata_create (0, 0, 1, _fft_time, 0, _iplen); - _convproc.start_process (abspri, policy); + _convproc.start_process (35, SCHED_FIFO); } diff --git a/source/native-plugins/zita-bls1/shuffler.h b/source/native-plugins/zita-bls1/shuffler.h index 1d5b1104b..88b5638fb 100644 --- a/source/native-plugins/zita-bls1/shuffler.h +++ b/source/native-plugins/zita-bls1/shuffler.h @@ -1,8 +1,8 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2011 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla -// +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla +// // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or @@ -37,7 +37,7 @@ public: Shuffler (void); ~Shuffler (void); - void init (int fsamp, int quant, int abspri, int policy); + void init (int fsamp, int quant); void reset (void); void prepare (float gain, float freq); void process (int nsamp, float *inp [], float *out []); diff --git a/source/native-plugins/zita-bls1/styles.cc b/source/native-plugins/zita-bls1/styles.cc index 58ca4c797..bf511cedc 100644 --- a/source/native-plugins/zita-bls1/styles.cc +++ b/source/native-plugins/zita-bls1/styles.cc @@ -1,8 +1,8 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2011 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla -// +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla +// // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or @@ -24,6 +24,7 @@ #include "png2img.h" #include "CarlaString.hpp" +#include namespace BLS1 { @@ -44,9 +45,20 @@ RotaryImg lffreq_img; RotaryImg lfgain_img; +static CarlaString getResourceDir() +{ + Dl_info exeInfo; + dladdr((void*)getResourceDir, &exeInfo); + + CarlaString filename(exeInfo.dli_fname); + return filename.truncate(filename.rfind("-ui")); +} + -int styles_init (X_display *disp, X_resman *xrm, const char *resdir) +int styles_init (X_display *disp, X_resman *xrm) { + CarlaString resourceDir(getResourceDir()); + XftColors [C_MAIN_BG] = disp->alloc_xftcolor (0.25f, 0.25f, 0.25f, 1.0f); XftColors [C_MAIN_FG] = disp->alloc_xftcolor (1.0f, 1.0f, 1.0f, 1.0f); XftColors [C_TEXT_BG] = disp->alloc_xftcolor (1.0f, 1.0f, 0.0f, 1.0f); @@ -58,10 +70,9 @@ int styles_init (X_display *disp, X_resman *xrm, const char *resdir) tstyle1.color.normal.bgnd = XftColors [C_TEXT_BG]->pixel; tstyle1.color.normal.text = XftColors [C_TEXT_FG]; - const CarlaString SHARED = CarlaString(resdir)+"/bls1"; - inputsect = png2img (SHARED+"/inputsect.png", disp, XftColors [C_MAIN_BG]); - shuffsect = png2img (SHARED+"/shuffsect.png", disp, XftColors [C_MAIN_BG]); - lfshfsect = png2img (SHARED+"/lfshfsect.png", disp, XftColors [C_MAIN_BG]); + inputsect = png2img (resourceDir+"/inputsect.png", disp, XftColors [C_MAIN_BG]); + shuffsect = png2img (resourceDir+"/shuffsect.png", disp, XftColors [C_MAIN_BG]); + lfshfsect = png2img (resourceDir+"/lfshfsect.png", disp, XftColors [C_MAIN_BG]); if (!inputsect || !shuffsect || !lfshfsect) return 1; inpbal_img._backg = XftColors [C_MAIN_BG]; diff --git a/source/native-plugins/zita-bls1/styles.h b/source/native-plugins/zita-bls1/styles.h index eb15ea215..6371305f9 100644 --- a/source/native-plugins/zita-bls1/styles.h +++ b/source/native-plugins/zita-bls1/styles.h @@ -1,8 +1,8 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2011 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla -// +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla +// // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or @@ -43,7 +43,7 @@ enum }; -extern int styles_init (X_display *disp, X_resman *xrm, const char *resdir); +extern int styles_init (X_display *disp, X_resman *xrm); extern void styles_fini (X_display *disp); extern XftColor *XftColors [NXFTCOLORS]; diff --git a/source/native-plugins/zita-rev1-ui.cpp b/source/native-plugins/zita-rev1-ui.cpp index a1454b44d..c392a2210 100644 --- a/source/native-plugins/zita-rev1-ui.cpp +++ b/source/native-plugins/zita-rev1-ui.cpp @@ -39,7 +39,7 @@ public: ~ZitaPipeClient() noexcept override { - if (fQuitReceived) + if (fQuitReceived || ! isPipeRunning()) return; const CarlaMutexLocker cml(getPipeLock()); @@ -113,7 +113,8 @@ protected: if (index == Mainwin::R_RGXYZ) index = Mainwin::R_OPMIX; - writeControlMessage(index, value); + if (isPipeRunning()) + writeControlMessage(index, value); } private: @@ -180,7 +181,9 @@ int main(int argc, const char* argv[]) else if (ev == Esync::EV_TIME) { handler->next_event(); - pipe.idlePipe(); + + if (pipe.isPipeRunning()) + pipe.idlePipe(); } } while (ev != EV_EXIT && ! pipe.quitRequested()); diff --git a/source/native-plugins/zita-rev1.cpp b/source/native-plugins/zita-rev1.cpp index 093de8853..b3d5346eb 100644 --- a/source/native-plugins/zita-rev1.cpp +++ b/source/native-plugins/zita-rev1.cpp @@ -66,8 +66,6 @@ public: fJackClient.bufferSize = getBufferSize(); fJackClient.sampleRate = getSampleRate(); - jclient = new Jclient(&fJackClient, isAmbisonic); - // set initial values fParameters[kParameterDELAY] = 0.04f; fParameters[kParameterXOVER] = 200.0f; @@ -84,27 +82,7 @@ public: else fParameters[kParameterOPMIXorRGXYZ] = 0.5f; - Reverb* const reverb(jclient->reverb()); - - reverb->set_delay(fParameters[kParameterDELAY]); - reverb->set_xover(fParameters[kParameterXOVER]); - reverb->set_rtlow(fParameters[kParameterRTLOW]); - reverb->set_rtmid(fParameters[kParameterRTMID]); - reverb->set_fdamp(fParameters[kParameterFDAMP]); - - if (isAmbisonic) - { - reverb->set_opmix(0.5); - reverb->set_rgxyz(fParameters[kParameterOPMIXorRGXYZ]); - } - else - { - reverb->set_opmix(fParameters[kParameterOPMIXorRGXYZ]); - reverb->set_rgxyz(0.0); - } - - reverb->set_eq1(fParameters[kParameterEQ1FR], fParameters[kParameterEQ1GN]); - reverb->set_eq2(fParameters[kParameterEQ2FR], fParameters[kParameterEQ2GN]); + _recreateZitaClient(); } // ------------------------------------------------------------------- @@ -306,11 +284,13 @@ public: void bufferSizeChanged(const uint32_t bufferSize) override { fJackClient.bufferSize = bufferSize; + _recreateZitaClient(); } void sampleRateChanged(const double sampleRate) override { fJackClient.sampleRate = sampleRate; + _recreateZitaClient(); } // ------------------------------------------------------------------- @@ -357,8 +337,36 @@ private: // Zita stuff (core) ScopedPointer jclient; + // Parameters float fParameters[kParameterNROTARY]; + void _recreateZitaClient() + { + jclient = new Jclient(&fJackClient, kIsAmbisonic); + + Reverb* const reverb(jclient->reverb()); + + reverb->set_delay(fParameters[kParameterDELAY]); + reverb->set_xover(fParameters[kParameterXOVER]); + reverb->set_rtlow(fParameters[kParameterRTLOW]); + reverb->set_rtmid(fParameters[kParameterRTMID]); + reverb->set_fdamp(fParameters[kParameterFDAMP]); + + if (kIsAmbisonic) + { + reverb->set_opmix(0.5); + reverb->set_rgxyz(fParameters[kParameterOPMIXorRGXYZ]); + } + else + { + reverb->set_opmix(fParameters[kParameterOPMIXorRGXYZ]); + reverb->set_rgxyz(0.0); + } + + reverb->set_eq1(fParameters[kParameterEQ1FR], fParameters[kParameterEQ1GN]); + reverb->set_eq2(fParameters[kParameterEQ2FR], fParameters[kParameterEQ2GN]); + } + public: static NativePluginHandle _instantiateAmbisonic(const NativeHostDescriptor* host) { @@ -384,8 +392,7 @@ static const NativePluginDescriptor rev1AmbisonicDesc = { /* category */ NATIVE_PLUGIN_CATEGORY_DELAY, /* hints */ static_cast(NATIVE_PLUGIN_IS_RTSAFE |NATIVE_PLUGIN_HAS_UI - |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS - |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD), + |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS), /* supports */ static_cast(0x0), /* audioIns */ 2, /* audioOuts */ 4, @@ -425,8 +432,7 @@ static const NativePluginDescriptor rev1StereoDesc = { /* category */ NATIVE_PLUGIN_CATEGORY_DELAY, /* hints */ static_cast(NATIVE_PLUGIN_IS_RTSAFE |NATIVE_PLUGIN_HAS_UI - |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS - |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD), + |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS), /* supports */ static_cast(0x0), /* audioIns */ 2, /* audioOuts */ 2, diff --git a/source/native-plugins/zita-rev1/global.h b/source/native-plugins/zita-rev1/global.h index 358e353e2..1d0cf9b9b 100644 --- a/source/native-plugins/zita-rev1/global.h +++ b/source/native-plugins/zita-rev1/global.h @@ -1,7 +1,7 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2010 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/source/native-plugins/zita-rev1/guiclass.cc b/source/native-plugins/zita-rev1/guiclass.cc index c775e6c89..151133c54 100644 --- a/source/native-plugins/zita-rev1/guiclass.cc +++ b/source/native-plugins/zita-rev1/guiclass.cc @@ -1,7 +1,7 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2010 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/source/native-plugins/zita-rev1/guiclass.h b/source/native-plugins/zita-rev1/guiclass.h index 788e0c5e8..8fd7b30de 100644 --- a/source/native-plugins/zita-rev1/guiclass.h +++ b/source/native-plugins/zita-rev1/guiclass.h @@ -1,7 +1,7 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2010 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/source/native-plugins/zita-rev1/jclient.cc b/source/native-plugins/zita-rev1/jclient.cc index 26d90cc06..795f2579f 100644 --- a/source/native-plugins/zita-rev1/jclient.cc +++ b/source/native-plugins/zita-rev1/jclient.cc @@ -1,7 +1,7 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2010 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/source/native-plugins/zita-rev1/jclient.h b/source/native-plugins/zita-rev1/jclient.h index 74a0186ae..8109ca10f 100644 --- a/source/native-plugins/zita-rev1/jclient.h +++ b/source/native-plugins/zita-rev1/jclient.h @@ -1,7 +1,7 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2010 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/source/native-plugins/zita-rev1/mainwin.cc b/source/native-plugins/zita-rev1/mainwin.cc index 9b5def66b..a5cc37351 100644 --- a/source/native-plugins/zita-rev1/mainwin.cc +++ b/source/native-plugins/zita-rev1/mainwin.cc @@ -1,7 +1,7 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2010 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/source/native-plugins/zita-rev1/mainwin.h b/source/native-plugins/zita-rev1/mainwin.h index 389b4dc7e..19470a9fa 100644 --- a/source/native-plugins/zita-rev1/mainwin.h +++ b/source/native-plugins/zita-rev1/mainwin.h @@ -1,7 +1,7 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2010 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/source/native-plugins/zita-rev1/pareq.cc b/source/native-plugins/zita-rev1/pareq.cc index 8f4be36d2..ed5c6301a 100644 --- a/source/native-plugins/zita-rev1/pareq.cc +++ b/source/native-plugins/zita-rev1/pareq.cc @@ -1,7 +1,7 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2010 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/source/native-plugins/zita-rev1/pareq.h b/source/native-plugins/zita-rev1/pareq.h index 6216d6882..69705fba7 100644 --- a/source/native-plugins/zita-rev1/pareq.h +++ b/source/native-plugins/zita-rev1/pareq.h @@ -1,7 +1,7 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2010 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/source/native-plugins/zita-rev1/png2img.cc b/source/native-plugins/zita-rev1/png2img.cc index 2aab4c3c1..3ab424c7f 100644 --- a/source/native-plugins/zita-rev1/png2img.cc +++ b/source/native-plugins/zita-rev1/png2img.cc @@ -1,7 +1,7 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2007-2010 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/source/native-plugins/zita-rev1/png2img.h b/source/native-plugins/zita-rev1/png2img.h index 7fce89db7..1ff3db513 100644 --- a/source/native-plugins/zita-rev1/png2img.h +++ b/source/native-plugins/zita-rev1/png2img.h @@ -1,7 +1,7 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2007-2010 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/source/native-plugins/zita-rev1/reverb.cc b/source/native-plugins/zita-rev1/reverb.cc index d4da87ed0..9c651ba67 100644 --- a/source/native-plugins/zita-rev1/reverb.cc +++ b/source/native-plugins/zita-rev1/reverb.cc @@ -1,7 +1,7 @@ // ----------------------------------------------------------------------- // // Copyright (C) 2003-2010 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/source/native-plugins/zita-rev1/reverb.h b/source/native-plugins/zita-rev1/reverb.h index 0860ccf28..68d1584c5 100644 --- a/source/native-plugins/zita-rev1/reverb.h +++ b/source/native-plugins/zita-rev1/reverb.h @@ -1,7 +1,7 @@ // ----------------------------------------------------------------------- // // Copyright (C) 2003-2011 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/source/native-plugins/zita-rev1/rotary.cc b/source/native-plugins/zita-rev1/rotary.cc index fcd4575ca..c3c58c9f0 100644 --- a/source/native-plugins/zita-rev1/rotary.cc +++ b/source/native-plugins/zita-rev1/rotary.cc @@ -1,7 +1,7 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2010 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/source/native-plugins/zita-rev1/rotary.h b/source/native-plugins/zita-rev1/rotary.h index d9cd57c2a..8b8bb9258 100644 --- a/source/native-plugins/zita-rev1/rotary.h +++ b/source/native-plugins/zita-rev1/rotary.h @@ -1,7 +1,7 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2010 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/source/native-plugins/zita-rev1/styles.cc b/source/native-plugins/zita-rev1/styles.cc index 94f41e62a..d19d09300 100644 --- a/source/native-plugins/zita-rev1/styles.cc +++ b/source/native-plugins/zita-rev1/styles.cc @@ -1,7 +1,7 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2010 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/source/native-plugins/zita-rev1/styles.h b/source/native-plugins/zita-rev1/styles.h index dae6a9f3e..3b3cfbab0 100644 --- a/source/native-plugins/zita-rev1/styles.h +++ b/source/native-plugins/zita-rev1/styles.h @@ -1,7 +1,7 @@ // ---------------------------------------------------------------------- // // Copyright (C) 2010 Fons Adriaensen -// Modified by falkTX on Jan 2015 for inclusion in Carla +// Modified by falkTX on Jan-Apr 2015 for inclusion in Carla // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/source/native-plugins/zynaddsubfx-synth.cpp b/source/native-plugins/zynaddsubfx-synth.cpp index e910bd45c..96e196f14 100644 --- a/source/native-plugins/zynaddsubfx-synth.cpp +++ b/source/native-plugins/zynaddsubfx-synth.cpp @@ -509,7 +509,7 @@ protected: void setCustomData(const char* const key, const char* const value) override { - CARLA_SAFE_ASSERT_RETURN(key != nullptr,); + CARLA_SAFE_ASSERT_RETURN(key != nullptr && key[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(value != nullptr,); /**/ if (std::strcmp(key, "CarlaAlternateFile1") == 0) // xmz