| @@ -241,7 +241,7 @@ EXPAND_ONLY_PREDEF = NO | |||||
| SEARCH_INCLUDES = YES | SEARCH_INCLUDES = YES | ||||
| INCLUDE_PATH = | INCLUDE_PATH = | ||||
| INCLUDE_FILE_PATTERNS = | INCLUDE_FILE_PATTERNS = | ||||
| PREDEFINED = CARLA_ENGINE_JACK CARLA_ENGINE_RTAUDIO WANT_LADSPA WANT_DSSI WANT_LV2 WANT_VST WANT_FLUIDSYNTH WANT_LINUXSAMPLER | |||||
| PREDEFINED = DOXYGEN CARLA_ENGINE_JACK CARLA_ENGINE_RTAUDIO WANT_LADSPA WANT_DSSI WANT_LV2 WANT_VST WANT_FLUIDSYNTH WANT_LINUXSAMPLER | |||||
| EXPAND_AS_DEFINED = | EXPAND_AS_DEFINED = | ||||
| SKIP_FUNCTION_MACROS = YES | SKIP_FUNCTION_MACROS = YES | ||||
| #--------------------------------------------------------------------------- | #--------------------------------------------------------------------------- | ||||
| @@ -55,7 +55,7 @@ const unsigned int PLUGIN_IS_BRIDGE = 0x001; //!< Plugin is a bridge (i | |||||
| const unsigned int PLUGIN_IS_SYNTH = 0x002; //!< Plugin is a synthesizer (produces sound). | const unsigned int PLUGIN_IS_SYNTH = 0x002; //!< Plugin is a synthesizer (produces sound). | ||||
| const unsigned int PLUGIN_HAS_GUI = 0x004; //!< Plugin has its own custom GUI. | const unsigned int PLUGIN_HAS_GUI = 0x004; //!< Plugin has its own custom GUI. | ||||
| const unsigned int PLUGIN_USES_CHUNKS = 0x008; //!< Plugin uses chunks to save internal data.\see CarlaPlugin::chunkData() | const unsigned int PLUGIN_USES_CHUNKS = 0x008; //!< Plugin uses chunks to save internal data.\see CarlaPlugin::chunkData() | ||||
| const unsigned int PLUGIN_USES_SINGLE_THREAD = 0x010; //!< Plugin has its own custom GUI. | |||||
| const unsigned int PLUGIN_USES_SINGLE_THREAD = 0x010; //!< Plugin needs a single thread for both DSP processing and UI events. | |||||
| const unsigned int PLUGIN_CAN_DRYWET = 0x020; //!< Plugin can make use of Dry/Wet controls. | const unsigned int PLUGIN_CAN_DRYWET = 0x020; //!< Plugin can make use of Dry/Wet controls. | ||||
| const unsigned int PLUGIN_CAN_VOLUME = 0x040; //!< Plugin can make use of Volume controls. | const unsigned int PLUGIN_CAN_VOLUME = 0x040; //!< Plugin can make use of Volume controls. | ||||
| const unsigned int PLUGIN_CAN_BALANCE = 0x080; //!< Plugin can make use of Left & Right Balance controls. | const unsigned int PLUGIN_CAN_BALANCE = 0x080; //!< Plugin can make use of Left & Right Balance controls. | ||||
| @@ -83,6 +83,7 @@ const unsigned int PARAMETER_USES_CUSTOM_TEXT = 0x80; //!< Parameter uses custom | |||||
| * @defgroup BridgeMessages Bridge Messages | * @defgroup BridgeMessages Bridge Messages | ||||
| * | * | ||||
| * Various bridge related messages, used as configure(<message>, value). | * Various bridge related messages, used as configure(<message>, value). | ||||
| * \note This is for internal use only. | |||||
| * @{ | * @{ | ||||
| */ | */ | ||||
| const char* const CARLA_BRIDGE_MSG_HIDE_GUI = "CarlaBridgeHideGUI"; //!< Plugin -> Host call, tells host GUI is now hidden | const char* const CARLA_BRIDGE_MSG_HIDE_GUI = "CarlaBridgeHideGUI"; //!< Plugin -> Host call, tells host GUI is now hidden | ||||
| @@ -110,7 +111,7 @@ enum BinaryType { | |||||
| */ | */ | ||||
| enum PluginType { | enum PluginType { | ||||
| PLUGIN_NONE = 0, //!< Null plugin type. | PLUGIN_NONE = 0, //!< Null plugin type. | ||||
| PLUGIN_INTERNAL = 1, //!< Internal plugin. | |||||
| PLUGIN_INTERNAL = 1, //!< Internal plugin.\see NativePlugin | |||||
| PLUGIN_LADSPA = 2, //!< LADSPA plugin.\see LadspaPlugin | PLUGIN_LADSPA = 2, //!< LADSPA plugin.\see LadspaPlugin | ||||
| PLUGIN_DSSI = 3, //!< DSSI plugin.\see DssiPlugin | PLUGIN_DSSI = 3, //!< DSSI plugin.\see DssiPlugin | ||||
| PLUGIN_LV2 = 4, //!< LV2 plugin.\see Lv2Plugin | PLUGIN_LV2 = 4, //!< LV2 plugin.\see Lv2Plugin | ||||
| @@ -120,6 +121,10 @@ enum PluginType { | |||||
| PLUGIN_SFZ = 8 //!< SFZ sound kit, implemented via LinuxSampler.\see LinuxSamplerPlugin | PLUGIN_SFZ = 8 //!< SFZ sound kit, implemented via LinuxSampler.\see LinuxSamplerPlugin | ||||
| }; | }; | ||||
| /*! | |||||
| * Plugin category, describing the funtionality of a plugin.\n | |||||
| * When a plugin fails to tell his own category, one is atributted to it based on its name. | |||||
| */ | |||||
| enum PluginCategory { | enum PluginCategory { | ||||
| PLUGIN_CATEGORY_NONE = 0, //!< Null plugin category. | PLUGIN_CATEGORY_NONE = 0, //!< Null plugin category. | ||||
| PLUGIN_CATEGORY_SYNTH = 1, //!< A synthesizer or generator. | PLUGIN_CATEGORY_SYNTH = 1, //!< A synthesizer or generator. | ||||
| @@ -132,52 +137,67 @@ enum PluginCategory { | |||||
| PLUGIN_CATEGORY_OTHER = 8 //!< Misc plugin (used to check if the plugin has a category). | PLUGIN_CATEGORY_OTHER = 8 //!< Misc plugin (used to check if the plugin has a category). | ||||
| }; | }; | ||||
| /*! | |||||
| * Plugin parameter type. | |||||
| */ | |||||
| enum ParameterType { | enum ParameterType { | ||||
| PARAMETER_UNKNOWN = 0, | |||||
| PARAMETER_INPUT = 1, | |||||
| PARAMETER_OUTPUT = 2, | |||||
| PARAMETER_LATENCY = 3, | |||||
| PARAMETER_SAMPLE_RATE = 4, | |||||
| PARAMETER_LV2_FREEWHEEL = 5, | |||||
| PARAMETER_LV2_TIME = 6 | |||||
| PARAMETER_UNKNOWN = 0, //!< Null parameter type. | |||||
| PARAMETER_INPUT = 1, //!< Input parameter. | |||||
| PARAMETER_OUTPUT = 2, //!< Ouput parameter. | |||||
| PARAMETER_LATENCY = 3, //!< Special latency parameter, used in LADSPA, DSSI and LV2 plugins. | |||||
| PARAMETER_SAMPLE_RATE = 4, //!< Special sample-rate parameter, used in LADSPA, DSSI and LV2 plugins. | |||||
| PARAMETER_LV2_FREEWHEEL = 5, //!< Special LV2 Plugin parameter used to report freewheel (offline) mode. | |||||
| PARAMETER_LV2_TIME = 6 //!< Special LV2 Plugin parameter used to report time information. | |||||
| }; | }; | ||||
| /*! | |||||
| * Internal parameter indexes.\n | |||||
| * These are special parameters used internally, plugins do not know about their existence. | |||||
| */ | |||||
| enum InternalParametersIndex { | enum InternalParametersIndex { | ||||
| PARAMETER_NULL = -1, | |||||
| PARAMETER_ACTIVE = -2, | |||||
| PARAMETER_DRYWET = -3, | |||||
| PARAMETER_VOLUME = -4, | |||||
| PARAMETER_BALANCE_LEFT = -5, | |||||
| PARAMETER_BALANCE_RIGHT = -6 | |||||
| PARAMETER_NULL = -1, //!< Null parameter. | |||||
| PARAMETER_ACTIVE = -2, //!< Active parameter, can only be 'true' or 'false'; default is 'false'. | |||||
| PARAMETER_DRYWET = -3, //!< Dry/Wet parameter, range 0.0...1.0; default is 1.0. | |||||
| PARAMETER_VOLUME = -4, //!< Volume parameter, range 0.0...1.27; default is 1.0. | |||||
| PARAMETER_BALANCE_LEFT = -5, //!< Balance-Left parameter, range -1.0...1.0; default is -1.0. | |||||
| PARAMETER_BALANCE_RIGHT = -6 //!< Balance-Right parameter, range -1.0...1.0; default is 1.0. | |||||
| }; | }; | ||||
| /*! | |||||
| * Custom Data types.\n | |||||
| * The type defines how the value in CustomData is stored.\n | |||||
| * Binary chunks are stored in base64 format. | |||||
| */ | |||||
| enum CustomDataType { | enum CustomDataType { | ||||
| CUSTOM_DATA_INVALID = 0, | |||||
| CUSTOM_DATA_STRING = 1, | |||||
| CUSTOM_DATA_PATH = 2, | |||||
| CUSTOM_DATA_CHUNK = 3, | |||||
| CUSTOM_DATA_BINARY = 4 | |||||
| CUSTOM_DATA_INVALID = 0, //!< Null/Invalid data. | |||||
| CUSTOM_DATA_STRING = 1, //!< String | |||||
| CUSTOM_DATA_PATH = 2, //!< Path (same as string, but used for filenames). | |||||
| CUSTOM_DATA_CHUNK = 3, //!< Binary chunk (known type). | |||||
| CUSTOM_DATA_BINARY = 4 //!< Binary chunk, used to store any unknown type. | |||||
| }; | }; | ||||
| /*! | |||||
| * Plugin custom GUI type. | |||||
| * \see OPTION_PREFER_UI_BRIDGES | |||||
| */ | |||||
| enum GuiType { | enum GuiType { | ||||
| GUI_NONE = 0, | |||||
| GUI_INTERNAL_QT4 = 1, | |||||
| GUI_INTERNAL_COCOA = 2, | |||||
| GUI_INTERNAL_HWND = 3, | |||||
| GUI_INTERNAL_X11 = 4, | |||||
| GUI_EXTERNAL_LV2 = 5, | |||||
| GUI_EXTERNAL_SUIL = 6, | |||||
| GUI_EXTERNAL_OSC = 7 | |||||
| GUI_NONE = 0, //!< Null type, plugin has no custom GUI. | |||||
| GUI_INTERNAL_QT4 = 1, //!< Qt4 type, handled internally. | |||||
| GUI_INTERNAL_COCOA = 2, //!< Reparented MacOS native type, handled internally. | |||||
| GUI_INTERNAL_HWND = 3, //!< Reparented Windows native type, handled internally. | |||||
| GUI_INTERNAL_X11 = 4, //!< Reparented X11 native type, handled internally. | |||||
| GUI_EXTERNAL_LV2 = 5, //!< External LV2-UI type, handled internally. | |||||
| GUI_EXTERNAL_SUIL = 6, //!< SUIL type, currently used only for lv2 gtk2 direct-access UIs.\note This type will be removed in the future! | |||||
| GUI_EXTERNAL_OSC = 7 //!< External, osc-bridge controlled, UI. | |||||
| }; | }; | ||||
| /*! | /*! | ||||
| * Options used in the setOption() call.\n | |||||
| * These options must be set before calling CarlaEngine::init() or after CarlaEngine::close(). | |||||
| * Options used in the set_option() call.\n | |||||
| * These options must be set before calling engine_init() or after engine_close(). | |||||
| */ | */ | ||||
| enum OptionsType { | enum OptionsType { | ||||
| /*! | /*! | ||||
| * Try to set the current process name.\n | * Try to set the current process name.\n | ||||
| * | |||||
| * \note Not available on all platforms. | * \note Not available on all platforms. | ||||
| */ | */ | ||||
| OPTION_PROCESS_NAME = 0, | OPTION_PROCESS_NAME = 0, | ||||
| @@ -185,7 +205,6 @@ enum OptionsType { | |||||
| /*! | /*! | ||||
| * Set the engine processing mode.\n | * Set the engine processing mode.\n | ||||
| * Default is PROCESS_MODE_MULTIPLE_CLIENTS. | * Default is PROCESS_MODE_MULTIPLE_CLIENTS. | ||||
| * | |||||
| * \see ProcessModeType | * \see ProcessModeType | ||||
| */ | */ | ||||
| OPTION_PROCESS_MODE = 1, | OPTION_PROCESS_MODE = 1, | ||||
| @@ -205,12 +224,12 @@ enum OptionsType { | |||||
| OPTION_MAX_PARAMETERS = 3, | OPTION_MAX_PARAMETERS = 3, | ||||
| /*! | /*! | ||||
| * Prefered buffer size. | |||||
| * Prefered buffer size, currently unused. | |||||
| */ | */ | ||||
| OPTION_PREFERRED_BUFFER_SIZE = 4, | OPTION_PREFERRED_BUFFER_SIZE = 4, | ||||
| /*! | /*! | ||||
| * Prefered sample rate. | |||||
| * Prefered sample rate, currently unused. | |||||
| */ | */ | ||||
| OPTION_PREFERRED_SAMPLE_RATE = 5, | OPTION_PREFERRED_SAMPLE_RATE = 5, | ||||
| @@ -222,7 +241,7 @@ enum OptionsType { | |||||
| /*! | /*! | ||||
| * Use (unofficial) dssi-vst chunks feature.\n | * Use (unofficial) dssi-vst chunks feature.\n | ||||
| * Default is no. | |||||
| * Default is no.\n | |||||
| * EXPERIMENTAL! | * EXPERIMENTAL! | ||||
| */ | */ | ||||
| OPTION_USE_DSSI_VST_CHUNKS = 7, | OPTION_USE_DSSI_VST_CHUNKS = 7, | ||||
| @@ -345,7 +364,7 @@ enum OptionsType { | |||||
| /*! | /*! | ||||
| * Opcodes sent from the engine callback, as defined by CallbackFunc. | * Opcodes sent from the engine callback, as defined by CallbackFunc. | ||||
| * | * | ||||
| * \see CarlaEngine::setCallback() | |||||
| * \see set_callback_function() | |||||
| */ | */ | ||||
| enum CallbackType { | enum CallbackType { | ||||
| /*! | /*! | ||||
| @@ -459,12 +478,12 @@ enum CallbackType { | |||||
| CALLBACK_NSM_ANNOUNCE = 15, | CALLBACK_NSM_ANNOUNCE = 15, | ||||
| /*! | /*! | ||||
| * Non-Session-Manager Open message. | |||||
| * Non-Session-Manager Open message #1. | |||||
| */ | */ | ||||
| CALLBACK_NSM_OPEN1 = 16, | CALLBACK_NSM_OPEN1 = 16, | ||||
| /*! | /*! | ||||
| * Non-Session-Manager Open message. | |||||
| * Non-Session-Manager Open message #2. | |||||
| */ | */ | ||||
| CALLBACK_NSM_OPEN2 = 17, | CALLBACK_NSM_OPEN2 = 17, | ||||
| @@ -480,34 +499,23 @@ enum CallbackType { | |||||
| }; | }; | ||||
| /*! | /*! | ||||
| * Engine process mode, changed using setOption(). | |||||
| * Engine process mode, changed using set_option(). | |||||
| * | * | ||||
| * \see OPTION_PROCESS_MODE | * \see OPTION_PROCESS_MODE | ||||
| */ | */ | ||||
| enum ProcessModeType { | enum ProcessModeType { | ||||
| PROCESS_MODE_SINGLE_CLIENT = 0, //!< Single client mode (dynamic audio input/outputs as needed by plugins) | |||||
| PROCESS_MODE_MULTIPLE_CLIENTS = 1, //!< Multiple client mode (1 client per plugin) | |||||
| PROCESS_MODE_SINGLE_CLIENT = 0, //!< Single client mode (dynamic input/outputs as needed by plugins) | |||||
| PROCESS_MODE_MULTIPLE_CLIENTS = 1, //!< Multiple client mode (1 master client + 1 client per plugin) | |||||
| PROCESS_MODE_CONTINUOUS_RACK = 2 //!< Single client, "rack" mode. Processes plugins in order of id, with forced stereo. | PROCESS_MODE_CONTINUOUS_RACK = 2 //!< Single client, "rack" mode. Processes plugins in order of id, with forced stereo. | ||||
| }; | }; | ||||
| /*! | /*! | ||||
| * Callback function the backend will call when something interesting happens. | * Callback function the backend will call when something interesting happens. | ||||
| * | * | ||||
| * \see CarlaEngine::setCallback() | |||||
| * \see set_callback_function() | |||||
| */ | */ | ||||
| typedef void (*CallbackFunc)(void* ptr, CallbackType action, unsigned short pluginId, int value1, int value2, double value3); | typedef void (*CallbackFunc)(void* ptr, CallbackType action, unsigned short pluginId, int value1, int value2, double value3); | ||||
| struct midi_program_t { | |||||
| uint32_t bank; | |||||
| uint32_t program; | |||||
| const char* name; | |||||
| midi_program_t() | |||||
| : bank(0), | |||||
| program(0), | |||||
| name(nullptr) {} | |||||
| }; | |||||
| struct ParameterData { | struct ParameterData { | ||||
| ParameterType type; | ParameterType type; | ||||
| int32_t index; | int32_t index; | ||||
| @@ -542,6 +550,17 @@ struct ParameterRanges { | |||||
| stepLarge(0.1) {} | stepLarge(0.1) {} | ||||
| }; | }; | ||||
| struct MidiProgramData { | |||||
| uint32_t bank; | |||||
| uint32_t program; | |||||
| const char* name; | |||||
| MidiProgramData() | |||||
| : bank(0), | |||||
| program(0), | |||||
| name(nullptr) {} | |||||
| }; | |||||
| struct CustomData { | struct CustomData { | ||||
| CustomDataType type; | CustomDataType type; | ||||
| const char* key; | const char* key; | ||||
| @@ -32,46 +32,48 @@ const char* get_extended_license_text() | |||||
| { | { | ||||
| qDebug("CarlaBackendStandalone::get_extended_license_text()"); | qDebug("CarlaBackendStandalone::get_extended_license_text()"); | ||||
| QString text("<p>This current Carla build is using the following features and 3rd-party code:</p>"); | |||||
| text += "<ul>"; | |||||
| if (! extendedLicenseText) | |||||
| { | |||||
| QString text("<p>This current Carla build is using the following features and 3rd-party code:</p>"); | |||||
| text += "<ul>"; | |||||
| #ifdef WANT_LADSPA | #ifdef WANT_LADSPA | ||||
| text += "<li>LADSPA plugin support, http://www.ladspa.org/</li>"; | |||||
| text += "<li>LADSPA plugin support, http://www.ladspa.org/</li>"; | |||||
| #endif | #endif | ||||
| #ifdef WANT_DSSI | #ifdef WANT_DSSI | ||||
| text += "<li>DSSI plugin support, http://dssi.sourceforge.net/</li>"; | |||||
| text += "<li>DSSI plugin support, http://dssi.sourceforge.net/</li>"; | |||||
| #endif | #endif | ||||
| #ifdef WANT_LV2 | #ifdef WANT_LV2 | ||||
| text += "<li>LV2 plugin support, http://lv2plug.in/</li>"; | |||||
| text += "<li>LV2 plugin support, http://lv2plug.in/</li>"; | |||||
| #endif | #endif | ||||
| #ifdef WANT_VST | #ifdef WANT_VST | ||||
| # ifdef VESTIGE_HEADER | # ifdef VESTIGE_HEADER | ||||
| text += "<li>VST plugin support, using VeSTige header by Javier Serrano Polo</li>"; | |||||
| text += "<li>VST plugin support, using VeSTige header by Javier Serrano Polo</li>"; | |||||
| # else | # else | ||||
| text += "<li>VST plugin support, using official VST SDK 2.4 trademark of Steinberg Media Technologies GmbH</li>"; | |||||
| text += "<li>VST plugin support, using official VST SDK 2.4 (trademark of Steinberg Media Technologies GmbH)</li>"; | |||||
| # endif | # endif | ||||
| #endif | #endif | ||||
| #ifdef WANT_FLUIDSYNTH | #ifdef WANT_FLUIDSYNTH | ||||
| text += "<li>FluidSynth library for SF2 support, http://www.fluidsynth.org/</li>"; | |||||
| text += "<li>FluidSynth library for SF2 support, http://www.fluidsynth.org/</li>"; | |||||
| #endif | #endif | ||||
| #ifdef WANT_LINUXSAMPLER | #ifdef WANT_LINUXSAMPLER | ||||
| text += "<li>LinuxSampler library for GIG and SFZ support*, http://www.linuxsampler.org/</li>"; | |||||
| text += "<li>LinuxSampler library for GIG and SFZ support*, http://www.linuxsampler.org/</li>"; | |||||
| #endif | #endif | ||||
| text += "<li>liblo library for OSC support, http://liblo.sourceforge.net/</li>"; | |||||
| text += "<li>liblo library for OSC support, http://liblo.sourceforge.net/</li>"; | |||||
| #ifdef WANT_LV2 | #ifdef WANT_LV2 | ||||
| text += "<li>serd, sord, sratom and lilv libraries for LV2 discovery, http://drobilla.net/software/lilv/</li>"; | |||||
| text += "<li>serd, sord, sratom and lilv libraries for LV2 discovery, http://drobilla.net/software/lilv/</li>"; | |||||
| #endif | #endif | ||||
| #ifdef CARLA_ENGINE_RTAUDIO | #ifdef CARLA_ENGINE_RTAUDIO | ||||
| text += "<li>RtAudio and RtMidi libraries for extra Audio and MIDI support, http://www.music.mcgill.ca/~gary/rtaudio/</li>"; | |||||
| text += "<li>RtAudio and RtMidi libraries for extra Audio and MIDI support, http://www.music.mcgill.ca/~gary/rtaudio/</li>"; | |||||
| #endif | #endif | ||||
| text += "</ul>"; | |||||
| text += "</ul>"; | |||||
| #ifdef WANT_LINUXSAMPLER | #ifdef WANT_LINUXSAMPLER | ||||
| text += "<p>(*) Using LinuxSampler code in commercial hardware or software products is not allowed without prior written authorization by the authors.</p>"; | |||||
| text += "<p>(*) Using LinuxSampler code in commercial hardware or software products is not allowed without prior written authorization by the authors.</p>"; | |||||
| #endif | #endif | ||||
| if (! extendedLicenseText) | |||||
| extendedLicenseText = strdup(text.toUtf8().constData()); | extendedLicenseText = strdup(text.toUtf8().constData()); | ||||
| } | |||||
| return extendedLicenseText; | return extendedLicenseText; | ||||
| } | } | ||||
| @@ -99,7 +101,8 @@ const char* get_engine_driver_name(unsigned int index) | |||||
| #ifdef CARLA_ENGINE_JACK | #ifdef CARLA_ENGINE_JACK | ||||
| if (index == 0) | if (index == 0) | ||||
| return "JACK"; | return "JACK"; | ||||
| index -= 1; | |||||
| else | |||||
| index -= 1; | |||||
| #endif | #endif | ||||
| #ifdef CARLA_ENGINE_RTAUDIO | #ifdef CARLA_ENGINE_RTAUDIO | ||||
| @@ -586,11 +589,11 @@ const CarlaBackend::ParameterRanges* get_parameter_ranges(unsigned short plugin_ | |||||
| return &ranges; | return &ranges; | ||||
| } | } | ||||
| const CarlaBackend::midi_program_t* get_midi_program_data(unsigned short plugin_id, uint32_t midi_program_id) | |||||
| const CarlaBackend::MidiProgramData* get_midi_program_data(unsigned short plugin_id, uint32_t midi_program_id) | |||||
| { | { | ||||
| qDebug("CarlaBackendStandalone::get_midi_program_data(%i, %i)", plugin_id, midi_program_id); | qDebug("CarlaBackendStandalone::get_midi_program_data(%i, %i)", plugin_id, midi_program_id); | ||||
| static CarlaBackend::midi_program_t data; | |||||
| static CarlaBackend::MidiProgramData data; | |||||
| CarlaBackend::CarlaPlugin* const plugin = carlaEngine->getPlugin(plugin_id); | CarlaBackend::CarlaPlugin* const plugin = carlaEngine->getPlugin(plugin_id); | ||||
| @@ -1254,11 +1257,11 @@ void set_callback_function(CarlaBackend::CallbackFunc func) | |||||
| carlaEngine->setCallback(func, nullptr); | carlaEngine->setCallback(func, nullptr); | ||||
| } | } | ||||
| void set_option(CarlaBackend::OptionsType option, int value, const char* valueStr) | |||||
| void set_option(CarlaBackend::OptionsType option, int value, const char* value_str) | |||||
| { | { | ||||
| qDebug("CarlaBackendStandalone::set_option(%s, %i, \"%s\")", CarlaBackend::OptionsType2str(option), value, valueStr); | |||||
| qDebug("CarlaBackendStandalone::set_option(%s, %i, \"%s\")", CarlaBackend::OptionsType2str(option), value, value_str); | |||||
| CarlaBackend::setOption(option, value, valueStr); | |||||
| CarlaBackend::setOption(option, value, value_str); | |||||
| } | } | ||||
| // ------------------------------------------------------------------------------------------------------------------- | // ------------------------------------------------------------------------------------------------------------------- | ||||
| @@ -1340,7 +1343,7 @@ protected: | |||||
| int nsm_open_handler(const char* const path, const char* const types, lo_arg** const argv, const int argc, const lo_message msg) | int nsm_open_handler(const char* const path, const char* const types, lo_arg** const argv, const int argc, const lo_message msg) | ||||
| { | { | ||||
| qDebug("CarlaNSM::nsm_open_handler(%s, %i, %p, %s, %p)", path, argc, argv, types, msg); | |||||
| qDebug("CarlaNSM::nsm_open_handler(\"%s\", \"%s\", %p, %i, %p)", path, types, argv, argc, msg); | |||||
| if (! carlaFunc) | if (! carlaFunc) | ||||
| return 1; | return 1; | ||||
| @@ -1365,7 +1368,7 @@ protected: | |||||
| int nsm_save_handler(const char* const path, const char* const types, lo_arg** const argv, const int argc, const lo_message msg) | int nsm_save_handler(const char* const path, const char* const types, lo_arg** const argv, const int argc, const lo_message msg) | ||||
| { | { | ||||
| qDebug("CarlaNSM::nsm_save_handler(%s, %i, %p, %s, %p)", path, argc, argv, types, msg); | |||||
| qDebug("CarlaNSM::nsm_save_handler(\"%s\", \"%s\", %p, %i, %p)", path, types, argv, argc, msg); | |||||
| if (! carlaFunc) | if (! carlaFunc) | ||||
| return 1; | return 1; | ||||
| @@ -25,7 +25,7 @@ | |||||
| /*! | /*! | ||||
| * @defgroup CarlaBackendStandalone Carla Backend Standalone | * @defgroup CarlaBackendStandalone Carla Backend Standalone | ||||
| * | * | ||||
| * The Carla Backend Standalone | |||||
| * The Carla Backend Standalone API | |||||
| * | * | ||||
| * @{ | * @{ | ||||
| */ | */ | ||||
| @@ -120,7 +120,7 @@ CARLA_EXPORT const GuiInfo* get_gui_info(unsigned short plugin_id); | |||||
| CARLA_EXPORT const CarlaBackend::ParameterData* get_parameter_data(unsigned short plugin_id, uint32_t parameter_id); | CARLA_EXPORT const CarlaBackend::ParameterData* get_parameter_data(unsigned short plugin_id, uint32_t parameter_id); | ||||
| CARLA_EXPORT const CarlaBackend::ParameterRanges* get_parameter_ranges(unsigned short plugin_id, uint32_t parameter_id); | CARLA_EXPORT const CarlaBackend::ParameterRanges* get_parameter_ranges(unsigned short plugin_id, uint32_t parameter_id); | ||||
| CARLA_EXPORT const CarlaBackend::midi_program_t* get_midi_program_data(unsigned short plugin_id, uint32_t midi_program_id); | |||||
| CARLA_EXPORT const CarlaBackend::MidiProgramData* get_midi_program_data(unsigned short plugin_id, uint32_t midi_program_id); | |||||
| CARLA_EXPORT const CarlaBackend::CustomData* get_custom_data(unsigned short plugin_id, uint32_t custom_data_id); | CARLA_EXPORT const CarlaBackend::CustomData* get_custom_data(unsigned short plugin_id, uint32_t custom_data_id); | ||||
| CARLA_EXPORT const char* get_chunk_data(unsigned short plugin_id); | CARLA_EXPORT const char* get_chunk_data(unsigned short plugin_id); | ||||
| @@ -172,7 +172,7 @@ CARLA_EXPORT const char* get_last_error(); | |||||
| CARLA_EXPORT const char* get_host_osc_url(); | CARLA_EXPORT const char* get_host_osc_url(); | ||||
| CARLA_EXPORT void set_callback_function(CarlaBackend::CallbackFunc func); | CARLA_EXPORT void set_callback_function(CarlaBackend::CallbackFunc func); | ||||
| CARLA_EXPORT void set_option(CarlaBackend::OptionsType option, int value, const char* valueStr); | |||||
| CARLA_EXPORT void set_option(CarlaBackend::OptionsType option, int value, const char* value_str); | |||||
| CARLA_EXPORT void nsm_announce(const char* url, int pid); | CARLA_EXPORT void nsm_announce(const char* url, int pid); | ||||
| CARLA_EXPORT void nsm_reply_open(); | CARLA_EXPORT void nsm_reply_open(); | ||||
| @@ -391,7 +391,7 @@ public: | |||||
| midiprog.count = count; | midiprog.count = count; | ||||
| if (midiprog.count > 0) | if (midiprog.count > 0) | ||||
| midiprog.data = new midi_program_t [midiprog.count]; | |||||
| midiprog.data = new MidiProgramData[midiprog.count]; | |||||
| else | else | ||||
| midiprog.data = nullptr; | midiprog.data = nullptr; | ||||
| @@ -508,6 +508,7 @@ void CarlaEngine::callback(const CallbackType action, const unsigned short plugi | |||||
| void CarlaEngine::setCallback(const CallbackFunc func, void* const ptr) | void CarlaEngine::setCallback(const CallbackFunc func, void* const ptr) | ||||
| { | { | ||||
| qDebug("CarlaEngine::setCallback(%p, %p)", func, ptr); | qDebug("CarlaEngine::setCallback(%p, %p)", func, ptr); | ||||
| CARLA_ASSERT(func); | |||||
| m_callback = func; | m_callback = func; | ||||
| m_callbackPtr = ptr; | m_callbackPtr = ptr; | ||||
| @@ -346,9 +346,9 @@ public: | |||||
| * \param engine The engine to lock | * \param engine The engine to lock | ||||
| * \param lock Wherever to lock the engine or not, true by default | * \param lock Wherever to lock the engine or not, true by default | ||||
| */ | */ | ||||
| ScopedLocker(CarlaEngine* const engine, bool lock = true) : | |||||
| m_engine(engine), | |||||
| m_lock(lock) | |||||
| ScopedLocker(CarlaEngine* const engine, bool lock = true) | |||||
| : m_engine(engine), | |||||
| m_lock(lock) | |||||
| { | { | ||||
| if (m_lock) | if (m_lock) | ||||
| m_engine->processLock(); | m_engine->processLock(); | ||||
| @@ -779,7 +779,7 @@ public: | |||||
| midiprog.count = descriptor->midiProgramCount; | midiprog.count = descriptor->midiProgramCount; | ||||
| if (midiprog.count > 0) | if (midiprog.count > 0) | ||||
| midiprog.data = new midi_program_t[midiprog.count]; | |||||
| midiprog.data = new MidiProgramData[midiprog.count]; | |||||
| // Update data | // Update data | ||||
| for (i=0; i < midiprog.count; i++) | for (i=0; i < midiprog.count; i++) | ||||
| @@ -25,8 +25,8 @@ void osc_error_handler(const int num, const char* const msg, const char* const p | |||||
| qCritical("osc_error_handler(%i, %s, %s)", num, msg, path); | qCritical("osc_error_handler(%i, %s, %s)", num, msg, path); | ||||
| } | } | ||||
| CarlaOsc::CarlaOsc(CarlaEngine* const engine_) : | |||||
| engine(engine_) | |||||
| CarlaOsc::CarlaOsc(CarlaEngine* const engine_) | |||||
| : engine(engine_) | |||||
| { | { | ||||
| CARLA_ASSERT(engine); | CARLA_ASSERT(engine); | ||||
| qDebug("CarlaOsc::CarlaOsc(%p)", engine_); | qDebug("CarlaOsc::CarlaOsc(%p)", engine_); | ||||
| @@ -143,7 +143,7 @@ struct PluginProgramData { | |||||
| struct PluginMidiProgramData { | struct PluginMidiProgramData { | ||||
| uint32_t count; | uint32_t count; | ||||
| int32_t current; | int32_t current; | ||||
| midi_program_t* data; | |||||
| MidiProgramData* data; | |||||
| PluginMidiProgramData() | PluginMidiProgramData() | ||||
| : count(0), | : count(0), | ||||
| @@ -178,10 +178,10 @@ struct ExternalMidiNote { | |||||
| }; | }; | ||||
| // fallback data | // fallback data | ||||
| static ParameterData paramDataNull; | |||||
| static ParameterRanges paramRangesNull; | |||||
| static midi_program_t midiProgramNull; | |||||
| static CustomData customDataNull; | |||||
| static ParameterData paramDataNull; | |||||
| static ParameterRanges paramRangesNull; | |||||
| static MidiProgramData midiProgramDataNull; | |||||
| static CustomData customDataNull; | |||||
| /*! | /*! | ||||
| * \class CarlaPlugin | * \class CarlaPlugin | ||||
| @@ -535,14 +535,14 @@ public: | |||||
| * | * | ||||
| * \see getMidiProgramName() | * \see getMidiProgramName() | ||||
| */ | */ | ||||
| const midi_program_t* midiProgramData(const uint32_t index) const | |||||
| const MidiProgramData* midiProgramData(const uint32_t index) const | |||||
| { | { | ||||
| CARLA_ASSERT(index < midiprog.count); | CARLA_ASSERT(index < midiprog.count); | ||||
| if (index < midiprog.count) | if (index < midiprog.count) | ||||
| return &midiprog.data[index]; | return &midiprog.data[index]; | ||||
| return &midiProgramNull; | |||||
| return &midiProgramDataNull; | |||||
| } | } | ||||
| /*! | /*! | ||||
| @@ -2156,9 +2156,9 @@ public: | |||||
| * \param plugin The plugin to disable | * \param plugin The plugin to disable | ||||
| * \param disable Wherever to disable the plugin or not, true by default | * \param disable Wherever to disable the plugin or not, true by default | ||||
| */ | */ | ||||
| ScopedDisabler(CarlaPlugin* const plugin, const bool disable = true) : | |||||
| m_plugin(plugin), | |||||
| m_disable(disable) | |||||
| ScopedDisabler(CarlaPlugin* const plugin, const bool disable = true) | |||||
| : m_plugin(plugin), | |||||
| m_disable(disable) | |||||
| { | { | ||||
| if (m_disable) | if (m_disable) | ||||
| { | { | ||||
| @@ -175,11 +175,11 @@ const char* PluginThreadMode2str(const CarlaPluginThread::PluginThreadMode mode) | |||||
| return nullptr; | return nullptr; | ||||
| } | } | ||||
| CarlaPluginThread::CarlaPluginThread(CarlaBackend::CarlaEngine* const engine_, CarlaBackend::CarlaPlugin* const plugin_, const PluginThreadMode mode_, QObject* const parent) : | |||||
| QThread(parent), | |||||
| engine(engine_), | |||||
| plugin(plugin_), | |||||
| mode(mode_) | |||||
| CarlaPluginThread::CarlaPluginThread(CarlaBackend::CarlaEngine* const engine_, CarlaBackend::CarlaPlugin* const plugin_, const PluginThreadMode mode_, QObject* const parent) | |||||
| : QThread(parent), | |||||
| engine(engine_), | |||||
| plugin(plugin_), | |||||
| mode(mode_) | |||||
| { | { | ||||
| qDebug("CarlaPluginThread::CarlaPluginThread(plugin:\"%s\", engine:\"%s\", %s)", plugin->name(), engine->getName(), PluginThreadMode2str(mode)); | qDebug("CarlaPluginThread::CarlaPluginThread(plugin:\"%s\", engine:\"%s\", %s)", plugin->name(), engine->getName(), PluginThreadMode2str(mode)); | ||||
| @@ -731,7 +731,7 @@ public: | |||||
| } | } | ||||
| if (midiprog.count > 0) | if (midiprog.count > 0) | ||||
| midiprog.data = new midi_program_t[midiprog.count]; | |||||
| midiprog.data = new MidiProgramData[midiprog.count]; | |||||
| // Update data | // Update data | ||||
| for (i=0; i < midiprog.count; i++) | for (i=0; i < midiprog.count; i++) | ||||
| @@ -762,7 +762,7 @@ public: | |||||
| CARLA_ASSERT(midiprog.count > 0); | CARLA_ASSERT(midiprog.count > 0); | ||||
| if (midiprog.count > 0) | if (midiprog.count > 0) | ||||
| midiprog.data = new midi_program_t[midiprog.count]; | |||||
| midiprog.data = new MidiProgramData[midiprog.count]; | |||||
| // Update data | // Update data | ||||
| uint32_t i = 0; | uint32_t i = 0; | ||||
| @@ -247,7 +247,7 @@ public: | |||||
| CARLA_ASSERT(midiprog.count > 0); | CARLA_ASSERT(midiprog.count > 0); | ||||
| if (midiprog.count > 0) | if (midiprog.count > 0) | ||||
| midiprog.data = new midi_program_t [midiprog.count]; | |||||
| midiprog.data = new MidiProgramData[midiprog.count]; | |||||
| // Update data | // Update data | ||||
| for (i=0; i < midiprog.count; i++) | for (i=0; i < midiprog.count; i++) | ||||
| @@ -1758,7 +1758,7 @@ public: | |||||
| } | } | ||||
| if (midiprog.count > 0) | if (midiprog.count > 0) | ||||
| midiprog.data = new midi_program_t[midiprog.count]; | |||||
| midiprog.data = new MidiProgramData[midiprog.count]; | |||||
| // Update data | // Update data | ||||
| for (i=0; i < midiprog.count; i++) | for (i=0; i < midiprog.count; i++) | ||||
| @@ -22,7 +22,8 @@ | |||||
| class MidiSplitPlugin : public PluginDescriptorClass | class MidiSplitPlugin : public PluginDescriptorClass | ||||
| { | { | ||||
| public: | public: | ||||
| MidiSplitPlugin(const PluginDescriptorClass* master) : PluginDescriptorClass(master) | |||||
| MidiSplitPlugin(const PluginDescriptorClass* master) | |||||
| : PluginDescriptorClass(master) | |||||
| { | { | ||||
| if (! master) | if (! master) | ||||
| return; | return; | ||||
| @@ -10,7 +10,7 @@ PKGCONFIG += fluidsynth linuxsampler | |||||
| PKGCONFIG += suil-0 | PKGCONFIG += suil-0 | ||||
| TARGET = carla_backend | TARGET = carla_backend | ||||
| TEMPLATE = lib # app | |||||
| TEMPLATE = app | |||||
| VERSION = 0.5.0 | VERSION = 0.5.0 | ||||
| SOURCES = \ | SOURCES = \ | ||||
| @@ -69,7 +69,7 @@ LIBS = -ldl \ | |||||
| ../../carla-rtmempool/carla_rtmempool.a | ../../carla-rtmempool/carla_rtmempool.a | ||||
| DEFINES = QTCREATOR_TEST | DEFINES = QTCREATOR_TEST | ||||
| DEFINES += DEBUG # NDEBUG | |||||
| DEFINES += DEBUG NDEBUG | |||||
| DEFINES += CARLA_ENGINE_JACK | DEFINES += CARLA_ENGINE_JACK | ||||
| DEFINES += CARLA_ENGINE_RTAUDIO HAVE_GETTIMEOFDAY __LINUX_ALSA__ __LINUX_ALSASEQ__ __LINUX_PULSE__ __RTAUDIO_DEBUG__ __RTMIDI_DEBUG__ | DEFINES += CARLA_ENGINE_RTAUDIO HAVE_GETTIMEOFDAY __LINUX_ALSA__ __LINUX_ALSASEQ__ __LINUX_PULSE__ __RTAUDIO_DEBUG__ __RTMIDI_DEBUG__ | ||||
| DEFINES += CARLA_ENGINE_LV2 | DEFINES += CARLA_ENGINE_LV2 | ||||
| @@ -1694,7 +1694,7 @@ public: | |||||
| { | { | ||||
| #ifdef DEBUG | #ifdef DEBUG | ||||
| if (opcode != audioMasterGetTime) | if (opcode != audioMasterGetTime) | ||||
| qDebug("VstPlugin::hostCallback(%p, %s, %i, " P_INTPTR ", %p, %f)", effect, vstMasterOpcode2str(opcode), index, value, ptr, opt); | |||||
| qDebug("VstPlugin::hostCallback(%p, %02i:%s, %i, " P_INTPTR ", %p, %f)", effect, opcode, vstMasterOpcode2str(opcode), index, value, ptr, opt); | |||||
| #endif | #endif | ||||
| #if 0 | #if 0 | ||||
| @@ -2097,7 +2097,7 @@ public: | |||||
| default: | default: | ||||
| #ifdef DEBUG | #ifdef DEBUG | ||||
| qDebug("VstPlugin::hostCallback(%p, %s, %i, " P_INTPTR ", %p, %f)", effect, vstMasterOpcode2str(opcode), index, value, ptr, opt); | |||||
| qDebug("VstPlugin::hostCallback(%p, %02i:%s, %i, " P_INTPTR ", %p, %f)", effect, opcode, vstMasterOpcode2str(opcode), index, value, ptr, opt); | |||||
| #endif | #endif | ||||
| break; | break; | ||||
| } | } | ||||
| @@ -241,7 +241,7 @@ EXPAND_ONLY_PREDEF = NO | |||||
| SEARCH_INCLUDES = YES | SEARCH_INCLUDES = YES | ||||
| INCLUDE_PATH = | INCLUDE_PATH = | ||||
| INCLUDE_FILE_PATTERNS = | INCLUDE_FILE_PATTERNS = | ||||
| PREDEFINED = BUILD_BRIDGE BUILD_BRIDGE_PLUGIN BUILD_BRIDGE_UI BRIDGE_LV2 BRIDGE_VST LV2_GTK2 BRIDGE_LV2_GTK3 BRIDGE_LV2_QT4 BRIDGE_LV2_X11 BRIDGE_VST_HWND BRIDGE_VST_X11 | |||||
| PREDEFINED = DOXYGEN BUILD_BRIDGE BUILD_BRIDGE_PLUGIN BUILD_BRIDGE_UI BRIDGE_LV2 BRIDGE_VST LV2_GTK2 BRIDGE_LV2_GTK3 BRIDGE_LV2_QT4 BRIDGE_LV2_X11 BRIDGE_VST_HWND BRIDGE_VST_X11 | |||||
| EXPAND_AS_DEFINED = | EXPAND_AS_DEFINED = | ||||
| SKIP_FUNCTION_MACROS = YES | SKIP_FUNCTION_MACROS = YES | ||||
| #--------------------------------------------------------------------------- | #--------------------------------------------------------------------------- | ||||
| @@ -103,7 +103,7 @@ | |||||
| #endif | #endif | ||||
| #ifdef NDEBUG | #ifdef NDEBUG | ||||
| # define CARLA_ASSERT(cond) ((!(cond)) ? carla_assert(#cond,__FILE__,__LINE__) : pass()) | |||||
| # define CARLA_ASSERT(cond) ((!(cond)) ? carla_assert(#cond, __FILE__, __LINE__) : pass()) | |||||
| #else | #else | ||||
| # define CARLA_ASSERT Q_ASSERT | # define CARLA_ASSERT Q_ASSERT | ||||
| #endif | #endif | ||||
| @@ -131,9 +131,9 @@ void carla_assert(const char* const assertion, const char* const file, const int | |||||
| } | } | ||||
| static inline | static inline | ||||
| const char* bool2str(const bool yesno) | |||||
| const char* bool2str(const bool yesNo) | |||||
| { | { | ||||
| return yesno ? "true" : "false"; | |||||
| return yesNo ? "true" : "false"; | |||||
| } | } | ||||
| static inline | static inline | ||||
| @@ -50,10 +50,10 @@ static const float VOLUME_MIN = 0.0f; // -inf dB | |||||
| class AudioOutputDevicePlugin : public AudioOutputDevice | class AudioOutputDevicePlugin : public AudioOutputDevice | ||||
| { | { | ||||
| public: | public: | ||||
| AudioOutputDevicePlugin(CarlaBackend::CarlaEngine* const engine, CarlaBackend::CarlaPlugin* const plugin) : | |||||
| AudioOutputDevice(std::map<String, DeviceCreationParameter*>()), | |||||
| m_engine(engine), | |||||
| m_plugin(plugin) | |||||
| AudioOutputDevicePlugin(CarlaBackend::CarlaEngine* const engine, CarlaBackend::CarlaPlugin* const plugin) | |||||
| : AudioOutputDevice(std::map<String, DeviceCreationParameter*>()), | |||||
| m_engine(engine), | |||||
| m_plugin(plugin) | |||||
| { | { | ||||
| } | } | ||||
| @@ -108,8 +108,8 @@ private: | |||||
| class MidiInputDevicePlugin : public MidiInputDevice | class MidiInputDevicePlugin : public MidiInputDevice | ||||
| { | { | ||||
| public: | public: | ||||
| MidiInputDevicePlugin(Sampler* const sampler) : | |||||
| MidiInputDevice(std::map<String, DeviceCreationParameter*>(), sampler) | |||||
| MidiInputDevicePlugin(Sampler* const sampler) | |||||
| : MidiInputDevice(std::map<String, DeviceCreationParameter*>(), sampler) | |||||
| { | { | ||||
| } | } | ||||
| @@ -147,8 +147,8 @@ public: | |||||
| class MidiInputPortPlugin : public MidiInputPort | class MidiInputPortPlugin : public MidiInputPort | ||||
| { | { | ||||
| protected: | protected: | ||||
| MidiInputPortPlugin(MidiInputDevicePlugin* const device, const int portNumber) : | |||||
| MidiInputPort(device, portNumber) | |||||
| MidiInputPortPlugin(MidiInputDevicePlugin* const device, const int portNumber) | |||||
| : MidiInputPort(device, portNumber) | |||||
| { | { | ||||
| } | } | ||||
| friend class MidiInputDevicePlugin; | friend class MidiInputDevicePlugin; | ||||
| @@ -95,112 +95,113 @@ struct LV2_Atom_Worker { | |||||
| class Lv2WorldClass : public Lilv::World | class Lv2WorldClass : public Lilv::World | ||||
| { | { | ||||
| public: | public: | ||||
| Lv2WorldClass() : Lilv::World(), | |||||
| port (new_uri(LV2_CORE__port)), | |||||
| symbol (new_uri(LV2_CORE__symbol)), | |||||
| designation (new_uri(LV2_CORE__designation)), | |||||
| freewheeling (new_uri(LV2_CORE__freeWheeling)), | |||||
| reportsLatency (new_uri(LV2_CORE__reportsLatency)), | |||||
| class_allpass (new_uri(LV2_CORE__AllpassPlugin)), | |||||
| class_amplifier (new_uri(LV2_CORE__AmplifierPlugin)), | |||||
| class_analyzer (new_uri(LV2_CORE__AnalyserPlugin)), | |||||
| class_bandpass (new_uri(LV2_CORE__BandpassPlugin)), | |||||
| class_chorus (new_uri(LV2_CORE__ChorusPlugin)), | |||||
| class_comb (new_uri(LV2_CORE__CombPlugin)), | |||||
| class_compressor (new_uri(LV2_CORE__CompressorPlugin)), | |||||
| class_constant (new_uri(LV2_CORE__ConstantPlugin)), | |||||
| class_converter (new_uri(LV2_CORE__ConverterPlugin)), | |||||
| class_delay (new_uri(LV2_CORE__DelayPlugin)), | |||||
| class_distortion (new_uri(LV2_CORE__DistortionPlugin)), | |||||
| class_dynamics (new_uri(LV2_CORE__DynamicsPlugin)), | |||||
| class_eq (new_uri(LV2_CORE__EQPlugin)), | |||||
| class_expander (new_uri(LV2_CORE__ExpanderPlugin)), | |||||
| class_filter (new_uri(LV2_CORE__FilterPlugin)), | |||||
| class_flanger (new_uri(LV2_CORE__FlangerPlugin)), | |||||
| class_function (new_uri(LV2_CORE__FunctionPlugin)), | |||||
| class_gate (new_uri(LV2_CORE__GatePlugin)), | |||||
| class_generator (new_uri(LV2_CORE__GeneratorPlugin)), | |||||
| class_highpass (new_uri(LV2_CORE__HighpassPlugin)), | |||||
| class_instrument (new_uri(LV2_CORE__InstrumentPlugin)), | |||||
| class_limiter (new_uri(LV2_CORE__LimiterPlugin)), | |||||
| class_lowpass (new_uri(LV2_CORE__LowpassPlugin)), | |||||
| class_mixer (new_uri(LV2_CORE__MixerPlugin)), | |||||
| class_modulator (new_uri(LV2_CORE__ModulatorPlugin)), | |||||
| class_multi_eq (new_uri(LV2_CORE__MultiEQPlugin)), | |||||
| class_oscillator (new_uri(LV2_CORE__OscillatorPlugin)), | |||||
| class_para_eq (new_uri(LV2_CORE__ParaEQPlugin)), | |||||
| class_phaser (new_uri(LV2_CORE__PhaserPlugin)), | |||||
| class_pitch (new_uri(LV2_CORE__PitchPlugin)), | |||||
| class_reverb (new_uri(LV2_CORE__ReverbPlugin)), | |||||
| class_simulator (new_uri(LV2_CORE__SimulatorPlugin)), | |||||
| class_spatial (new_uri(LV2_CORE__SpatialPlugin)), | |||||
| class_spectral (new_uri(LV2_CORE__SpectralPlugin)), | |||||
| class_utility (new_uri(LV2_CORE__UtilityPlugin)), | |||||
| class_waveshaper (new_uri(LV2_CORE__WaveshaperPlugin)), | |||||
| port_input (new_uri(LV2_CORE__InputPort)), | |||||
| port_output (new_uri(LV2_CORE__OutputPort)), | |||||
| port_control (new_uri(LV2_CORE__ControlPort)), | |||||
| port_audio (new_uri(LV2_CORE__AudioPort)), | |||||
| port_cv (new_uri(LV2_CORE__CVPort)), | |||||
| port_atom (new_uri(LV2_ATOM__AtomPort)), | |||||
| port_event (new_uri(LV2_EVENT__EventPort)), | |||||
| port_midi_ll (new_uri(LV2_MIDI_LL__MidiPort)), | |||||
| pprop_optional (new_uri(LV2_CORE__connectionOptional)), | |||||
| pprop_enumeration (new_uri(LV2_CORE__enumeration)), | |||||
| pprop_integer (new_uri(LV2_CORE__integer)), | |||||
| pprop_sample_rate (new_uri(LV2_CORE__sampleRate)), | |||||
| pprop_toggled (new_uri(LV2_CORE__toggled)), | |||||
| pprop_artifacts (new_uri(LV2_PORT_PROPS__causesArtifacts)), | |||||
| pprop_continuous_cv (new_uri(LV2_PORT_PROPS__continuousCV)), | |||||
| pprop_discrete_cv (new_uri(LV2_PORT_PROPS__discreteCV)), | |||||
| pprop_expensive (new_uri(LV2_PORT_PROPS__expensive)), | |||||
| pprop_strict_bounds (new_uri(LV2_PORT_PROPS__hasStrictBounds)), | |||||
| pprop_logarithmic (new_uri(LV2_PORT_PROPS__logarithmic)), | |||||
| pprop_not_automatic (new_uri(LV2_PORT_PROPS__notAutomatic)), | |||||
| pprop_not_on_gui (new_uri(LV2_PORT_PROPS__notOnGUI)), | |||||
| pprop_trigger (new_uri(LV2_PORT_PROPS__trigger)), | |||||
| unit_unit (new_uri(LV2_UNITS__unit)), | |||||
| unit_name (new_uri(LV2_UNITS__name)), | |||||
| unit_render (new_uri(LV2_UNITS__render)), | |||||
| unit_symbol (new_uri(LV2_UNITS__symbol)), | |||||
| ui_gtk2 (new_uri(LV2_UI__GtkUI)), | |||||
| ui_gtk3 (new_uri(LV2_UI__Gtk3UI)), | |||||
| ui_qt4 (new_uri(LV2_UI__Qt4UI)), | |||||
| ui_cocoa (new_uri(LV2_UI__CocoaUI)), | |||||
| ui_windows (new_uri(LV2_UI__WindowsUI)), | |||||
| ui_x11 (new_uri(LV2_UI__X11UI)), | |||||
| ui_external (new_uri(LV2_EXTERNAL_UI__Widget)), | |||||
| ui_external_old (new_uri(LV2_EXTERNAL_UI_DEPRECATED_URI)), | |||||
| preset_preset (new_uri(LV2_PRESETS__Preset)), | |||||
| preset_value (new_uri(LV2_PRESETS__value)), | |||||
| state_state (new_uri(LV2_STATE__state)), | |||||
| value_default (new_uri(LV2_CORE__default)), | |||||
| value_minimum (new_uri(LV2_CORE__minimum)), | |||||
| value_maximum (new_uri(LV2_CORE__maximum)), | |||||
| atom_sequence (new_uri(LV2_ATOM__Sequence)), | |||||
| atom_buffer_type (new_uri(LV2_ATOM__bufferType)), | |||||
| atom_supports (new_uri(LV2_ATOM__supports)), | |||||
| midi_event (new_uri(LV2_MIDI__MidiEvent)), | |||||
| patch_message (new_uri(LV2_PATCH__Message)), | |||||
| mm_default_control (new_uri(NS_llmm "defaultMidiController")), | |||||
| mm_control_type (new_uri(NS_llmm "controllerType")), | |||||
| mm_control_number (new_uri(NS_llmm "controllerNumber")), | |||||
| dct_replaces (new_uri(NS_dct "replaces")), | |||||
| doap_license (new_uri(NS_doap "license")), | |||||
| rdf_type (new_uri(NS_rdf "type")), | |||||
| rdfs_label (new_uri(NS_rdfs "label")) | |||||
| Lv2WorldClass() | |||||
| : Lilv::World(), | |||||
| port (new_uri(LV2_CORE__port)), | |||||
| symbol (new_uri(LV2_CORE__symbol)), | |||||
| designation (new_uri(LV2_CORE__designation)), | |||||
| freewheeling (new_uri(LV2_CORE__freeWheeling)), | |||||
| reportsLatency (new_uri(LV2_CORE__reportsLatency)), | |||||
| class_allpass (new_uri(LV2_CORE__AllpassPlugin)), | |||||
| class_amplifier (new_uri(LV2_CORE__AmplifierPlugin)), | |||||
| class_analyzer (new_uri(LV2_CORE__AnalyserPlugin)), | |||||
| class_bandpass (new_uri(LV2_CORE__BandpassPlugin)), | |||||
| class_chorus (new_uri(LV2_CORE__ChorusPlugin)), | |||||
| class_comb (new_uri(LV2_CORE__CombPlugin)), | |||||
| class_compressor (new_uri(LV2_CORE__CompressorPlugin)), | |||||
| class_constant (new_uri(LV2_CORE__ConstantPlugin)), | |||||
| class_converter (new_uri(LV2_CORE__ConverterPlugin)), | |||||
| class_delay (new_uri(LV2_CORE__DelayPlugin)), | |||||
| class_distortion (new_uri(LV2_CORE__DistortionPlugin)), | |||||
| class_dynamics (new_uri(LV2_CORE__DynamicsPlugin)), | |||||
| class_eq (new_uri(LV2_CORE__EQPlugin)), | |||||
| class_expander (new_uri(LV2_CORE__ExpanderPlugin)), | |||||
| class_filter (new_uri(LV2_CORE__FilterPlugin)), | |||||
| class_flanger (new_uri(LV2_CORE__FlangerPlugin)), | |||||
| class_function (new_uri(LV2_CORE__FunctionPlugin)), | |||||
| class_gate (new_uri(LV2_CORE__GatePlugin)), | |||||
| class_generator (new_uri(LV2_CORE__GeneratorPlugin)), | |||||
| class_highpass (new_uri(LV2_CORE__HighpassPlugin)), | |||||
| class_instrument (new_uri(LV2_CORE__InstrumentPlugin)), | |||||
| class_limiter (new_uri(LV2_CORE__LimiterPlugin)), | |||||
| class_lowpass (new_uri(LV2_CORE__LowpassPlugin)), | |||||
| class_mixer (new_uri(LV2_CORE__MixerPlugin)), | |||||
| class_modulator (new_uri(LV2_CORE__ModulatorPlugin)), | |||||
| class_multi_eq (new_uri(LV2_CORE__MultiEQPlugin)), | |||||
| class_oscillator (new_uri(LV2_CORE__OscillatorPlugin)), | |||||
| class_para_eq (new_uri(LV2_CORE__ParaEQPlugin)), | |||||
| class_phaser (new_uri(LV2_CORE__PhaserPlugin)), | |||||
| class_pitch (new_uri(LV2_CORE__PitchPlugin)), | |||||
| class_reverb (new_uri(LV2_CORE__ReverbPlugin)), | |||||
| class_simulator (new_uri(LV2_CORE__SimulatorPlugin)), | |||||
| class_spatial (new_uri(LV2_CORE__SpatialPlugin)), | |||||
| class_spectral (new_uri(LV2_CORE__SpectralPlugin)), | |||||
| class_utility (new_uri(LV2_CORE__UtilityPlugin)), | |||||
| class_waveshaper (new_uri(LV2_CORE__WaveshaperPlugin)), | |||||
| port_input (new_uri(LV2_CORE__InputPort)), | |||||
| port_output (new_uri(LV2_CORE__OutputPort)), | |||||
| port_control (new_uri(LV2_CORE__ControlPort)), | |||||
| port_audio (new_uri(LV2_CORE__AudioPort)), | |||||
| port_cv (new_uri(LV2_CORE__CVPort)), | |||||
| port_atom (new_uri(LV2_ATOM__AtomPort)), | |||||
| port_event (new_uri(LV2_EVENT__EventPort)), | |||||
| port_midi_ll (new_uri(LV2_MIDI_LL__MidiPort)), | |||||
| pprop_optional (new_uri(LV2_CORE__connectionOptional)), | |||||
| pprop_enumeration (new_uri(LV2_CORE__enumeration)), | |||||
| pprop_integer (new_uri(LV2_CORE__integer)), | |||||
| pprop_sample_rate (new_uri(LV2_CORE__sampleRate)), | |||||
| pprop_toggled (new_uri(LV2_CORE__toggled)), | |||||
| pprop_artifacts (new_uri(LV2_PORT_PROPS__causesArtifacts)), | |||||
| pprop_continuous_cv (new_uri(LV2_PORT_PROPS__continuousCV)), | |||||
| pprop_discrete_cv (new_uri(LV2_PORT_PROPS__discreteCV)), | |||||
| pprop_expensive (new_uri(LV2_PORT_PROPS__expensive)), | |||||
| pprop_strict_bounds (new_uri(LV2_PORT_PROPS__hasStrictBounds)), | |||||
| pprop_logarithmic (new_uri(LV2_PORT_PROPS__logarithmic)), | |||||
| pprop_not_automatic (new_uri(LV2_PORT_PROPS__notAutomatic)), | |||||
| pprop_not_on_gui (new_uri(LV2_PORT_PROPS__notOnGUI)), | |||||
| pprop_trigger (new_uri(LV2_PORT_PROPS__trigger)), | |||||
| unit_unit (new_uri(LV2_UNITS__unit)), | |||||
| unit_name (new_uri(LV2_UNITS__name)), | |||||
| unit_render (new_uri(LV2_UNITS__render)), | |||||
| unit_symbol (new_uri(LV2_UNITS__symbol)), | |||||
| ui_gtk2 (new_uri(LV2_UI__GtkUI)), | |||||
| ui_gtk3 (new_uri(LV2_UI__Gtk3UI)), | |||||
| ui_qt4 (new_uri(LV2_UI__Qt4UI)), | |||||
| ui_cocoa (new_uri(LV2_UI__CocoaUI)), | |||||
| ui_windows (new_uri(LV2_UI__WindowsUI)), | |||||
| ui_x11 (new_uri(LV2_UI__X11UI)), | |||||
| ui_external (new_uri(LV2_EXTERNAL_UI__Widget)), | |||||
| ui_external_old (new_uri(LV2_EXTERNAL_UI_DEPRECATED_URI)), | |||||
| preset_preset (new_uri(LV2_PRESETS__Preset)), | |||||
| preset_value (new_uri(LV2_PRESETS__value)), | |||||
| state_state (new_uri(LV2_STATE__state)), | |||||
| value_default (new_uri(LV2_CORE__default)), | |||||
| value_minimum (new_uri(LV2_CORE__minimum)), | |||||
| value_maximum (new_uri(LV2_CORE__maximum)), | |||||
| atom_sequence (new_uri(LV2_ATOM__Sequence)), | |||||
| atom_buffer_type (new_uri(LV2_ATOM__bufferType)), | |||||
| atom_supports (new_uri(LV2_ATOM__supports)), | |||||
| midi_event (new_uri(LV2_MIDI__MidiEvent)), | |||||
| patch_message (new_uri(LV2_PATCH__Message)), | |||||
| mm_default_control (new_uri(NS_llmm "defaultMidiController")), | |||||
| mm_control_type (new_uri(NS_llmm "controllerType")), | |||||
| mm_control_number (new_uri(NS_llmm "controllerNumber")), | |||||
| dct_replaces (new_uri(NS_dct "replaces")), | |||||
| doap_license (new_uri(NS_doap "license")), | |||||
| rdf_type (new_uri(NS_rdf "type")), | |||||
| rdfs_label (new_uri(NS_rdfs "label")) | |||||
| { | { | ||||
| needInit = true; | needInit = true; | ||||
| } | } | ||||
| @@ -665,13 +665,6 @@ if is64bit: | |||||
| else: | else: | ||||
| c_uintptr = c_uint32 | c_uintptr = c_uint32 | ||||
| class midi_program_t(Structure): | |||||
| _fields_ = [ | |||||
| ("bank", c_uint32), | |||||
| ("program", c_uint32), | |||||
| ("label", c_char_p) | |||||
| ] | |||||
| class ParameterData(Structure): | class ParameterData(Structure): | ||||
| _fields_ = [ | _fields_ = [ | ||||
| ("type", c_enum), | ("type", c_enum), | ||||
| @@ -692,6 +685,13 @@ class ParameterRanges(Structure): | |||||
| ("stepLarge", c_double) | ("stepLarge", c_double) | ||||
| ] | ] | ||||
| class MidiProgramData(Structure): | |||||
| _fields_ = [ | |||||
| ("bank", c_uint32), | |||||
| ("program", c_uint32), | |||||
| ("label", c_char_p) | |||||
| ] | |||||
| class CustomData(Structure): | class CustomData(Structure): | ||||
| _fields_ = [ | _fields_ = [ | ||||
| ("type", c_enum), | ("type", c_enum), | ||||
| @@ -820,7 +820,7 @@ class Host(object): | |||||
| self.lib.get_parameter_ranges.restype = POINTER(ParameterRanges) | self.lib.get_parameter_ranges.restype = POINTER(ParameterRanges) | ||||
| self.lib.get_midi_program_data.argtypes = [c_ushort, c_uint32] | self.lib.get_midi_program_data.argtypes = [c_ushort, c_uint32] | ||||
| self.lib.get_midi_program_data.restype = POINTER(midi_program_t) | |||||
| self.lib.get_midi_program_data.restype = POINTER(MidiProgramData) | |||||
| self.lib.get_custom_data.argtypes = [c_ushort, c_uint32] | self.lib.get_custom_data.argtypes = [c_ushort, c_uint32] | ||||
| self.lib.get_custom_data.restype = POINTER(CustomData) | self.lib.get_custom_data.restype = POINTER(CustomData) | ||||
| @@ -33,7 +33,7 @@ lo_targetName = "" | |||||
| Carla.isControl = True | Carla.isControl = True | ||||
| # Python Object dicts compatible to carla-backend struct ctypes | # Python Object dicts compatible to carla-backend struct ctypes | ||||
| midi_program_t = { | |||||
| MidiProgramData = { | |||||
| 'bank': 0, | 'bank': 0, | ||||
| 'program': 0, | 'program': 0, | ||||
| 'label': None | 'label': None | ||||
| @@ -195,7 +195,7 @@ class Host(object): | |||||
| # add placeholders | # add placeholders | ||||
| for x in range(count): | for x in range(count): | ||||
| self.pluginInfo[index].midiProgramDataS.append(midi_program_t) | |||||
| self.pluginInfo[index].midiProgramDataS.append(MidiProgramData) | |||||
| def _set_parameterInfoS(self, index, paramIndex, data): | def _set_parameterInfoS(self, index, paramIndex, data): | ||||
| if paramIndex < self.pluginInfo[index].parameterCountInfo['total']: | if paramIndex < self.pluginInfo[index].parameterCountInfo['total']: | ||||
| @@ -819,7 +819,7 @@ class CarlaControlW(QMainWindow, ui_carla_control.Ui_CarlaControlW): | |||||
| @pyqtSlot(int, int, int, int, str) | @pyqtSlot(int, int, int, int, str) | ||||
| def slot_handleSetMidiProgramData(self, pluginId, index, bank, program, name): | def slot_handleSetMidiProgramData(self, pluginId, index, bank, program, name): | ||||
| data = deepcopy(midi_program_t) | |||||
| data = deepcopy(MidiProgramData) | |||||
| data['bank'] = bank | data['bank'] = bank | ||||
| data['program'] = program | data['program'] = program | ||||
| data['label'] = name | data['label'] = name | ||||