| @@ -50,17 +50,15 @@ const unsigned int MAX_DEFAULT_PARAMETERS = 200; //!< Maximum default number of | |||||
| * \see CarlaPlugin::hints() | * \see CarlaPlugin::hints() | ||||
| * @{ | * @{ | ||||
| */ | */ | ||||
| const unsigned int PLUGIN_IS_BRIDGE = 0x0001; //!< Plugin is a bridge (ie, BridgePlugin). This hint is required because "bridge" itself is not a plugin type. | |||||
| const unsigned int PLUGIN_IS_RTSAFE = 0x0002; //!< Plugin is hard real-time safe. | |||||
| const unsigned int PLUGIN_IS_SYNTH = 0x0004; //!< Plugin is a synthesizer (produces sound). | |||||
| const unsigned int PLUGIN_HAS_GUI = 0x0010; //!< Plugin has its own custom GUI. | |||||
| const unsigned int PLUGIN_USES_CHUNKS = 0x0020; //!< Plugin uses chunks to save internal data.\see CarlaPlugin::chunkData() | |||||
| const unsigned int PLUGIN_USES_SINGLE_THREAD = 0x0040; //!< Plugin needs a single thread for both DSP and UI events. | |||||
| const unsigned int PLUGIN_CAN_DRYWET = 0x0100; //!< Plugin can make use of Dry/Wet controls. | |||||
| const unsigned int PLUGIN_CAN_VOLUME = 0x0200; //!< Plugin can make use of Volume controls. | |||||
| const unsigned int PLUGIN_CAN_BALANCE = 0x0400; //!< Plugin can make use of Left & Right Balance controls. | |||||
| const unsigned int PLUGIN_CAN_PANNING = 0x0800; //!< Plugin can make use of Panning controls. | |||||
| const unsigned int PLUGIN_CAN_FORCE_STEREO = 0x1000; //!< Plugin can be used in forced-stereo mode. | |||||
| const unsigned int PLUGIN_IS_BRIDGE = 0x001; //!< Plugin is a bridge (ie, BridgePlugin). This hint is required because "bridge" itself is not a plugin type. | |||||
| const unsigned int PLUGIN_IS_RTSAFE = 0x002; //!< Plugin is hard real-time safe. | |||||
| const unsigned int PLUGIN_IS_SYNTH = 0x004; //!< Plugin is a synthesizer (produces sound). | |||||
| const unsigned int PLUGIN_HAS_GUI = 0x010; //!< Plugin has its own custom GUI. | |||||
| const unsigned int PLUGIN_HAS_SINGLE_THREAD = 0x020; //!< Plugin needs a single thread for both DSP and UI events. | |||||
| const unsigned int PLUGIN_CAN_DRYWET = 0x100; //!< Plugin can make use of Dry/Wet controls. | |||||
| const unsigned int PLUGIN_CAN_VOLUME = 0x200; //!< Plugin can make use of Volume controls. | |||||
| const unsigned int PLUGIN_CAN_BALANCE = 0x400; //!< Plugin can make use of Left & Right Balance controls. | |||||
| const unsigned int PLUGIN_CAN_PANNING = 0x800; //!< Plugin can make use of Panning controls. | |||||
| /**@}*/ | /**@}*/ | ||||
| /*! | /*! | ||||
| @@ -69,20 +67,17 @@ const unsigned int PLUGIN_CAN_FORCE_STEREO = 0x1000; //!< Plugin can be used i | |||||
| * Various plugin options.\n | * Various plugin options.\n | ||||
| * ON or OFF defines the default plugin value. | * ON or OFF defines the default plugin value. | ||||
| * \see CarlaPlugin::options() | * \see CarlaPlugin::options() | ||||
| * \note PitchBend is disabled by default on VST plugins | |||||
| * @{ | * @{ | ||||
| */ | */ | ||||
| const unsigned int PLUGIN_OPTION_FIXED_BUFFER = 0x001; //!< OFF: Use a constant, fixed size audio buffer (128 or lower is used) | |||||
| const unsigned int PLUGIN_OPTION_FORCE_STEREO = 0x002; //!< OFF: Force mono plugin as stereo | |||||
| const unsigned int PLUGIN_OPTION_SELF_AUTOMATION = 0x004; //!< OFF: Let the plugin handle MIDI-CC automation, not the host | |||||
| const unsigned int PLUGIN_OPTION_USE_CHUNKS = 0x008; //!< ON: Use chunks to save data | |||||
| const unsigned int PLUGIN_OPTION_SEND_ALL_SOUND_OFF = 0x010; //!< ON: Send MIDI ALL_SOUND_OFF / ALL_NOTES_OFF events | |||||
| const unsigned int PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH = 0x020; //!< ON: Send MIDI Note aftertouch events | |||||
| const unsigned int PLUGIN_OPTION_SEND_PITCHBEND = 0x040; //!< ON: Send MIDI Pitchbend events | |||||
| #ifdef WANT_VST | |||||
| const unsigned int PLUGIN_OPTION_VST_SUPPLY_IDLE = 0x100; //!< ON: Idle Plugin's custom GUI (VST only) | |||||
| const unsigned int PLUGIN_OPTION_VST_UPDATE_DISPLAY = 0x200; //!< ON: Recheck plugin properties on updateDisplay message (VST Only) | |||||
| #endif | |||||
| const unsigned int PLUGIN_OPTION_FIXED_BUFFER = 0x001; //!< Use a constant, fixed-size audio buffer | |||||
| const unsigned int PLUGIN_OPTION_FORCE_STEREO = 0x002; //!< Force mono plugin as stereo | |||||
| const unsigned int PLUGIN_OPTION_MAP_PROGRAM_CHANGES = 0x004; //!< Map MIDI-Programs to plugin programs | |||||
| const unsigned int PLUGIN_OPTION_USE_CHUNKS = 0x008; //!< Use chunks to save data | |||||
| const unsigned int PLUGIN_OPTION_SEND_CONTROL_CHANGES = 0x010; //!< Send MIDI CC events | |||||
| const unsigned int PLUGIN_OPTION_SEND_CHANNEL_PRESSURE = 0x020; //!< Send MIDI channel pressure events | |||||
| const unsigned int PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH = 0x040; //!< Send MIDI note aftertouch events | |||||
| const unsigned int PLUGIN_OPTION_SEND_PITCHBEND = 0x080; //!< Send MIDI pitchbend events | |||||
| const unsigned int PLUGIN_OPTION_SEND_ALL_SOUND_OFF = 0x100; //!< Send MIDI ALL_SOUND_OFF / ALL_NOTES_OFF events | |||||
| /**@}*/ | /**@}*/ | ||||
| /*! | /*! | ||||
| @@ -18,7 +18,7 @@ | |||||
| #ifndef __DISTRHO_PLUGIN_3BANDEQ_HPP__ | #ifndef __DISTRHO_PLUGIN_3BANDEQ_HPP__ | ||||
| #define __DISTRHO_PLUGIN_3BANDEQ_HPP__ | #define __DISTRHO_PLUGIN_3BANDEQ_HPP__ | ||||
| #include "DistrhoPlugin.h" | |||||
| #include "DistrhoPlugin.hpp" | |||||
| START_NAMESPACE_DISTRHO | START_NAMESPACE_DISTRHO | ||||
| @@ -19,7 +19,7 @@ | |||||
| #define DISTRHO_PLUGIN_NAME "3 Band EQ" | #define DISTRHO_PLUGIN_NAME "3 Band EQ" | ||||
| #define DISTRHO_PLUGIN_HAS_UI 1 | |||||
| #define DISTRHO_PLUGIN_HAS_UI 0 | |||||
| #define DISTRHO_PLUGIN_IS_SYNTH 0 | #define DISTRHO_PLUGIN_IS_SYNTH 0 | ||||
| #define DISTRHO_PLUGIN_NUM_INPUTS 2 | #define DISTRHO_PLUGIN_NUM_INPUTS 2 | ||||
| @@ -31,14 +31,4 @@ | |||||
| #define DISTRHO_PLUGIN_URI "http://distrho.sf.net/plugins/3BandEQ" | #define DISTRHO_PLUGIN_URI "http://distrho.sf.net/plugins/3BandEQ" | ||||
| #ifdef QTCREATOR_TEST | |||||
| // TESTING | |||||
| # undef DISTRHO_PLUGIN_IS_SYNTH | |||||
| # undef DISTRHO_PLUGIN_WANT_LATENCY | |||||
| # undef DISTRHO_PLUGIN_WANT_STATE | |||||
| # define DISTRHO_PLUGIN_IS_SYNTH 1 | |||||
| # define DISTRHO_PLUGIN_WANT_LATENCY 1 | |||||
| # define DISTRHO_PLUGIN_WANT_STATE 1 | |||||
| #endif | |||||
| #endif // __DISTRHO_PLUGIN_INFO_H__ | #endif // __DISTRHO_PLUGIN_INFO_H__ | ||||
| @@ -18,7 +18,7 @@ | |||||
| #ifndef __DISTRHO_PLUGIN_3BANDSPLITTER_HPP__ | #ifndef __DISTRHO_PLUGIN_3BANDSPLITTER_HPP__ | ||||
| #define __DISTRHO_PLUGIN_3BANDSPLITTER_HPP__ | #define __DISTRHO_PLUGIN_3BANDSPLITTER_HPP__ | ||||
| #include "DistrhoPlugin.h" | |||||
| #include "DistrhoPlugin.hpp" | |||||
| START_NAMESPACE_DISTRHO | START_NAMESPACE_DISTRHO | ||||
| @@ -19,7 +19,7 @@ | |||||
| #define DISTRHO_PLUGIN_NAME "3 Band Splitter" | #define DISTRHO_PLUGIN_NAME "3 Band Splitter" | ||||
| #define DISTRHO_PLUGIN_HAS_UI 1 | |||||
| #define DISTRHO_PLUGIN_HAS_UI 0 | |||||
| #define DISTRHO_PLUGIN_IS_SYNTH 0 | #define DISTRHO_PLUGIN_IS_SYNTH 0 | ||||
| #define DISTRHO_PLUGIN_NUM_INPUTS 2 | #define DISTRHO_PLUGIN_NUM_INPUTS 2 | ||||
| @@ -8,8 +8,8 @@ include ../Makefile.mk | |||||
| # -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
| BUILD_CXX_FLAGS += -I../../libs/distrho-plugin-toolkit | |||||
| BUILD_CXX_FLAGS += $(shell pkg-config --cflags QtGui) | |||||
| BUILD_CXX_FLAGS += -I../../libs/distrho | |||||
| BUILD_CXX_FLAGS += $(shell pkg-config --cflags QtGui gl) | |||||
| LINK_FLAGS += $(shell pkg-config --libs QtGui gl) | LINK_FLAGS += $(shell pkg-config --libs QtGui gl) | ||||
| ifeq ($(HAVE_AF_DEPS),true) | ifeq ($(HAVE_AF_DEPS),true) | ||||
| @@ -33,10 +33,10 @@ OBJS = \ | |||||
| midi-through.c.o | midi-through.c.o | ||||
| # DISTRHO plugins | # DISTRHO plugins | ||||
| # OBJS += \ | |||||
| # distrho-3bandeq.cpp.o \ | |||||
| # distrho-3bandsplitter.cpp.o \ | |||||
| # distrho-pingpongpan.cpp.o | |||||
| OBJS += \ | |||||
| distrho-3bandeq.cpp.o \ | |||||
| distrho-3bandsplitter.cpp.o \ | |||||
| distrho-pingpongpan.cpp.o | |||||
| ifeq ($(HAVE_AF_DEPS),true) | ifeq ($(HAVE_AF_DEPS),true) | ||||
| OBJS += \ | OBJS += \ | ||||
| @@ -18,9 +18,9 @@ | |||||
| #include "CarlaNative.hpp" | #include "CarlaNative.hpp" | ||||
| // Plugin Code | // Plugin Code | ||||
| #include "3bandeq/DistrhoArtwork3BandEQ.cpp" | |||||
| //#include "3bandeq/DistrhoArtwork3BandEQ.cpp" | |||||
| #include "3bandeq/DistrhoPlugin3BandEQ.cpp" | #include "3bandeq/DistrhoPlugin3BandEQ.cpp" | ||||
| #include "3bandeq/DistrhoUI3BandEQ.cpp" | |||||
| //#include "3bandeq/DistrhoUI3BandEQ.cpp" | |||||
| // Carla DISTRHO Plugin | // Carla DISTRHO Plugin | ||||
| #include "distrho/DistrhoPluginCarla.cpp" | #include "distrho/DistrhoPluginCarla.cpp" | ||||
| @@ -31,7 +31,7 @@ START_NAMESPACE_DISTRHO | |||||
| static const PluginDescriptor tBandEqDesc = { | static const PluginDescriptor tBandEqDesc = { | ||||
| /* category */ ::PLUGIN_CATEGORY_EQ, | /* category */ ::PLUGIN_CATEGORY_EQ, | ||||
| /* hints */ static_cast<PluginHints>(::PLUGIN_IS_RTSAFE | ::PLUGIN_HAS_GUI), | |||||
| /* hints */ static_cast<PluginHints>(::PLUGIN_IS_RTSAFE /*| ::PLUGIN_HAS_GUI*/), | |||||
| /* audioIns */ DISTRHO_PLUGIN_NUM_INPUTS, | /* audioIns */ DISTRHO_PLUGIN_NUM_INPUTS, | ||||
| /* audioOuts */ DISTRHO_PLUGIN_NUM_OUTPUTS, | /* audioOuts */ DISTRHO_PLUGIN_NUM_OUTPUTS, | ||||
| /* midiIns */ 0, | /* midiIns */ 0, | ||||
| @@ -18,9 +18,9 @@ | |||||
| #include "CarlaNative.hpp" | #include "CarlaNative.hpp" | ||||
| // Plugin Code | // Plugin Code | ||||
| #include "3bandsplitter/DistrhoArtwork3BandSplitter.cpp" | |||||
| //#include "3bandsplitter/DistrhoArtwork3BandSplitter.cpp" | |||||
| #include "3bandsplitter/DistrhoPlugin3BandSplitter.cpp" | #include "3bandsplitter/DistrhoPlugin3BandSplitter.cpp" | ||||
| #include "3bandsplitter/DistrhoUI3BandSplitter.cpp" | |||||
| //#include "3bandsplitter/DistrhoUI3BandSplitter.cpp" | |||||
| // Carla DISTRHO Plugin | // Carla DISTRHO Plugin | ||||
| #include "distrho/DistrhoPluginCarla.cpp" | #include "distrho/DistrhoPluginCarla.cpp" | ||||
| @@ -31,7 +31,7 @@ START_NAMESPACE_DISTRHO | |||||
| static const PluginDescriptor tBandSplitterDesc = { | static const PluginDescriptor tBandSplitterDesc = { | ||||
| /* category */ ::PLUGIN_CATEGORY_EQ, | /* category */ ::PLUGIN_CATEGORY_EQ, | ||||
| /* hints */ static_cast<PluginHints>(::PLUGIN_IS_RTSAFE | ::PLUGIN_HAS_GUI), | |||||
| /* hints */ static_cast<PluginHints>(::PLUGIN_IS_RTSAFE /*| ::PLUGIN_HAS_GUI*/), | |||||
| /* audioIns */ DISTRHO_PLUGIN_NUM_INPUTS, | /* audioIns */ DISTRHO_PLUGIN_NUM_INPUTS, | ||||
| /* audioOuts */ DISTRHO_PLUGIN_NUM_OUTPUTS, | /* audioOuts */ DISTRHO_PLUGIN_NUM_OUTPUTS, | ||||
| /* midiIns */ 0, | /* midiIns */ 0, | ||||
| @@ -18,9 +18,9 @@ | |||||
| #include "CarlaNative.hpp" | #include "CarlaNative.hpp" | ||||
| // Plugin Code | // Plugin Code | ||||
| #include "pingpongpan/DistrhoArtworkPingPongPan.cpp" | |||||
| //#include "pingpongpan/DistrhoArtworkPingPongPan.cpp" | |||||
| #include "pingpongpan/DistrhoPluginPingPongPan.cpp" | #include "pingpongpan/DistrhoPluginPingPongPan.cpp" | ||||
| #include "pingpongpan/DistrhoUIPingPongPan.cpp" | |||||
| //#include "pingpongpan/DistrhoUIPingPongPan.cpp" | |||||
| // Carla DISTRHO Plugin | // Carla DISTRHO Plugin | ||||
| #include "distrho/DistrhoPluginCarla.cpp" | #include "distrho/DistrhoPluginCarla.cpp" | ||||
| @@ -31,7 +31,7 @@ START_NAMESPACE_DISTRHO | |||||
| static PluginDescriptor tBandEqDesc = { | static PluginDescriptor tBandEqDesc = { | ||||
| /* category */ ::PLUGIN_CATEGORY_UTILITY, | /* category */ ::PLUGIN_CATEGORY_UTILITY, | ||||
| /* hints */ static_cast<PluginHints>(::PLUGIN_IS_RTSAFE | ::PLUGIN_HAS_GUI), | |||||
| /* hints */ static_cast<PluginHints>(::PLUGIN_IS_RTSAFE /*| ::PLUGIN_HAS_GUI*/), | |||||
| /* audioIns */ DISTRHO_PLUGIN_NUM_INPUTS, | /* audioIns */ DISTRHO_PLUGIN_NUM_INPUTS, | ||||
| /* audioOuts */ DISTRHO_PLUGIN_NUM_OUTPUTS, | /* audioOuts */ DISTRHO_PLUGIN_NUM_OUTPUTS, | ||||
| /* midiIns */ 0, | /* midiIns */ 0, | ||||
| @@ -14,15 +14,17 @@ | |||||
| * For a full copy of the license see the LGPL.txt file | * For a full copy of the license see the LGPL.txt file | ||||
| */ | */ | ||||
| #include "carla_native.hpp" | |||||
| #include "carla_utils.hpp" | |||||
| #include <QtGui/QMainWindow> | |||||
| #include "CarlaNative.hpp" | |||||
| #include "CarlaUtils.hpp" | |||||
| #include "DistrhoPluginMain.cpp" | #include "DistrhoPluginMain.cpp" | ||||
| // TODO | |||||
| #undef DISTRHO_PLUGIN_HAS_UI | |||||
| #if DISTRHO_PLUGIN_HAS_UI | #if DISTRHO_PLUGIN_HAS_UI | ||||
| # include "DistrhoUIMain.cpp" | |||||
| #include <QtGui/QMainWindow> | |||||
| #include "DistrhoUIMain.cpp" | |||||
| #endif | #endif | ||||
| // ------------------------------------------------- | // ------------------------------------------------- | ||||
| @@ -36,16 +38,16 @@ START_NAMESPACE_DISTRHO | |||||
| class UICarla : public QMainWindow | class UICarla : public QMainWindow | ||||
| { | { | ||||
| public: | public: | ||||
| UICarla(const HostDescriptor* const host_, PluginInternal* const plugin_) | |||||
| UICarla(const HostDescriptor* const host, PluginInternal* const plugin) | |||||
| : QMainWindow(nullptr), | : QMainWindow(nullptr), | ||||
| host(host_), | |||||
| plugin(plugin_), | |||||
| widget(this), | |||||
| ui(this, (intptr_t)widget.winId(), setParameterCallback, setStateCallback, uiEditParameterCallback, uiSendNoteCallback, uiResizeCallback) | |||||
| kHost(host), | |||||
| kPlugin(plugin), | |||||
| fWidget(this), | |||||
| fUi(this, (intptr_t)fWidget.winId(), setParameterCallback, setStateCallback, uiEditParameterCallback, uiSendNoteCallback, uiResizeCallback) | |||||
| { | { | ||||
| setCentralWidget(&widget); | |||||
| setFixedSize(ui.getWidth(), ui.getHeight()); | |||||
| setWindowTitle(DISTRHO_PLUGIN_NAME); | |||||
| setCentralWidget(&fWidget); | |||||
| setFixedSize(fUi.getWidth(), fUi.getHeight()); | |||||
| setWindowTitle(fUi.getName()); | |||||
| } | } | ||||
| ~UICarla() | ~UICarla() | ||||
| @@ -61,135 +63,110 @@ public: | |||||
| void carla_idle() | void carla_idle() | ||||
| { | { | ||||
| ui.idle(); | |||||
| fUi.idle(); | |||||
| } | } | ||||
| void carla_setParameterValue(const uint32_t index, const float value) | void carla_setParameterValue(const uint32_t index, const float value) | ||||
| { | { | ||||
| ui.parameterChanged(index, value); | |||||
| fUi.parameterChanged(index, value); | |||||
| } | } | ||||
| # if DISTRHO_PLUGIN_WANT_PROGRAMS | |||||
| void carla_setMidiProgram(const uint32_t realProgram) | void carla_setMidiProgram(const uint32_t realProgram) | ||||
| { | { | ||||
| ui.programChanged(realProgram); | |||||
| fUi.programChanged(realProgram); | |||||
| } | } | ||||
| # endif | |||||
| # if DISTRHO_PLUGIN_WANT_STATE | |||||
| void carla_setCustomData(const char* const key, const char* const value) | void carla_setCustomData(const char* const key, const char* const value) | ||||
| { | { | ||||
| ui.stateChanged(key, value); | |||||
| fUi.stateChanged(key, value); | |||||
| } | } | ||||
| # endif | |||||
| // --------------------------------------------- | // --------------------------------------------- | ||||
| protected: | protected: | ||||
| void setParameterValue(uint32_t rindex, float value) | void setParameterValue(uint32_t rindex, float value) | ||||
| { | { | ||||
| host->ui_parameter_changed(host->handle, rindex, value); | |||||
| kHost->ui_parameter_changed(kHost->handle, rindex, value); | |||||
| } | } | ||||
| # if DISTRHO_PLUGIN_WANT_STATE | |||||
| void setState(const char* key, const char* value) | void setState(const char* key, const char* value) | ||||
| { | { | ||||
| host->ui_custom_data_changed(host->handle, key, value); | |||||
| kHost->ui_custom_data_changed(kHost->handle, key, value); | |||||
| } | } | ||||
| # endif | |||||
| void uiEditParameter(uint32_t, bool) | void uiEditParameter(uint32_t, bool) | ||||
| { | { | ||||
| // TODO | // TODO | ||||
| } | } | ||||
| # if DISTRHO_PLUGIN_IS_SYNTH | |||||
| void uiSendNote(bool, uint8_t, uint8_t, uint8_t) | void uiSendNote(bool, uint8_t, uint8_t, uint8_t) | ||||
| { | { | ||||
| // TODO | // TODO | ||||
| } | } | ||||
| # endif | |||||
| void uiResize(int width, int height) | void uiResize(int width, int height) | ||||
| { | { | ||||
| setFixedSize(width, height); | setFixedSize(width, height); | ||||
| } | } | ||||
| // --------------------------------------------- | |||||
| void closeEvent(QCloseEvent* event) | void closeEvent(QCloseEvent* event) | ||||
| { | { | ||||
| host->ui_closed(host->handle); | |||||
| kHost->ui_closed(kHost->handle); | |||||
| // FIXME - ignore event? | // FIXME - ignore event? | ||||
| QMainWindow::closeEvent(event); | QMainWindow::closeEvent(event); | ||||
| } | } | ||||
| // --------------------------------------------- | |||||
| private: | private: | ||||
| // Plugin stuff | // Plugin stuff | ||||
| const HostDescriptor* const host; | |||||
| PluginInternal* const plugin; | |||||
| const HostDescriptor* const kHost; | |||||
| PluginInternal* const kPlugin; | |||||
| // Qt4 stuff | // Qt4 stuff | ||||
| QWidget widget; | |||||
| QWidget fWidget; | |||||
| // UI | // UI | ||||
| UIInternal ui; | |||||
| UIInternal fUi; | |||||
| // --------------------------------------------- | // --------------------------------------------- | ||||
| // Callbacks | // Callbacks | ||||
| #define handlePtr ((UICarla*)ptr) | |||||
| static void setParameterCallback(void* ptr, uint32_t rindex, float value) | static void setParameterCallback(void* ptr, uint32_t rindex, float value) | ||||
| { | { | ||||
| if (UICarla* _this_ = (UICarla*)ptr) | |||||
| _this_->setParameterValue(rindex, value); | |||||
| handlePtr->setParameterValue(rindex, value); | |||||
| } | } | ||||
| static void setStateCallback(void* ptr, const char* key, const char* value) | static void setStateCallback(void* ptr, const char* key, const char* value) | ||||
| { | { | ||||
| # if DISTRHO_PLUGIN_WANT_STATE | |||||
| if (UICarla* _this_ = (UICarla*)ptr) | |||||
| _this_->setState(key, value); | |||||
| # else | |||||
| return; | |||||
| // unused | |||||
| Q_UNUSED(ptr); | |||||
| Q_UNUSED(key); | |||||
| Q_UNUSED(value); | |||||
| # endif | |||||
| handlePtr->setState(key, value); | |||||
| } | } | ||||
| static void uiEditParameterCallback(void* ptr, uint32_t index, bool started) | static void uiEditParameterCallback(void* ptr, uint32_t index, bool started) | ||||
| { | { | ||||
| if (UICarla* _this_ = (UICarla*)ptr) | |||||
| _this_->uiEditParameter(index, started); | |||||
| handlePtr->uiEditParameter(index, started); | |||||
| } | } | ||||
| static void uiSendNoteCallback(void* ptr, bool onOff, uint8_t channel, uint8_t note, uint8_t velocity) | static void uiSendNoteCallback(void* ptr, bool onOff, uint8_t channel, uint8_t note, uint8_t velocity) | ||||
| { | { | ||||
| # if DISTRHO_PLUGIN_IS_SYNTH | |||||
| if (UICarla* _this_ = (UICarla*)ptr) | |||||
| _this_->uiSendNote(onOff, channel, note, velocity); | |||||
| # else | |||||
| return; | |||||
| // unused | |||||
| Q_UNUSED(ptr); | |||||
| Q_UNUSED(onOff); | |||||
| Q_UNUSED(channel); | |||||
| Q_UNUSED(note); | |||||
| Q_UNUSED(velocity); | |||||
| # endif | |||||
| handlePtr->uiSendNote(onOff, channel, note, velocity); | |||||
| } | } | ||||
| static void uiResizeCallback(void* ptr, int width, int height) | static void uiResizeCallback(void* ptr, int width, int height) | ||||
| { | { | ||||
| if (UICarla* _this_ = (UICarla*)ptr) | |||||
| _this_->uiResize(width, height); | |||||
| handlePtr->uiResize(width, height); | |||||
| } | } | ||||
| #undef handlePtr | |||||
| CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(UICarla) | CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(UICarla) | ||||
| }; | }; | ||||
| #endif | |||||
| #endif // DISTRHO_PLUGIN_HAS_UI | |||||
| // ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
| // Carla Plugin | // Carla Plugin | ||||
| @@ -201,14 +178,14 @@ public: | |||||
| : PluginDescriptorClass(host) | : PluginDescriptorClass(host) | ||||
| { | { | ||||
| #if DISTRHO_PLUGIN_HAS_UI | #if DISTRHO_PLUGIN_HAS_UI | ||||
| uiPtr = nullptr; | |||||
| fUi = nullptr; | |||||
| #endif | #endif | ||||
| } | } | ||||
| ~PluginCarla() | ~PluginCarla() | ||||
| { | { | ||||
| #if DISTRHO_PLUGIN_HAS_UI | #if DISTRHO_PLUGIN_HAS_UI | ||||
| uiPtr = nullptr; | |||||
| fUi = nullptr; | |||||
| #endif | #endif | ||||
| } | } | ||||
| @@ -218,7 +195,7 @@ protected: | |||||
| uint32_t getParameterCount() | uint32_t getParameterCount() | ||||
| { | { | ||||
| return plugin.parameterCount(); | |||||
| return fPlugin.parameterCount(); | |||||
| } | } | ||||
| const ::Parameter* getParameterInfo(const uint32_t index) | const ::Parameter* getParameterInfo(const uint32_t index) | ||||
| @@ -233,28 +210,28 @@ protected: | |||||
| param.scalePoints = nullptr; | param.scalePoints = nullptr; | ||||
| { | { | ||||
| int nativeparamHints = 0; | |||||
| const uint32_t paramHints = plugin.parameterHints(index); | |||||
| int nativeParamHints = 0; | |||||
| const uint32_t paramHints = fPlugin.parameterHints(index); | |||||
| if (paramHints & PARAMETER_IS_AUTOMABLE) | if (paramHints & PARAMETER_IS_AUTOMABLE) | ||||
| nativeparamHints |= ::PARAMETER_IS_AUTOMABLE; | |||||
| nativeParamHints |= ::PARAMETER_IS_AUTOMABLE; | |||||
| if (paramHints & PARAMETER_IS_BOOLEAN) | if (paramHints & PARAMETER_IS_BOOLEAN) | ||||
| nativeparamHints |= ::PARAMETER_IS_BOOLEAN; | |||||
| nativeParamHints |= ::PARAMETER_IS_BOOLEAN; | |||||
| if (paramHints & PARAMETER_IS_INTEGER) | if (paramHints & PARAMETER_IS_INTEGER) | ||||
| nativeparamHints |= ::PARAMETER_IS_INTEGER; | |||||
| nativeParamHints |= ::PARAMETER_IS_INTEGER; | |||||
| if (paramHints & PARAMETER_IS_LOGARITHMIC) | if (paramHints & PARAMETER_IS_LOGARITHMIC) | ||||
| nativeparamHints |= ::PARAMETER_IS_LOGARITHMIC; | |||||
| nativeParamHints |= ::PARAMETER_IS_LOGARITHMIC; | |||||
| if (paramHints & PARAMETER_IS_OUTPUT) | if (paramHints & PARAMETER_IS_OUTPUT) | ||||
| nativeparamHints |= ::PARAMETER_IS_OUTPUT; | |||||
| nativeParamHints |= ::PARAMETER_IS_OUTPUT; | |||||
| param.hints = static_cast<ParameterHints>(nativeparamHints); | |||||
| param.hints = static_cast<ParameterHints>(nativeParamHints); | |||||
| } | } | ||||
| param.name = plugin.parameterName(index); | |||||
| param.unit = plugin.parameterUnit(index); | |||||
| param.name = fPlugin.parameterName(index); | |||||
| param.unit = fPlugin.parameterUnit(index); | |||||
| { | { | ||||
| const ParameterRanges& ranges(plugin.parameterRanges(index)); | |||||
| const ParameterRanges& ranges(fPlugin.parameterRanges(index)); | |||||
| param.ranges.def = ranges.def; | param.ranges.def = ranges.def; | ||||
| param.ranges.min = ranges.min; | param.ranges.min = ranges.min; | ||||
| @@ -271,7 +248,7 @@ protected: | |||||
| { | { | ||||
| CARLA_ASSERT(index < getParameterCount()); | CARLA_ASSERT(index < getParameterCount()); | ||||
| return plugin.parameterValue(index); | |||||
| return fPlugin.parameterValue(index); | |||||
| } | } | ||||
| // getParameterText unused | // getParameterText unused | ||||
| @@ -280,23 +257,23 @@ protected: | |||||
| // Plugin midi-program calls | // Plugin midi-program calls | ||||
| #if DISTRHO_PLUGIN_WANT_PROGRAMS | #if DISTRHO_PLUGIN_WANT_PROGRAMS | ||||
| virtual uint32_t getMidiProgramCount() | |||||
| uint32_t getMidiProgramCount() | |||||
| { | { | ||||
| return plugin.programCount(); | |||||
| return fPlugin.programCount(); | |||||
| } | } | ||||
| virtual const ::MidiProgram* getMidiProgramInfo(const uint32_t index) | |||||
| const ::MidiProgram* getMidiProgramInfo(const uint32_t index) | |||||
| { | { | ||||
| CARLA_ASSERT(index < getMidiProgramCount()); | CARLA_ASSERT(index < getMidiProgramCount()); | ||||
| if (index >= plugin.programCount()) | |||||
| if (index >= fPlugin.programCount()) | |||||
| return nullptr; | return nullptr; | ||||
| static ::MidiProgram midiProgram; | static ::MidiProgram midiProgram; | ||||
| midiProgram.bank = index / 128; | midiProgram.bank = index / 128; | ||||
| midiProgram.program = index % 128; | midiProgram.program = index % 128; | ||||
| midiProgram.name = plugin.programName(index); | |||||
| midiProgram.name = fPlugin.programName(index); | |||||
| return &midiProgram; | return &midiProgram; | ||||
| } | } | ||||
| @@ -309,7 +286,7 @@ protected: | |||||
| { | { | ||||
| CARLA_ASSERT(index < getParameterCount()); | CARLA_ASSERT(index < getParameterCount()); | ||||
| plugin.setParameterValue(index, value); | |||||
| fPlugin.setParameterValue(index, value); | |||||
| } | } | ||||
| #if DISTRHO_PLUGIN_WANT_PROGRAMS | #if DISTRHO_PLUGIN_WANT_PROGRAMS | ||||
| @@ -317,20 +294,20 @@ protected: | |||||
| { | { | ||||
| const uint32_t realProgram = bank * 128 + program; | const uint32_t realProgram = bank * 128 + program; | ||||
| if (realProgram >= plugin.programCount()) | |||||
| if (realProgram >= fPlugin.programCount()) | |||||
| return; | return; | ||||
| plugin.setProgram(realProgram); | |||||
| fPlugin.setProgram(realProgram); | |||||
| } | } | ||||
| #endif | #endif | ||||
| #if DISTRHO_PLUGIN_WANT_STATE | #if DISTRHO_PLUGIN_WANT_STATE | ||||
| void setCustomData(const char* const key, const char* const value) | void setCustomData(const char* const key, const char* const value) | ||||
| { | { | ||||
| CARLA_ASSERT(key); | |||||
| CARLA_ASSERT(value); | |||||
| CARLA_ASSERT(key != nullptr); | |||||
| CARLA_ASSERT(value != nullptr); | |||||
| plugin.setState(key, value); | |||||
| fPlugin.setState(key, value); | |||||
| } | } | ||||
| #endif | #endif | ||||
| @@ -339,12 +316,12 @@ protected: | |||||
| void activate() | void activate() | ||||
| { | { | ||||
| plugin.activate(); | |||||
| fPlugin.activate(); | |||||
| } | } | ||||
| void deactivate() | void deactivate() | ||||
| { | { | ||||
| plugin.deactivate(); | |||||
| fPlugin.deactivate(); | |||||
| } | } | ||||
| #if DISTRHO_PLUGIN_IS_SYNTH | #if DISTRHO_PLUGIN_IS_SYNTH | ||||
| @@ -355,7 +332,7 @@ protected: | |||||
| for (i=0; i < midiEventCount && i < MAX_MIDI_EVENTS; i++) | for (i=0; i < midiEventCount && i < MAX_MIDI_EVENTS; i++) | ||||
| { | { | ||||
| const ::MidiEvent* const midiEvent = &midiEvents[i]; | const ::MidiEvent* const midiEvent = &midiEvents[i]; | ||||
| MidiEvent* const realMidiEvent = &realMidiEvents[i]; | |||||
| MidiEvent* const realMidiEvent = &fRealMidiEvents[i]; | |||||
| realMidiEvent->buffer[0] = midiEvent->data[0]; | realMidiEvent->buffer[0] = midiEvent->data[0]; | ||||
| realMidiEvent->buffer[1] = midiEvent->data[1]; | realMidiEvent->buffer[1] = midiEvent->data[1]; | ||||
| @@ -363,12 +340,12 @@ protected: | |||||
| realMidiEvent->frame = midiEvent->time; | realMidiEvent->frame = midiEvent->time; | ||||
| } | } | ||||
| plugin.run(inBuffer, outBuffer, frames, i, realMidiEvents); | |||||
| fPlugin.run(inBuffer, outBuffer, frames, i, fRealMidiEvents); | |||||
| } | } | ||||
| #else | #else | ||||
| void process(float** const inBuffer, float** const outBuffer, const uint32_t frames, const uint32_t, const ::MidiEvent* const) | void process(float** const inBuffer, float** const outBuffer, const uint32_t frames, const uint32_t, const ::MidiEvent* const) | ||||
| { | { | ||||
| plugin.run(inBuffer, outBuffer, frames, 0, nullptr); | |||||
| fPlugin.run(inBuffer, outBuffer, frames, 0, nullptr); | |||||
| } | } | ||||
| #endif | #endif | ||||
| @@ -387,7 +364,7 @@ protected: | |||||
| void uiIdle() | void uiIdle() | ||||
| { | { | ||||
| CARLA_ASSERT(uiPtr); | |||||
| CARLA_ASSERT(uiPtr != nullptr); | |||||
| if (uiPtr != nullptr) | if (uiPtr != nullptr) | ||||
| uiPtr->carla_idle(); | uiPtr->carla_idle(); | ||||
| @@ -395,7 +372,7 @@ protected: | |||||
| void uiSetParameterValue(const uint32_t index, const float value) | void uiSetParameterValue(const uint32_t index, const float value) | ||||
| { | { | ||||
| CARLA_ASSERT(uiPtr); | |||||
| CARLA_ASSERT(uiPtr != nullptr); | |||||
| CARLA_ASSERT(index < getParameterCount()); | CARLA_ASSERT(index < getParameterCount()); | ||||
| if (uiPtr != nullptr) | if (uiPtr != nullptr) | ||||
| @@ -420,9 +397,9 @@ protected: | |||||
| # if DISTRHO_PLUGIN_WANT_STATE | # if DISTRHO_PLUGIN_WANT_STATE | ||||
| void uiSetCustomData(const char* const key, const char* const value) | void uiSetCustomData(const char* const key, const char* const value) | ||||
| { | { | ||||
| CARLA_ASSERT(uiPtr); | |||||
| CARLA_ASSERT(key); | |||||
| CARLA_ASSERT(value); | |||||
| CARLA_ASSERT(uiPtr != nullptr); | |||||
| CARLA_ASSERT(key != nullptr); | |||||
| CARLA_ASSERT(value != nullptr); | |||||
| if (uiPtr != nullptr) | if (uiPtr != nullptr) | ||||
| uiPtr->carla_setCustomData(key, value); | uiPtr->carla_setCustomData(key, value); | ||||
| @@ -433,22 +410,22 @@ protected: | |||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| private: | private: | ||||
| PluginInternal plugin; | |||||
| PluginInternal fPlugin; | |||||
| #if DISTRHO_PLUGIN_IS_SYNTH | #if DISTRHO_PLUGIN_IS_SYNTH | ||||
| MidiEvent realMidiEvents[MAX_MIDI_EVENTS]; | |||||
| MidiEvent fRealMidiEvents[MAX_MIDI_EVENTS]; | |||||
| #endif | #endif | ||||
| #if DISTRHO_PLUGIN_HAS_UI | #if DISTRHO_PLUGIN_HAS_UI | ||||
| // UI | // UI | ||||
| ScopedPointer<UICarla> uiPtr; | |||||
| ScopedPointer<UICarla> fUi; | |||||
| void createUiIfNeeded() | void createUiIfNeeded() | ||||
| { | { | ||||
| if (uiPtr == nullptr) | |||||
| if (fUi == nullptr) | |||||
| { | { | ||||
| d_lastUiSampleRate = getSampleRate(); | d_lastUiSampleRate = getSampleRate(); | ||||
| uiPtr = new UICarla(getHostHandle(), &plugin); | |||||
| fUi = new UICarla(getHostHandle(), &fPlugin); | |||||
| } | } | ||||
| } | } | ||||
| #endif | #endif | ||||
| @@ -19,7 +19,7 @@ | |||||
| #define DISTRHO_PLUGIN_NAME "Ping Pong Pan" | #define DISTRHO_PLUGIN_NAME "Ping Pong Pan" | ||||
| #define DISTRHO_PLUGIN_HAS_UI 1 | |||||
| #define DISTRHO_PLUGIN_HAS_UI 0 | |||||
| #define DISTRHO_PLUGIN_IS_SYNTH 0 | #define DISTRHO_PLUGIN_IS_SYNTH 0 | ||||
| #define DISTRHO_PLUGIN_NUM_INPUTS 2 | #define DISTRHO_PLUGIN_NUM_INPUTS 2 | ||||
| @@ -18,7 +18,7 @@ | |||||
| #ifndef __DISTRHO_PLUGIN_PINGPONGPAN_HPP__ | #ifndef __DISTRHO_PLUGIN_PINGPONGPAN_HPP__ | ||||
| #define __DISTRHO_PLUGIN_PINGPONGPAN_HPP__ | #define __DISTRHO_PLUGIN_PINGPONGPAN_HPP__ | ||||
| #include "DistrhoPlugin.h" | |||||
| #include "DistrhoPlugin.hpp" | |||||
| START_NAMESPACE_DISTRHO | START_NAMESPACE_DISTRHO | ||||
| @@ -245,7 +245,7 @@ int32_t CarlaPlugin::chunkData(void** const dataPtr) | |||||
| unsigned int CarlaPlugin::availableOptions() | unsigned int CarlaPlugin::availableOptions() | ||||
| { | { | ||||
| return kData->availOptions; | |||||
| return 0x0; | |||||
| } | } | ||||
| float CarlaPlugin::getParameterValue(const uint32_t parameterId) | float CarlaPlugin::getParameterValue(const uint32_t parameterId) | ||||
| @@ -32,10 +32,11 @@ | |||||
| #include <QtGui/QMainWindow> | #include <QtGui/QMainWindow> | ||||
| #define CARLA_DECLARE_NON_COPY_STRUCT(structName) \ | #define CARLA_DECLARE_NON_COPY_STRUCT(structName) \ | ||||
| structName(structName&) = delete; \ | |||||
| structName(const structName&) = delete; | structName(const structName&) = delete; | ||||
| #define CARLA_DECLARE_NON_COPY_STRUCT_WITH_LEAK_DETECTOR(structName) \ | #define CARLA_DECLARE_NON_COPY_STRUCT_WITH_LEAK_DETECTOR(structName) \ | ||||
| CARLA_DECLARE_NON_COPY_STRUCT(structName) \ | |||||
| CARLA_DECLARE_NON_COPY_STRUCT(structName) \ | |||||
| CARLA_LEAK_DETECTOR(structName) | CARLA_LEAK_DETECTOR(structName) | ||||
| #define CARLA_PROCESS_CONTINUE_CHECK if (! fEnabled) { kData->engine->callback(CALLBACK_DEBUG, fId, 0, 0, 0.0, nullptr); return; } | #define CARLA_PROCESS_CONTINUE_CHECK if (! fEnabled) { kData->engine->callback(CALLBACK_DEBUG, fId, 0, 0, 0.0, nullptr); return; } | ||||
| @@ -393,7 +394,6 @@ struct CarlaPluginProtectedData { | |||||
| void* lib; | void* lib; | ||||
| // misc | // misc | ||||
| unsigned int availOptions; | |||||
| unsigned int extraHints; | unsigned int extraHints; | ||||
| int8_t ctrlChannel; | int8_t ctrlChannel; | ||||
| @@ -523,7 +523,6 @@ struct CarlaPluginProtectedData { | |||||
| activeBefore(false), | activeBefore(false), | ||||
| needsReset(false), | needsReset(false), | ||||
| lib(nullptr), | lib(nullptr), | ||||
| availOptions(0x0), | |||||
| extraHints(0x0), | extraHints(0x0), | ||||
| ctrlChannel(-1), | ctrlChannel(-1), | ||||
| latency(0), | latency(0), | ||||
| @@ -727,25 +727,22 @@ public: | |||||
| // --------------------------------------- | // --------------------------------------- | ||||
| // plugin checks | // plugin checks | ||||
| fHints &= ~(PLUGIN_IS_SYNTH | PLUGIN_USES_CHUNKS | PLUGIN_CAN_DRYWET | PLUGIN_CAN_VOLUME | PLUGIN_CAN_BALANCE | PLUGIN_CAN_FORCE_STEREO); | |||||
| fHints = 0; | |||||
| fHints |= PLUGIN_IS_RTSAFE; | |||||
| fHints |= PLUGIN_IS_SYNTH; | fHints |= PLUGIN_IS_SYNTH; | ||||
| fHints |= PLUGIN_CAN_VOLUME; | fHints |= PLUGIN_CAN_VOLUME; | ||||
| if (! kUses16Outs) | if (! kUses16Outs) | ||||
| { | { | ||||
| fHints |= PLUGIN_CAN_BALANCE; | fHints |= PLUGIN_CAN_BALANCE; | ||||
| fHints |= PLUGIN_CAN_FORCE_STEREO; | |||||
| } | } | ||||
| // plugin options | // plugin options | ||||
| kData->availOptions &= ~(PLUGIN_OPTION_FIXED_BUFFER | PLUGIN_OPTION_SELF_AUTOMATION | PLUGIN_OPTION_SEND_ALL_SOUND_OFF | PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH | PLUGIN_OPTION_SEND_PITCHBEND); | |||||
| fOptions = 0; | |||||
| // always available if needed | |||||
| kData->availOptions |= PLUGIN_OPTION_SELF_AUTOMATION; | |||||
| kData->availOptions |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | |||||
| kData->availOptions |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH; | |||||
| kData->availOptions |= PLUGIN_OPTION_SEND_PITCHBEND; | |||||
| fOptions |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; | |||||
| fOptions |= PLUGIN_OPTION_SEND_PITCHBEND; | |||||
| bufferSizeChanged(kData->engine->getBufferSize()); | bufferSizeChanged(kData->engine->getBufferSize()); | ||||
| reloadPrograms(true); | reloadPrograms(true); | ||||
| @@ -1143,27 +1140,27 @@ public: | |||||
| postponeRtEvent(kPluginPostRtEventNoteOn, channel, note, velo); | postponeRtEvent(kPluginPostRtEventNoteOn, channel, note, velo); | ||||
| } | } | ||||
| else if (MIDI_IS_STATUS_POLYPHONIC_AFTERTOUCH(status)) | |||||
| else if (MIDI_IS_STATUS_POLYPHONIC_AFTERTOUCH(status) && (fOptions & PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH) != 0) | |||||
| { | { | ||||
| //const uint8_t note = midiEvent.data[1]; | //const uint8_t note = midiEvent.data[1]; | ||||
| //const uint8_t pressure = midiEvent.data[2]; | //const uint8_t pressure = midiEvent.data[2]; | ||||
| // TODO, not in fluidsynth API | // TODO, not in fluidsynth API | ||||
| } | } | ||||
| else if (MIDI_IS_STATUS_CONTROL_CHANGE(status) && (fHints & PLUGIN_OPTION_SELF_AUTOMATION) != 0) | |||||
| else if (MIDI_IS_STATUS_CONTROL_CHANGE(status) && (fOptions & PLUGIN_OPTION_SEND_CONTROL_CHANGES) != 0) | |||||
| { | { | ||||
| const uint8_t control = midiEvent.data[1]; | const uint8_t control = midiEvent.data[1]; | ||||
| const uint8_t value = midiEvent.data[2]; | const uint8_t value = midiEvent.data[2]; | ||||
| fluid_synth_cc(fSynth, channel, control, value); | fluid_synth_cc(fSynth, channel, control, value); | ||||
| } | } | ||||
| else if (MIDI_IS_STATUS_AFTERTOUCH(status)) | |||||
| else if (MIDI_IS_STATUS_AFTERTOUCH(status) && (fOptions & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) != 0) | |||||
| { | { | ||||
| const uint8_t pressure = midiEvent.data[1]; | const uint8_t pressure = midiEvent.data[1]; | ||||
| fluid_synth_channel_pressure(fSynth, channel, pressure);; | fluid_synth_channel_pressure(fSynth, channel, pressure);; | ||||
| } | } | ||||
| else if (MIDI_IS_STATUS_PITCH_WHEEL_CONTROL(status)) | |||||
| else if (MIDI_IS_STATUS_PITCH_WHEEL_CONTROL(status) && (fOptions & PLUGIN_OPTION_SEND_PITCHBEND) != 0) | |||||
| { | { | ||||
| const uint8_t lsb = midiEvent.data[1]; | const uint8_t lsb = midiEvent.data[1]; | ||||
| const uint8_t msb = midiEvent.data[2]; | const uint8_t msb = midiEvent.data[2]; | ||||
| @@ -158,28 +158,26 @@ MAX_PATCHBAY_PLUGINS = 999 | |||||
| MAX_DEFAULT_PARAMETERS = 200 | MAX_DEFAULT_PARAMETERS = 200 | ||||
| # Plugin Hints | # Plugin Hints | ||||
| PLUGIN_IS_BRIDGE = 0x0001 | |||||
| PLUGIN_IS_RTSAFE = 0x0002 | |||||
| PLUGIN_IS_SYNTH = 0x0004 | |||||
| PLUGIN_HAS_GUI = 0x0010 | |||||
| PLUGIN_USES_CHUNKS = 0x0020 | |||||
| PLUGIN_USES_SINGLE_THREAD = 0x0040 | |||||
| PLUGIN_CAN_DRYWET = 0x0100 | |||||
| PLUGIN_CAN_VOLUME = 0x0200 | |||||
| PLUGIN_CAN_BALANCE = 0x0400 | |||||
| PLUGIN_CAN_PANNING = 0x0800 | |||||
| PLUGIN_CAN_FORCE_STEREO = 0x1000 | |||||
| PLUGIN_IS_BRIDGE = 0x001 | |||||
| PLUGIN_IS_RTSAFE = 0x002 | |||||
| PLUGIN_IS_SYNTH = 0x004 | |||||
| PLUGIN_HAS_GUI = 0x010 | |||||
| PLUGIN_HAS_SINGLE_THREAD = 0x020 | |||||
| PLUGIN_CAN_DRYWET = 0x100 | |||||
| PLUGIN_CAN_VOLUME = 0x200 | |||||
| PLUGIN_CAN_BALANCE = 0x400 | |||||
| PLUGIN_CAN_PANNING = 0x800 | |||||
| # Plugin Options | # Plugin Options | ||||
| PLUGIN_OPTION_FIXED_BUFFER = 0x001 | |||||
| PLUGIN_OPTION_FORCE_STEREO = 0x002 | |||||
| PLUGIN_OPTION_SELF_AUTOMATION = 0x004 | |||||
| PLUGIN_OPTION_USE_CHUNKS = 0x008 | |||||
| PLUGIN_OPTION_SEND_ALL_SOUND_OFF = 0x010 | |||||
| PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH = 0x020 | |||||
| PLUGIN_OPTION_SEND_PITCHBEND = 0x040 | |||||
| PLUGIN_OPTION_VST_SUPPLY_IDLE = 0x100 | |||||
| PLUGIN_OPTION_VST_UPDATE_DISPLAY = 0x200 | |||||
| PLUGIN_OPTION_FIXED_BUFFER = 0x001 | |||||
| PLUGIN_OPTION_FORCE_STEREO = 0x002 | |||||
| PLUGIN_OPTION_MAP_PROGRAM_CHANGES = 0x004 | |||||
| PLUGIN_OPTION_USE_CHUNKS = 0x008 | |||||
| PLUGIN_OPTION_SEND_CONTROL_CHANGES = 0x010 | |||||
| PLUGIN_OPTION_SEND_CHANNEL_PRESSURE = 0x020 | |||||
| PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH = 0x040 | |||||
| PLUGIN_OPTION_SEND_PITCHBEND = 0x080 | |||||
| PLUGIN_OPTION_SEND_ALL_SOUND_OFF = 0x100 | |||||
| # Parameter Hints | # Parameter Hints | ||||
| PARAMETER_IS_BOOLEAN = 0x01 | PARAMETER_IS_BOOLEAN = 0x01 | ||||
| @@ -1557,20 +1555,20 @@ class PluginEdit(QDialog): | |||||
| self.ui.dial_b_right.setEnabled(pluginHints & PLUGIN_CAN_BALANCE) | self.ui.dial_b_right.setEnabled(pluginHints & PLUGIN_CAN_BALANCE) | ||||
| # Set options | # Set options | ||||
| self.ui.ch_fixed_buffer.setEnabled(self.fPluginInfo['optionsAvailable'] & PLUGIN_OPTION_FIXED_BUFFER) | |||||
| self.ui.ch_fixed_buffer.setChecked(self.fPluginInfo['optionsEnabled'] & PLUGIN_OPTION_FIXED_BUFFER) | |||||
| self.ui.ch_force_stereo.setEnabled(self.fPluginInfo['optionsAvailable'] & PLUGIN_OPTION_FORCE_STEREO) | |||||
| self.ui.ch_force_stereo.setChecked(self.fPluginInfo['optionsEnabled'] & PLUGIN_OPTION_FORCE_STEREO) | |||||
| self.ui.ch_self_automation.setEnabled(self.fPluginInfo['optionsAvailable'] & PLUGIN_OPTION_SELF_AUTOMATION) | |||||
| self.ui.ch_self_automation.setChecked(self.fPluginInfo['optionsEnabled'] & PLUGIN_OPTION_SELF_AUTOMATION) | |||||
| self.ui.ch_use_chunks.setEnabled(self.fPluginInfo['optionsAvailable'] & PLUGIN_OPTION_USE_CHUNKS) | |||||
| self.ui.ch_use_chunks.setChecked(self.fPluginInfo['optionsEnabled'] & PLUGIN_OPTION_USE_CHUNKS) | |||||
| self.ui.ch_send_all_sound_off.setEnabled(self.fPluginInfo['optionsAvailable'] & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) | |||||
| self.ui.ch_send_all_sound_off.setChecked(self.fPluginInfo['optionsEnabled'] & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) | |||||
| self.ui.ch_send_note_aftertouch.setEnabled(self.fPluginInfo['optionsAvailable'] & PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH) | |||||
| self.ui.ch_send_note_aftertouch.setChecked(self.fPluginInfo['optionsEnabled'] & PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH) | |||||
| self.ui.ch_send_pitchbend.setEnabled(self.fPluginInfo['optionsAvailable'] & PLUGIN_OPTION_SEND_PITCHBEND) | |||||
| self.ui.ch_send_pitchbend.setChecked(self.fPluginInfo['optionsEnabled'] & PLUGIN_OPTION_SEND_PITCHBEND) | |||||
| #self.ui.ch_fixed_buffer.setEnabled(self.fPluginInfo['optionsAvailable'] & PLUGIN_OPTION_FIXED_BUFFER) | |||||
| #self.ui.ch_fixed_buffer.setChecked(self.fPluginInfo['optionsEnabled'] & PLUGIN_OPTION_FIXED_BUFFER) | |||||
| #self.ui.ch_force_stereo.setEnabled(self.fPluginInfo['optionsAvailable'] & PLUGIN_OPTION_FORCE_STEREO) | |||||
| #self.ui.ch_force_stereo.setChecked(self.fPluginInfo['optionsEnabled'] & PLUGIN_OPTION_FORCE_STEREO) | |||||
| #self.ui.ch_self_automation.setEnabled(self.fPluginInfo['optionsAvailable'] & PLUGIN_OPTION_SELF_AUTOMATION) | |||||
| #self.ui.ch_self_automation.setChecked(self.fPluginInfo['optionsEnabled'] & PLUGIN_OPTION_SELF_AUTOMATION) | |||||
| #self.ui.ch_use_chunks.setEnabled(self.fPluginInfo['optionsAvailable'] & PLUGIN_OPTION_USE_CHUNKS) | |||||
| #self.ui.ch_use_chunks.setChecked(self.fPluginInfo['optionsEnabled'] & PLUGIN_OPTION_USE_CHUNKS) | |||||
| #self.ui.ch_send_all_sound_off.setEnabled(self.fPluginInfo['optionsAvailable'] & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) | |||||
| #self.ui.ch_send_all_sound_off.setChecked(self.fPluginInfo['optionsEnabled'] & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) | |||||
| #self.ui.ch_send_note_aftertouch.setEnabled(self.fPluginInfo['optionsAvailable'] & PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH) | |||||
| #self.ui.ch_send_note_aftertouch.setChecked(self.fPluginInfo['optionsEnabled'] & PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH) | |||||
| #self.ui.ch_send_pitchbend.setEnabled(self.fPluginInfo['optionsAvailable'] & PLUGIN_OPTION_SEND_PITCHBEND) | |||||
| #self.ui.ch_send_pitchbend.setChecked(self.fPluginInfo['optionsEnabled'] & PLUGIN_OPTION_SEND_PITCHBEND) | |||||
| # Show/hide keyboard | # Show/hide keyboard | ||||
| showKeyboard = (pluginHints & PLUGIN_IS_SYNTH) != 0 or (midiCountInfo['ins'] > 0 < midiCountInfo['outs']) | showKeyboard = (pluginHints & PLUGIN_IS_SYNTH) != 0 or (midiCountInfo['ins'] > 0 < midiCountInfo['outs']) | ||||
| @@ -34,22 +34,20 @@ const char* PluginOption2Str(const unsigned int& option) | |||||
| return "PLUGIN_OPTION_FIXED_BUFFER"; | return "PLUGIN_OPTION_FIXED_BUFFER"; | ||||
| case PLUGIN_OPTION_FORCE_STEREO: | case PLUGIN_OPTION_FORCE_STEREO: | ||||
| return "PLUGIN_OPTION_FORCE_STEREO"; | return "PLUGIN_OPTION_FORCE_STEREO"; | ||||
| case PLUGIN_OPTION_SELF_AUTOMATION: | |||||
| return "PLUGIN_OPTION_SELF_AUTOMATION"; | |||||
| case PLUGIN_OPTION_MAP_PROGRAM_CHANGES: | |||||
| return "PLUGIN_OPTION_MAP_PROGRAM_CHANGES"; | |||||
| case PLUGIN_OPTION_USE_CHUNKS: | case PLUGIN_OPTION_USE_CHUNKS: | ||||
| return "PLUGIN_OPTION_USE_CHUNKS"; | return "PLUGIN_OPTION_USE_CHUNKS"; | ||||
| case PLUGIN_OPTION_SEND_ALL_SOUND_OFF: | |||||
| return "PLUGIN_OPTION_SEND_ALL_SOUND_OFF"; | |||||
| case PLUGIN_OPTION_SEND_CONTROL_CHANGES: | |||||
| return "PLUGIN_OPTION_SEND_CONTROL_CHANGES"; | |||||
| case PLUGIN_OPTION_SEND_CHANNEL_PRESSURE: | |||||
| return "PLUGIN_OPTION_SEND_CHANNEL_PRESSURE"; | |||||
| case PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH: | case PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH: | ||||
| return "PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH"; | return "PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH"; | ||||
| case PLUGIN_OPTION_SEND_PITCHBEND: | case PLUGIN_OPTION_SEND_PITCHBEND: | ||||
| return "PLUGIN_OPTION_SEND_PITCHBEND"; | return "PLUGIN_OPTION_SEND_PITCHBEND"; | ||||
| #ifdef WANT_VST | |||||
| case PLUGIN_OPTION_VST_SUPPLY_IDLE: | |||||
| return "PLUGIN_OPTION_VST_SUPPLY_IDLE"; | |||||
| case PLUGIN_OPTION_VST_UPDATE_DISPLAY: | |||||
| return "PLUGIN_OPTION_VST_UPDATE_DISPLAY"; | |||||
| #endif | |||||
| case PLUGIN_OPTION_SEND_ALL_SOUND_OFF: | |||||
| return "PLUGIN_OPTION_SEND_ALL_SOUND_OFF"; | |||||
| } | } | ||||
| carla_stderr("CarlaBackend::PluginOption2Str(%i) - invalid type", option); | carla_stderr("CarlaBackend::PluginOption2Str(%i) - invalid type", option); | ||||
| @@ -120,7 +120,7 @@ public: | |||||
| ~CarlaString() | ~CarlaString() | ||||
| { | { | ||||
| CARLA_ASSERT(buffer); | |||||
| CARLA_ASSERT(buffer != nullptr); | |||||
| delete[] buffer; | delete[] buffer; | ||||
| } | } | ||||
| @@ -444,7 +444,7 @@ private: | |||||
| { | { | ||||
| if (! firstInit) | if (! firstInit) | ||||
| { | { | ||||
| CARLA_ASSERT(buffer); | |||||
| CARLA_ASSERT(buffer != nullptr); | |||||
| delete[] buffer; | delete[] buffer; | ||||
| } | } | ||||
| @@ -467,7 +467,7 @@ private: | |||||
| { | { | ||||
| if (! firstInit) | if (! firstInit) | ||||
| { | { | ||||
| CARLA_ASSERT(buffer); | |||||
| CARLA_ASSERT(buffer != nullptr); | |||||
| delete[] buffer; | delete[] buffer; | ||||
| } | } | ||||