| @@ -90,6 +90,7 @@ carla-discovery-posix64 | |||||
| carla-frontend | carla-frontend | ||||
| carla-lv2-export | carla-lv2-export | ||||
| bls1-ui | |||||
| rev1-ui | rev1-ui | ||||
| zynaddsubfx-ui | zynaddsubfx-ui | ||||
| @@ -412,7 +412,11 @@ ifeq ($(EXPERIMENTAL_PLUGINS),true) | |||||
| install -d $(DESTDIR)$(PREFIX)/share/carla/resources/rev1/ | install -d $(DESTDIR)$(PREFIX)/share/carla/resources/rev1/ | ||||
| endif | endif | ||||
| install -d $(DESTDIR)$(PREFIX)/share/carla/resources/nekofilter/ | 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/ | 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/16x16/apps/ | ||||
| install -d $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/ | install -d $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/ | ||||
| install -d $(DESTDIR)$(PREFIX)/share/icons/hicolor/128x128/apps/ | install -d $(DESTDIR)$(PREFIX)/share/icons/hicolor/128x128/apps/ | ||||
| @@ -531,6 +535,7 @@ ifeq ($(EXPERIMENTAL_PLUGINS),true) | |||||
| $(DESTDIR)$(PREFIX)/share/carla/resources/rev1/ | $(DESTDIR)$(PREFIX)/share/carla/resources/rev1/ | ||||
| install -m 755 \ | install -m 755 \ | ||||
| bin/resources/bls1-ui \ | |||||
| bin/resources/rev1-ui \ | bin/resources/rev1-ui \ | ||||
| $(DESTDIR)$(PREFIX)/share/carla/resources/ | $(DESTDIR)$(PREFIX)/share/carla/resources/ | ||||
| endif | endif | ||||
| @@ -541,13 +546,13 @@ endif | |||||
| ifeq ($(HAVE_ZYN_DEPS),true) | ifeq ($(HAVE_ZYN_DEPS),true) | ||||
| ifeq ($(HAVE_ZYN_UI_DEPS),true) | ifeq ($(HAVE_ZYN_UI_DEPS),true) | ||||
| install -m 755 \ | |||||
| bin/resources/zynaddsubfx-ui \ | |||||
| $(DESTDIR)$(PREFIX)/share/carla/resources/ | |||||
| install -m 644 \ | install -m 644 \ | ||||
| bin/resources/zynaddsubfx/*.png \ | bin/resources/zynaddsubfx/*.png \ | ||||
| $(DESTDIR)$(PREFIX)/share/carla/resources/zynaddsubfx/ | $(DESTDIR)$(PREFIX)/share/carla/resources/zynaddsubfx/ | ||||
| install -m 755 \ | |||||
| bin/resources/zynaddsubfx-ui \ | |||||
| $(DESTDIR)$(PREFIX)/share/carla/resources/ | |||||
| endif | endif | ||||
| endif | endif | ||||
| @@ -13,6 +13,19 @@ include ../modules/Makefile.mk | |||||
| BUILD_C_FLAGS += -I.. | BUILD_C_FLAGS += -I.. | ||||
| BUILD_CXX_FLAGS += -I.. -isystem $(CWD)/modules -I$(CWD)/modules/distrho | 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 | # Flags for ZynAddSubFX | ||||
| @@ -156,7 +169,9 @@ OBJS += \ | |||||
| $(OBJDIR)/zita-bls1.cpp.o \ | $(OBJDIR)/zita-bls1.cpp.o \ | ||||
| $(OBJDIR)/zita-rev1.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 | endif | ||||
| # ---------------------------------------------------------------------------------------------------------------------------- | # ---------------------------------------------------------------------------------------------------------------------------- | ||||
| @@ -179,10 +194,15 @@ $(MODULEDIR)/$(MODULENAME).a: $(OBJS) | |||||
| @rm -f $@ | @rm -f $@ | ||||
| @$(AR) crs $@ $^ | @$(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 | resources/rev1-ui$(APP_EXT): $(OBJDIR)/zita-rev1-ui.cpp.o | ||||
| -@mkdir -p $(OBJDIR) | -@mkdir -p $(OBJDIR) | ||||
| @echo "Linking zita-rev1-ui" | @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 | resources/zynaddsubfx-ui$(APP_EXT): $(OBJDIR)/zynaddsubfx-ui.cpp.o | ||||
| -@mkdir -p $(OBJDIR) | -@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) | -@mkdir -p $(OBJDIR) | ||||
| @echo "Compiling $<" | @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) | -@mkdir -p $(OBJDIR) | ||||
| @echo "Compiling $<" | @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) | -@mkdir -p $(OBJDIR) | ||||
| @echo "Compiling $<" | @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 $(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 | -include $(OBJDIR)/zynaddsubfx-ui.cpp.d | ||||
| # ---------------------------------------------------------------------------------------------------------------------------- | # ---------------------------------------------------------------------------------------------------------------------------- | ||||
| @@ -0,0 +1,191 @@ | |||||
| /* | |||||
| * Carla Native Plugins | |||||
| * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com> | |||||
| * | |||||
| * 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; | |||||
| } | |||||
| // -------------------------------------------------------------------------------------------- | |||||
| @@ -15,22 +15,15 @@ | |||||
| * For a full copy of the GNU General Public License see the doc/GPL.txt file. | * 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 "CarlaJuceUtils.hpp" | ||||
| #include "juce_audio_basics.h" | #include "juce_audio_basics.h" | ||||
| #include "zita-common.hpp" | |||||
| #include "zita-bls1/guiclass.cc" | |||||
| #include "zita-bls1/hp3filt.cc" | #include "zita-bls1/hp3filt.cc" | ||||
| #include "zita-bls1/jclient.cc" | #include "zita-bls1/jclient.cc" | ||||
| #include "zita-bls1/lfshelf2.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/shuffler.cc" | ||||
| #include "zita-bls1/styles.cc" | |||||
| using juce::FloatVectorOperations; | using juce::FloatVectorOperations; | ||||
| using juce::ScopedPointer; | using juce::ScopedPointer; | ||||
| @@ -40,9 +33,7 @@ using namespace BLS1; | |||||
| // ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
| // BLS1 Plugin | // BLS1 Plugin | ||||
| class BLS1Plugin : public NativePluginClass, | |||||
| public X_handler_thread<Mainwin>::SetValueCallback, | |||||
| private Mainwin::ValueChangedCallback | |||||
| class BLS1Plugin : public NativePluginAndUiClass | |||||
| { | { | ||||
| public: | public: | ||||
| static const uint32_t kNumInputs = 2; | static const uint32_t kNumInputs = 2; | ||||
| @@ -59,15 +50,9 @@ public: | |||||
| }; | }; | ||||
| BLS1Plugin(const NativeHostDescriptor* const host) | BLS1Plugin(const NativeHostDescriptor* const host) | ||||
| : NativePluginClass(host), | |||||
| : NativePluginAndUiClass(host, "bls1-ui"), | |||||
| fJackClient(), | fJackClient(), | ||||
| xresman(), | |||||
| jclient(nullptr), | jclient(nullptr), | ||||
| display(nullptr), | |||||
| rootwin(nullptr), | |||||
| mainwin(nullptr), | |||||
| handler(nullptr), | |||||
| handlerThread(this), | |||||
| leakDetector_BLS1Plugin() | leakDetector_BLS1Plugin() | ||||
| { | { | ||||
| CARLA_SAFE_ASSERT(host != nullptr); | CARLA_SAFE_ASSERT(host != nullptr); | ||||
| @@ -78,12 +63,6 @@ public: | |||||
| fJackClient.bufferSize = getBufferSize(); | fJackClient.bufferSize = getBufferSize(); | ||||
| fJackClient.sampleRate = getSampleRate(); | 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 | // set initial values | ||||
| fParameters[kParameterINPBAL] = 0.0f; | fParameters[kParameterINPBAL] = 0.0f; | ||||
| fParameters[kParameterHPFILT] = 40.0f; | fParameters[kParameterHPFILT] = 40.0f; | ||||
| @@ -92,10 +71,7 @@ public: | |||||
| fParameters[kParameterLFFREQ] = 80.0f; | fParameters[kParameterLFFREQ] = 80.0f; | ||||
| fParameters[kParameterLFGAIN] = 0.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); | 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<Window>(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 | // Plugin dispatcher calls | ||||
| void bufferSizeChanged(const uint32_t bufferSize) override | void bufferSizeChanged(const uint32_t bufferSize) override | ||||
| { | { | ||||
| fJackClient.bufferSize = bufferSize; | fJackClient.bufferSize = bufferSize; | ||||
| _recreateZitaClient(); | |||||
| } | } | ||||
| void sampleRateChanged(const double sampleRate) override | void sampleRateChanged(const double sampleRate) override | ||||
| { | { | ||||
| fJackClient.sampleRate = sampleRate; | 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; | jack_client_t fJackClient; | ||||
| // Zita stuff (core) | // Zita stuff (core) | ||||
| X_resman xresman; | |||||
| ScopedPointer<Jclient> jclient; | |||||
| ScopedPointer<X_display> display; | |||||
| ScopedPointer<X_rootwin> rootwin; | |||||
| ScopedPointer<Mainwin> mainwin; | |||||
| ScopedPointer<X_handler> handler; | |||||
| X_handler_thread<Mainwin> handlerThread; | |||||
| ScopedPointer<Jclient> jclient; | |||||
| // Parameters | |||||
| float fParameters[kParameterNROTARY]; | 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) | PluginClassEND(BLS1Plugin) | ||||
| CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(BLS1Plugin) | CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(BLS1Plugin) | ||||
| }; | }; | ||||
| @@ -381,9 +260,7 @@ static const NativePluginDescriptor bls1Desc = { | |||||
| /* category */ NATIVE_PLUGIN_CATEGORY_FILTER, | /* category */ NATIVE_PLUGIN_CATEGORY_FILTER, | ||||
| /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE | /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE | ||||
| |NATIVE_PLUGIN_HAS_UI | |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<NativePluginSupports>(0x0), | /* supports */ static_cast<NativePluginSupports>(0x0), | ||||
| /* audioIns */ BLS1Plugin::kNumInputs, | /* audioIns */ BLS1Plugin::kNumInputs, | ||||
| /* audioOuts */ BLS1Plugin::kNumOutputs, | /* audioOuts */ BLS1Plugin::kNumOutputs, | ||||
| @@ -1,8 +1,8 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| // the Free Software Foundation; either version 2 of the License, or | // the Free Software Foundation; either version 2 of the License, or | ||||
| @@ -1,8 +1,8 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| // the Free Software Foundation; either version 2 of the License, or | // the Free Software Foundation; either version 2 of the License, or | ||||
| @@ -1,8 +1,8 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| // the Free Software Foundation; either version 2 of the License, or | // the Free Software Foundation; either version 2 of the License, or | ||||
| @@ -1,8 +1,8 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| // the Free Software Foundation; either version 2 of the License, or | // the Free Software Foundation; either version 2 of the License, or | ||||
| @@ -1,8 +1,8 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| // the Free Software Foundation; either version 2 of the License, or | // the Free Software Foundation; either version 2 of the License, or | ||||
| @@ -1,8 +1,8 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| // the Free Software Foundation; either version 2 of the License, or | // the Free Software Foundation; either version 2 of the License, or | ||||
| @@ -26,11 +26,10 @@ | |||||
| namespace BLS1 { | namespace BLS1 { | ||||
| Jclient::Jclient (const char *jname, jack_client_t *jclient) : | |||||
| Jclient::Jclient (jack_client_t *jclient) : | |||||
| A_thread ("Jclient"), | A_thread ("Jclient"), | ||||
| _jack_client (jclient), | _jack_client (jclient), | ||||
| _active (false), | _active (false), | ||||
| _jname (0), | |||||
| _inpbal0 (0), | _inpbal0 (0), | ||||
| _inpbal1 (0), | _inpbal1 (0), | ||||
| _ga (1.0f), | _ga (1.0f), | ||||
| @@ -38,7 +37,7 @@ Jclient::Jclient (const char *jname, jack_client_t *jclient) : | |||||
| _da (0.0f), | _da (0.0f), | ||||
| _db (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_set_process_callback (_jack_client, jack_static_process, (void *) this); | ||||
| jack_on_shutdown (_jack_client, jack_static_shutdown, (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); | _fsamp = jack_get_sample_rate (_jack_client); | ||||
| _psize = jack_get_buffer_size (_jack_client); | _psize = jack_get_buffer_size (_jack_client); | ||||
| if (_psize > 4096) | if (_psize > 4096) | ||||
| { | { | ||||
| fprintf (stderr, "Period size can't be more than 4096.\n"); | fprintf (stderr, "Period size can't be more than 4096.\n"); | ||||
| exit (1); | |||||
| return; | |||||
| } | } | ||||
| if (_psize & (_psize - 1)) | if (_psize & (_psize - 1)) | ||||
| { | { | ||||
| fprintf (stderr, "Period size must be a power of 2.\n"); | 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 [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); | _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); | _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); | _hpfilt.setfsamp (_fsamp); | ||||
| _lshelf.setfsamp (_fsamp); | _lshelf.setfsamp (_fsamp); | ||||
| _lshelf.bypass (false); | _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; | _nsamp = 0; | ||||
| _active = true; | _active = true; | ||||
| } | } | ||||
| @@ -1,8 +1,8 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| // the Free Software Foundation; either version 2 of the License, or | // the Free Software Foundation; either version 2 of the License, or | ||||
| @@ -41,11 +41,9 @@ class Jclient : public A_thread | |||||
| { | { | ||||
| public: | public: | ||||
| Jclient (const char *jname, jack_client_t *jclient); | |||||
| Jclient (jack_client_t *jclient); | |||||
| ~Jclient (void); | ~Jclient (void); | ||||
| const char *jname (void) const { return _jname; } | |||||
| void set_inpbal (float diff) | void set_inpbal (float diff) | ||||
| { | { | ||||
| _inpbal0 = diff; | _inpbal0 = diff; | ||||
| @@ -68,7 +66,7 @@ public: | |||||
| private: | private: | ||||
| void init_jack (const char *jname); | |||||
| void init_jack (void); | |||||
| void close_jack (void); | void close_jack (void); | ||||
| void jack_shutdown (void); | void jack_shutdown (void); | ||||
| int jack_process (int nframes); | int jack_process (int nframes); | ||||
| @@ -79,7 +77,6 @@ private: | |||||
| jack_port_t *_inpports [2]; | jack_port_t *_inpports [2]; | ||||
| jack_port_t *_outports [2]; | jack_port_t *_outports [2]; | ||||
| bool _active; | bool _active; | ||||
| const char *_jname; | |||||
| unsigned int _fsamp; | unsigned int _fsamp; | ||||
| int _psize; | int _psize; | ||||
| int _fragm; | int _fragm; | ||||
| @@ -1,8 +1,8 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| // the Free Software Foundation; either version 2 of the License, or | // the Free Software Foundation; either version 2 of the License, or | ||||
| @@ -1,8 +1,8 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| // the Free Software Foundation; either version 2 of the License, or | // the Free Software Foundation; either version 2 of the License, or | ||||
| @@ -1,8 +1,8 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| // the Free Software Foundation; either version 2 of the License, or | // the Free Software Foundation; either version 2 of the License, or | ||||
| @@ -30,25 +30,21 @@ | |||||
| namespace BLS1 { | 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"), | A_thread ("Main"), | ||||
| X_window (parent, xp, yp, XSIZE, YSIZE, XftColors [C_MAIN_BG]->pixel), | X_window (parent, xp, yp, XSIZE, YSIZE, XftColors [C_MAIN_BG]->pixel), | ||||
| _stop (false), | _stop (false), | ||||
| _xres (xres), | _xres (xres), | ||||
| _jclient (jclient), | |||||
| _touch (false), | _touch (false), | ||||
| _valuecb (valuecb) | _valuecb (valuecb) | ||||
| { | { | ||||
| X_hints H; | X_hints H; | ||||
| char s [1024]; | |||||
| int i; | int i; | ||||
| _atom = XInternAtom (dpy (), "WM_DELETE_WINDOW", True); | _atom = XInternAtom (dpy (), "WM_DELETE_WINDOW", True); | ||||
| XSetWMProtocols (dpy (), win (), &_atom, 1); | XSetWMProtocols (dpy (), win (), &_atom, 1); | ||||
| _atom = XInternAtom (dpy (), "WM_PROTOCOLS", True); | _atom = XInternAtom (dpy (), "WM_PROTOCOLS", True); | ||||
| sprintf (s, "%s", jclient->jname ()); | |||||
| x_set_title (s); | |||||
| H.position (xp, yp); | H.position (xp, yp); | ||||
| H.minsize (XSIZE, YSIZE); | H.minsize (XSIZE, YSIZE); | ||||
| H.maxsize (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 ()); | H.rclas (xres->rclas ()); | ||||
| x_apply (&H); | 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 [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 [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); | _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) | Mainwin::~Mainwin (void) | ||||
| { | { | ||||
| RotaryCtl::fini (); | |||||
| } | } | ||||
| @@ -133,16 +131,15 @@ void Mainwin::handle_time (void) | |||||
| if (--_timeout == 0) numdisp (-1); | if (--_timeout == 0) numdisp (-1); | ||||
| } | } | ||||
| if (_touch && _jclient->shuffler ()->ready ()) | |||||
| if (_touch) | |||||
| { | { | ||||
| double v1 = _rotary [SHGAIN]->value (), v2 = _rotary [SHFREQ]->value (); | double v1 = _rotary [SHGAIN]->value (), v2 = _rotary [SHFREQ]->value (); | ||||
| _jclient->shuffler ()->prepare (v1, v2); | |||||
| _valuecb->valueChangedCallback (SHGAIN, v1); | _valuecb->valueChangedCallback (SHGAIN, v1); | ||||
| _valuecb->valueChangedCallback (SHFREQ, v2); | _valuecb->valueChangedCallback (SHFREQ, v2); | ||||
| _touch = 0; | _touch = 0; | ||||
| } | } | ||||
| inc_time (50000); | |||||
| inc_time (5000); | |||||
| XFlush (dpy ()); | XFlush (dpy ()); | ||||
| } | } | ||||
| @@ -178,12 +175,10 @@ void Mainwin::handle_callb (int type, X_window *W, XEvent *E) | |||||
| { | { | ||||
| case INPBAL: | case INPBAL: | ||||
| v = _rotary [INPBAL]->value (); | v = _rotary [INPBAL]->value (); | ||||
| _jclient->set_inpbal (v); | |||||
| _valuecb->valueChangedCallback (INPBAL, v); | _valuecb->valueChangedCallback (INPBAL, v); | ||||
| break; | break; | ||||
| case HPFILT: | case HPFILT: | ||||
| v = _rotary [HPFILT]->value (); | v = _rotary [HPFILT]->value (); | ||||
| _jclient->set_hpfilt (v); | |||||
| _valuecb->valueChangedCallback (HPFILT, v); | _valuecb->valueChangedCallback (HPFILT, v); | ||||
| break; | break; | ||||
| case SHGAIN: | case SHGAIN: | ||||
| @@ -194,7 +189,6 @@ void Mainwin::handle_callb (int type, X_window *W, XEvent *E) | |||||
| case LFGAIN: | case LFGAIN: | ||||
| v = _rotary [LFGAIN]->value (); | v = _rotary [LFGAIN]->value (); | ||||
| v2 = _rotary [LFFREQ]->value (); | v2 = _rotary [LFFREQ]->value (); | ||||
| _jclient->set_loshelf (v, v2); | |||||
| _valuecb->valueChangedCallback (LFGAIN, v); | _valuecb->valueChangedCallback (LFGAIN, v); | ||||
| _valuecb->valueChangedCallback (LFFREQ, v2); | _valuecb->valueChangedCallback (LFFREQ, v2); | ||||
| break; | break; | ||||
| @@ -1,8 +1,8 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| // the Free Software Foundation; either version 2 of the License, or | // the Free Software Foundation; either version 2 of the License, or | ||||
| @@ -29,7 +29,7 @@ | |||||
| #include "jclient.h" | #include "jclient.h" | ||||
| #include "global.h" | #include "global.h" | ||||
| class BLS1Plugin; | |||||
| class ZitaPipeClient; | |||||
| namespace BLS1 { | namespace BLS1 { | ||||
| @@ -43,9 +43,10 @@ public: | |||||
| virtual void valueChangedCallback(uint, double) = 0; | virtual void valueChangedCallback(uint, double) = 0; | ||||
| }; | }; | ||||
| enum { XSIZE = 540, YSIZE = 75 }; | 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 (void); | ||||
| Mainwin (const Mainwin&); | Mainwin (const Mainwin&); | ||||
| Mainwin& operator=(const Mainwin&); | Mainwin& operator=(const Mainwin&); | ||||
| @@ -72,7 +73,6 @@ private: | |||||
| Atom _atom; | Atom _atom; | ||||
| bool _stop; | bool _stop; | ||||
| X_resman *_xres; | X_resman *_xres; | ||||
| Jclient *_jclient; | |||||
| RotaryCtl *_rotary [NROTARY]; | RotaryCtl *_rotary [NROTARY]; | ||||
| X_textip *_numtext; | X_textip *_numtext; | ||||
| int _parmind; | int _parmind; | ||||
| @@ -81,7 +81,7 @@ private: | |||||
| ValueChangedCallback* _valuecb; | ValueChangedCallback* _valuecb; | ||||
| friend class ::BLS1Plugin; | |||||
| friend class ::ZitaPipeClient; | |||||
| }; | }; | ||||
| @@ -1,8 +1,8 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2007-2010 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2007-2010 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| // the Free Software Foundation; either version 2 of the License, or | // the Free Software Foundation; either version 2 of the License, or | ||||
| @@ -1,8 +1,8 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2007-2010 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2007-2010 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| // the Free Software Foundation; either version 2 of the License, or | // the Free Software Foundation; either version 2 of the License, or | ||||
| @@ -1,8 +1,8 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| // the Free Software Foundation; either version 2 of the License, or | // the Free Software Foundation; either version 2 of the License, or | ||||
| @@ -28,6 +28,8 @@ | |||||
| namespace BLS1 { | namespace BLS1 { | ||||
| cairo_t *RotaryCtl::_cairotype = 0; | |||||
| cairo_surface_t *RotaryCtl::_cairosurf = 0; | |||||
| int RotaryCtl::_wb_up = 4; | int RotaryCtl::_wb_up = 4; | ||||
| int RotaryCtl::_wb_dn = 5; | int RotaryCtl::_wb_dn = 5; | ||||
| @@ -59,10 +61,6 @@ RotaryCtl::RotaryCtl (X_window *parent, | |||||
| { | { | ||||
| x_add_events ( ExposureMask | x_add_events ( ExposureMask | ||||
| | Button1MotionMask | ButtonPressMask | ButtonReleaseMask); | | 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) | void RotaryCtl::handle_event (XEvent *E) | ||||
| { | { | ||||
| switch (E->type) | switch (E->type) | ||||
| @@ -1,8 +1,8 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| // the Free Software Foundation; either version 2 of the License, or | // 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 set_value (double v) = 0; | ||||
| virtual void get_string (char *p, int n) {} | 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_up; | ||||
| static int _wb_dn; | static int _wb_dn; | ||||
| @@ -107,9 +110,8 @@ private: | |||||
| virtual int handle_motion (int dx, int dy) = 0; | virtual int handle_motion (int dx, int dy) = 0; | ||||
| virtual int handle_mwheel (int dw) = 0; | virtual int handle_mwheel (int dw) = 0; | ||||
| juce::SharedResourcePointer<x_cairo_t> _cairo; | |||||
| cairo_t *_cairotype; | |||||
| cairo_surface_t *_cairosurf; | |||||
| static cairo_t *_cairotype; | |||||
| static cairo_surface_t *_cairosurf; | |||||
| }; | }; | ||||
| @@ -1,8 +1,8 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| // the Free Software Foundation; either version 2 of the License, or | // 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; | 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.configure (1, 1, _iplen, _quant, _minpt, _minpt); | ||||
| _convproc.impdata_create (0, 0, 1, _fft_time, 0, _iplen); | _convproc.impdata_create (0, 0, 1, _fft_time, 0, _iplen); | ||||
| _convproc.start_process (abspri, policy); | |||||
| _convproc.start_process (35, SCHED_FIFO); | |||||
| } | } | ||||
| @@ -1,8 +1,8 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| // the Free Software Foundation; either version 2 of the License, or | // the Free Software Foundation; either version 2 of the License, or | ||||
| @@ -37,7 +37,7 @@ public: | |||||
| Shuffler (void); | Shuffler (void); | ||||
| ~Shuffler (void); | ~Shuffler (void); | ||||
| void init (int fsamp, int quant, int abspri, int policy); | |||||
| void init (int fsamp, int quant); | |||||
| void reset (void); | void reset (void); | ||||
| void prepare (float gain, float freq); | void prepare (float gain, float freq); | ||||
| void process (int nsamp, float *inp [], float *out []); | void process (int nsamp, float *inp [], float *out []); | ||||
| @@ -1,8 +1,8 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| // the Free Software Foundation; either version 2 of the License, or | // the Free Software Foundation; either version 2 of the License, or | ||||
| @@ -24,6 +24,7 @@ | |||||
| #include "png2img.h" | #include "png2img.h" | ||||
| #include "CarlaString.hpp" | #include "CarlaString.hpp" | ||||
| #include <dlfcn.h> | |||||
| namespace BLS1 { | namespace BLS1 { | ||||
| @@ -44,9 +45,20 @@ RotaryImg lffreq_img; | |||||
| RotaryImg lfgain_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_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_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); | 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.bgnd = XftColors [C_TEXT_BG]->pixel; | ||||
| tstyle1.color.normal.text = XftColors [C_TEXT_FG]; | 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; | if (!inputsect || !shuffsect || !lfshfsect) return 1; | ||||
| inpbal_img._backg = XftColors [C_MAIN_BG]; | inpbal_img._backg = XftColors [C_MAIN_BG]; | ||||
| @@ -1,8 +1,8 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2011 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| // the Free Software Foundation; either version 2 of the License, or | // 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 void styles_fini (X_display *disp); | ||||
| extern XftColor *XftColors [NXFTCOLORS]; | extern XftColor *XftColors [NXFTCOLORS]; | ||||
| @@ -39,7 +39,7 @@ public: | |||||
| ~ZitaPipeClient() noexcept override | ~ZitaPipeClient() noexcept override | ||||
| { | { | ||||
| if (fQuitReceived) | |||||
| if (fQuitReceived || ! isPipeRunning()) | |||||
| return; | return; | ||||
| const CarlaMutexLocker cml(getPipeLock()); | const CarlaMutexLocker cml(getPipeLock()); | ||||
| @@ -113,7 +113,8 @@ protected: | |||||
| if (index == Mainwin::R_RGXYZ) | if (index == Mainwin::R_RGXYZ) | ||||
| index = Mainwin::R_OPMIX; | index = Mainwin::R_OPMIX; | ||||
| writeControlMessage(index, value); | |||||
| if (isPipeRunning()) | |||||
| writeControlMessage(index, value); | |||||
| } | } | ||||
| private: | private: | ||||
| @@ -180,7 +181,9 @@ int main(int argc, const char* argv[]) | |||||
| else if (ev == Esync::EV_TIME) | else if (ev == Esync::EV_TIME) | ||||
| { | { | ||||
| handler->next_event(); | handler->next_event(); | ||||
| pipe.idlePipe(); | |||||
| if (pipe.isPipeRunning()) | |||||
| pipe.idlePipe(); | |||||
| } | } | ||||
| } | } | ||||
| while (ev != EV_EXIT && ! pipe.quitRequested()); | while (ev != EV_EXIT && ! pipe.quitRequested()); | ||||
| @@ -66,8 +66,6 @@ public: | |||||
| fJackClient.bufferSize = getBufferSize(); | fJackClient.bufferSize = getBufferSize(); | ||||
| fJackClient.sampleRate = getSampleRate(); | fJackClient.sampleRate = getSampleRate(); | ||||
| jclient = new Jclient(&fJackClient, isAmbisonic); | |||||
| // set initial values | // set initial values | ||||
| fParameters[kParameterDELAY] = 0.04f; | fParameters[kParameterDELAY] = 0.04f; | ||||
| fParameters[kParameterXOVER] = 200.0f; | fParameters[kParameterXOVER] = 200.0f; | ||||
| @@ -84,27 +82,7 @@ public: | |||||
| else | else | ||||
| fParameters[kParameterOPMIXorRGXYZ] = 0.5f; | 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 | void bufferSizeChanged(const uint32_t bufferSize) override | ||||
| { | { | ||||
| fJackClient.bufferSize = bufferSize; | fJackClient.bufferSize = bufferSize; | ||||
| _recreateZitaClient(); | |||||
| } | } | ||||
| void sampleRateChanged(const double sampleRate) override | void sampleRateChanged(const double sampleRate) override | ||||
| { | { | ||||
| fJackClient.sampleRate = sampleRate; | fJackClient.sampleRate = sampleRate; | ||||
| _recreateZitaClient(); | |||||
| } | } | ||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| @@ -357,8 +337,36 @@ private: | |||||
| // Zita stuff (core) | // Zita stuff (core) | ||||
| ScopedPointer<Jclient> jclient; | ScopedPointer<Jclient> jclient; | ||||
| // Parameters | |||||
| float fParameters[kParameterNROTARY]; | 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: | public: | ||||
| static NativePluginHandle _instantiateAmbisonic(const NativeHostDescriptor* host) | static NativePluginHandle _instantiateAmbisonic(const NativeHostDescriptor* host) | ||||
| { | { | ||||
| @@ -384,8 +392,7 @@ static const NativePluginDescriptor rev1AmbisonicDesc = { | |||||
| /* category */ NATIVE_PLUGIN_CATEGORY_DELAY, | /* category */ NATIVE_PLUGIN_CATEGORY_DELAY, | ||||
| /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE | /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE | ||||
| |NATIVE_PLUGIN_HAS_UI | |NATIVE_PLUGIN_HAS_UI | ||||
| |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS | |||||
| |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD), | |||||
| |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS), | |||||
| /* supports */ static_cast<NativePluginSupports>(0x0), | /* supports */ static_cast<NativePluginSupports>(0x0), | ||||
| /* audioIns */ 2, | /* audioIns */ 2, | ||||
| /* audioOuts */ 4, | /* audioOuts */ 4, | ||||
| @@ -425,8 +432,7 @@ static const NativePluginDescriptor rev1StereoDesc = { | |||||
| /* category */ NATIVE_PLUGIN_CATEGORY_DELAY, | /* category */ NATIVE_PLUGIN_CATEGORY_DELAY, | ||||
| /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE | /* hints */ static_cast<NativePluginHints>(NATIVE_PLUGIN_IS_RTSAFE | ||||
| |NATIVE_PLUGIN_HAS_UI | |NATIVE_PLUGIN_HAS_UI | ||||
| |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS | |||||
| |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD), | |||||
| |NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS), | |||||
| /* supports */ static_cast<NativePluginSupports>(0x0), | /* supports */ static_cast<NativePluginSupports>(0x0), | ||||
| /* audioIns */ 2, | /* audioIns */ 2, | ||||
| /* audioOuts */ 2, | /* audioOuts */ 2, | ||||
| @@ -1,7 +1,7 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2010 Fons Adriaensen <fons@kokkinizita.net> | // Copyright (C) 2010 Fons Adriaensen <fons@kokkinizita.net> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| @@ -1,7 +1,7 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| @@ -1,7 +1,7 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| @@ -1,7 +1,7 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| @@ -1,7 +1,7 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| @@ -1,7 +1,7 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| @@ -1,7 +1,7 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| @@ -1,7 +1,7 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| @@ -1,7 +1,7 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| @@ -1,7 +1,7 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2007-2010 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2007-2010 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| @@ -1,7 +1,7 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2007-2010 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2007-2010 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| @@ -1,7 +1,7 @@ | |||||
| // ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2003-2010 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2003-2010 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| @@ -1,7 +1,7 @@ | |||||
| // ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2003-2011 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2003-2011 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| @@ -1,7 +1,7 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| @@ -1,7 +1,7 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| @@ -1,7 +1,7 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| @@ -1,7 +1,7 @@ | |||||
| // ---------------------------------------------------------------------- | // ---------------------------------------------------------------------- | ||||
| // | // | ||||
| // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org> | // Copyright (C) 2010 Fons Adriaensen <fons@linuxaudio.org> | ||||
| // 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 | // 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 | // it under the terms of the GNU General Public License as published by | ||||
| @@ -509,7 +509,7 @@ protected: | |||||
| void setCustomData(const char* const key, const char* const value) override | 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,); | CARLA_SAFE_ASSERT_RETURN(value != nullptr,); | ||||
| /**/ if (std::strcmp(key, "CarlaAlternateFile1") == 0) // xmz | /**/ if (std::strcmp(key, "CarlaAlternateFile1") == 0) // xmz | ||||