| @@ -114,43 +114,53 @@ const unsigned int ENGINE_DRIVER_DEVICE_VARIABLE_SAMPLE_RATE = 0x4; | |||||
| * Plugin is a bridge.\n | * Plugin is a bridge.\n | ||||
| * This hint is required because "bridge" itself is not a plugin type. | * This hint is required because "bridge" itself is not a plugin type. | ||||
| */ | */ | ||||
| const unsigned int PLUGIN_IS_BRIDGE = 0x01; | |||||
| const unsigned int PLUGIN_IS_BRIDGE = 0x001; | |||||
| /*! | /*! | ||||
| * Plugin is hard real-time safe. | * Plugin is hard real-time safe. | ||||
| */ | */ | ||||
| const unsigned int PLUGIN_IS_RTSAFE = 0x02; | |||||
| const unsigned int PLUGIN_IS_RTSAFE = 0x002; | |||||
| /*! | /*! | ||||
| * Plugin is a synth (produces sound). | * Plugin is a synth (produces sound). | ||||
| */ | */ | ||||
| const unsigned int PLUGIN_IS_SYNTH = 0x04; | |||||
| const unsigned int PLUGIN_IS_SYNTH = 0x004; | |||||
| /*! | /*! | ||||
| * Plugin has its own custom UI. | * Plugin has its own custom UI. | ||||
| * @see CarlaPlugin::showCustomUI() and carla_show_custom_ui() | * @see CarlaPlugin::showCustomUI() and carla_show_custom_ui() | ||||
| */ | */ | ||||
| const unsigned int PLUGIN_HAS_CUSTOM_UI = 0x08; | |||||
| const unsigned int PLUGIN_HAS_CUSTOM_UI = 0x008; | |||||
| /*! | /*! | ||||
| * Plugin can use internal Dry/Wet control. | * Plugin can use internal Dry/Wet control. | ||||
| */ | */ | ||||
| const unsigned int PLUGIN_CAN_DRYWET = 0x10; | |||||
| const unsigned int PLUGIN_CAN_DRYWET = 0x010; | |||||
| /*! | /*! | ||||
| * Plugin can use internal Volume control. | * Plugin can use internal Volume control. | ||||
| */ | */ | ||||
| const unsigned int PLUGIN_CAN_VOLUME = 0x20; | |||||
| const unsigned int PLUGIN_CAN_VOLUME = 0x020; | |||||
| /*! | /*! | ||||
| * Plugin can use internal (Stereo) Balance controls. | * Plugin can use internal (Stereo) Balance controls. | ||||
| */ | */ | ||||
| const unsigned int PLUGIN_CAN_BALANCE = 0x40; | |||||
| const unsigned int PLUGIN_CAN_BALANCE = 0x040; | |||||
| /*! | /*! | ||||
| * Plugin can use internal (Mono) Panning control. | * Plugin can use internal (Mono) Panning control. | ||||
| */ | */ | ||||
| const unsigned int PLUGIN_CAN_PANNING = 0x80; | |||||
| const unsigned int PLUGIN_CAN_PANNING = 0x080; | |||||
| /*! | |||||
| * Plugin needs a constant, fixed-size audio buffer. | |||||
| */ | |||||
| const unsigned int PLUGIN_NEEDS_FIXED_BUFFERS = 0x100; | |||||
| /*! | |||||
| * Plugin needs all UI events in a single/main thread. | |||||
| */ | |||||
| const unsigned int PLUGIN_NEEDS_SINGLE_THREAD = 0x200; | |||||
| /** @} */ | /** @} */ | ||||
| @@ -540,6 +550,35 @@ typedef enum { | |||||
| } PluginCategory; | } PluginCategory; | ||||
| // ------------------------------------------------------------------------------------------------------------ | |||||
| // Parameter Type | |||||
| /*! | |||||
| * Plugin parameter type. | |||||
| */ | |||||
| typedef enum { | |||||
| /*! | |||||
| * Null parameter type. | |||||
| */ | |||||
| PARAMETER_UNKNOWN = 0, | |||||
| /*! | |||||
| * Input parameter. | |||||
| */ | |||||
| PARAMETER_INPUT = 1, | |||||
| /*! | |||||
| * Ouput parameter. | |||||
| */ | |||||
| PARAMETER_OUTPUT = 2, | |||||
| /*! | |||||
| * Special (hidden) parameter. | |||||
| */ | |||||
| PARAMETER_SPECIAL = 3 | |||||
| } ParameterType; | |||||
| // ------------------------------------------------------------------------------------------------------------ | // ------------------------------------------------------------------------------------------------------------ | ||||
| // Internal Parameter Index | // Internal Parameter Index | ||||
| @@ -1062,7 +1101,18 @@ typedef void (*EngineCallbackFunc)(void* ptr, EngineCallbackOpcode action, uint | |||||
| /*! | /*! | ||||
| * Parameter data. | * Parameter data. | ||||
| */ | */ | ||||
| typedef struct _ParameterData { | |||||
| typedef struct { | |||||
| /*! | |||||
| * This parameter type. | |||||
| */ | |||||
| ParameterType type; | |||||
| /*! | |||||
| * This parameter hints. | |||||
| * @see ParameterHints | |||||
| */ | |||||
| unsigned int hints; | |||||
| /*! | /*! | ||||
| * Index as seen by Carla. | * Index as seen by Carla. | ||||
| */ | */ | ||||
| @@ -1073,12 +1123,6 @@ typedef struct _ParameterData { | |||||
| */ | */ | ||||
| int32_t rindex; | int32_t rindex; | ||||
| /*! | |||||
| * This parameter hints. | |||||
| * @see ParameterHints | |||||
| */ | |||||
| unsigned int hints; | |||||
| /*! | /*! | ||||
| * Currently mapped MIDI CC.\n | * Currently mapped MIDI CC.\n | ||||
| * A value lower than 0 means invalid or unused.\n | * A value lower than 0 means invalid or unused.\n | ||||
| @@ -1094,21 +1138,24 @@ typedef struct _ParameterData { | |||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||
| /*! | /*! | ||||
| * C++ constructor. | |||||
| * Clear data. | |||||
| */ | */ | ||||
| _ParameterData() noexcept | |||||
| : index(PARAMETER_NULL), | |||||
| rindex(-1), | |||||
| hints(0x0), | |||||
| midiCC(-1), | |||||
| midiChannel(0) {} | |||||
| void clear() noexcept | |||||
| { | |||||
| type = PARAMETER_UNKNOWN; | |||||
| hints = 0x0; | |||||
| index = PARAMETER_NULL; | |||||
| rindex = -1; | |||||
| midiCC =-1; | |||||
| midiChannel = 0; | |||||
| } | |||||
| #endif | #endif | ||||
| } ParameterData; | } ParameterData; | ||||
| /*! | /*! | ||||
| * Parameter ranges. | * Parameter ranges. | ||||
| */ | */ | ||||
| typedef struct _ParameterRanges { | |||||
| typedef struct { | |||||
| /*! | /*! | ||||
| * Default value. | * Default value. | ||||
| */ | */ | ||||
| @@ -1141,15 +1188,17 @@ typedef struct _ParameterRanges { | |||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||
| /*! | /*! | ||||
| * C++ constructor. | |||||
| * Clear data. | |||||
| */ | */ | ||||
| _ParameterRanges() noexcept | |||||
| : def(0.0f), | |||||
| min(0.0f), | |||||
| max(1.0f), | |||||
| step(0.01f), | |||||
| stepSmall(0.0001f), | |||||
| stepLarge(0.1f) {} | |||||
| void clear() noexcept | |||||
| { | |||||
| def = 0.0f; | |||||
| min = 0.0f; | |||||
| max = 1.0f; | |||||
| step = 0.01f; | |||||
| stepSmall = 0.0001f; | |||||
| stepLarge = 0.1f; | |||||
| } | |||||
| /*! | /*! | ||||
| * Fix default value within range. | * Fix default value within range. | ||||
| @@ -1229,7 +1278,7 @@ typedef struct _ParameterRanges { | |||||
| /*! | /*! | ||||
| * MIDI Program data. | * MIDI Program data. | ||||
| */ | */ | ||||
| typedef struct _MidiProgramData { | |||||
| typedef struct { | |||||
| /*! | /*! | ||||
| * MIDI bank. | * MIDI bank. | ||||
| */ | */ | ||||
| @@ -1247,19 +1296,21 @@ typedef struct _MidiProgramData { | |||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||
| /*! | /*! | ||||
| * C++ constructor. | |||||
| * Clear data. | |||||
| */ | */ | ||||
| _MidiProgramData() noexcept | |||||
| : bank(0), | |||||
| program(0), | |||||
| name(nullptr) {} | |||||
| void clear() noexcept | |||||
| { | |||||
| bank = 0; | |||||
| program = 0; | |||||
| name = nullptr; | |||||
| } | |||||
| #endif | #endif | ||||
| } MidiProgramData; | } MidiProgramData; | ||||
| /*! | /*! | ||||
| * Custom data, used for saving key:value 'dictionaries'. | * Custom data, used for saving key:value 'dictionaries'. | ||||
| */ | */ | ||||
| typedef struct _CustomData { | |||||
| typedef struct { | |||||
| /*! | /*! | ||||
| * Value type, in URI form. | * Value type, in URI form. | ||||
| * @see CustomDataTypes | * @see CustomDataTypes | ||||
| @@ -1279,19 +1330,21 @@ typedef struct _CustomData { | |||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||
| /*! | /*! | ||||
| * C++ constructor. | |||||
| * Clear data. | |||||
| */ | */ | ||||
| _CustomData() noexcept | |||||
| : type(nullptr), | |||||
| key(nullptr), | |||||
| value(nullptr) {} | |||||
| void clear() noexcept | |||||
| { | |||||
| type = nullptr; | |||||
| key = nullptr; | |||||
| value = nullptr; | |||||
| } | |||||
| #endif | #endif | ||||
| } CustomData; | } CustomData; | ||||
| /*! | /*! | ||||
| * Engine driver device information. | * Engine driver device information. | ||||
| */ | */ | ||||
| typedef struct _EngineDriverDeviceInfo { | |||||
| typedef struct { | |||||
| /*! | /*! | ||||
| * This driver device hints. | * This driver device hints. | ||||
| * @see EngineDriverHints | * @see EngineDriverHints | ||||
| @@ -1312,12 +1365,14 @@ typedef struct _EngineDriverDeviceInfo { | |||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||
| /*! | /*! | ||||
| * C++ constructor. | |||||
| * Clear data. | |||||
| */ | */ | ||||
| _EngineDriverDeviceInfo() | |||||
| : hints(0x0), | |||||
| bufferSizes(nullptr), | |||||
| sampleRates(nullptr) {} | |||||
| void clear() noexcept | |||||
| { | |||||
| hints = 0x0; | |||||
| bufferSizes = nullptr; | |||||
| sampleRates = nullptr; | |||||
| } | |||||
| #endif | #endif | ||||
| } EngineDriverDeviceInfo; | } EngineDriverDeviceInfo; | ||||
| @@ -168,6 +168,9 @@ struct EngineControlEvent { | |||||
| uint16_t param; //!< Parameter Id, midi bank or midi program. | uint16_t param; //!< Parameter Id, midi bank or midi program. | ||||
| float value; //!< Parameter value, normalized to 0.0f<->1.0f. | float value; //!< Parameter value, normalized to 0.0f<->1.0f. | ||||
| /*! | |||||
| * Clear data. | |||||
| */ | |||||
| void clear() noexcept | void clear() noexcept | ||||
| { | { | ||||
| type = kEngineControlEventTypeNull; | type = kEngineControlEventTypeNull; | ||||
| @@ -181,17 +184,20 @@ struct EngineControlEvent { | |||||
| */ | */ | ||||
| struct EngineMidiEvent { | struct EngineMidiEvent { | ||||
| uint8_t port; //!< Port offset (usually 0) | uint8_t port; //!< Port offset (usually 0) | ||||
| uint8_t data[4]; //!< MIDI data, without channel bit | |||||
| uint8_t size; //!< Number of bytes used | uint8_t size; //!< Number of bytes used | ||||
| uint8_t data[4]; //!< MIDI data, without channel bit | |||||
| /*! | |||||
| * Clear data. | |||||
| */ | |||||
| void clear() noexcept | void clear() noexcept | ||||
| { | { | ||||
| port = 0; | port = 0; | ||||
| size = 0; | |||||
| data[0] = 0; | data[0] = 0; | ||||
| data[1] = 0; | data[1] = 0; | ||||
| data[2] = 0; | data[2] = 0; | ||||
| data[3] = 0; | data[3] = 0; | ||||
| size = 0; | |||||
| } | } | ||||
| }; | }; | ||||
| @@ -203,16 +209,17 @@ struct EngineEvent { | |||||
| uint32_t time; //!< Time offset in frames | uint32_t time; //!< Time offset in frames | ||||
| uint8_t channel; //!< Channel, used for MIDI-related events | uint8_t channel; //!< Channel, used for MIDI-related events | ||||
| /*! | |||||
| * Event specific data. | |||||
| */ | |||||
| union { | union { | ||||
| EngineControlEvent ctrl; | EngineControlEvent ctrl; | ||||
| EngineMidiEvent midi; | EngineMidiEvent midi; | ||||
| }; | }; | ||||
| EngineEvent() noexcept | |||||
| { | |||||
| clear(); | |||||
| } | |||||
| /*! | |||||
| * Clear data. | |||||
| */ | |||||
| void clear() noexcept | void clear() noexcept | ||||
| { | { | ||||
| type = kEngineEventTypeNull; | type = kEngineEventTypeNull; | ||||
| @@ -325,9 +332,10 @@ struct EngineTimeInfo { | |||||
| EngineTimeInfoBBT bbt; | EngineTimeInfoBBT bbt; | ||||
| EngineTimeInfo() noexcept | EngineTimeInfo() noexcept | ||||
| { | |||||
| clear(); | |||||
| } | |||||
| : playing(false), | |||||
| frame(0), | |||||
| usecs(0), | |||||
| valid(0x0) {} | |||||
| void clear() noexcept | void clear() noexcept | ||||
| { | { | ||||
| @@ -171,7 +171,7 @@ typedef struct _CarlaPluginInfo { | |||||
| /*! | /*! | ||||
| * C++ constructor. | * C++ constructor. | ||||
| */ | */ | ||||
| _CarlaPluginInfo() | |||||
| _CarlaPluginInfo() noexcept | |||||
| : type(CarlaBackend::PLUGIN_NONE), | : type(CarlaBackend::PLUGIN_NONE), | ||||
| category(CarlaBackend::PLUGIN_CATEGORY_NONE), | category(CarlaBackend::PLUGIN_CATEGORY_NONE), | ||||
| hints(0x0), | hints(0x0), | ||||
| @@ -280,7 +280,7 @@ typedef struct _CarlaNativePluginInfo { | |||||
| /*! | /*! | ||||
| * C++ constructor. | * C++ constructor. | ||||
| */ | */ | ||||
| _CarlaNativePluginInfo() | |||||
| _CarlaNativePluginInfo() noexcept | |||||
| : category(CarlaBackend::PLUGIN_CATEGORY_NONE), | : category(CarlaBackend::PLUGIN_CATEGORY_NONE), | ||||
| hints(0x0), | hints(0x0), | ||||
| audioIns(0), | audioIns(0), | ||||
| @@ -317,7 +317,7 @@ typedef struct _CarlaPortCountInfo { | |||||
| /*! | /*! | ||||
| * C++ constructor. | * C++ constructor. | ||||
| */ | */ | ||||
| _CarlaPortCountInfo() | |||||
| _CarlaPortCountInfo() noexcept | |||||
| : ins(0), | : ins(0), | ||||
| outs(0) {} | outs(0) {} | ||||
| #endif | #endif | ||||
| @@ -353,7 +353,7 @@ typedef struct _CarlaParameterInfo { | |||||
| /*! | /*! | ||||
| * C++ constructor. | * C++ constructor. | ||||
| */ | */ | ||||
| _CarlaParameterInfo() | |||||
| _CarlaParameterInfo() noexcept | |||||
| : name(nullptr), | : name(nullptr), | ||||
| symbol(nullptr), | symbol(nullptr), | ||||
| unit(nullptr), | unit(nullptr), | ||||
| @@ -402,7 +402,7 @@ typedef struct _CarlaScalePointInfo { | |||||
| /*! | /*! | ||||
| * C++ constructor. | * C++ constructor. | ||||
| */ | */ | ||||
| _CarlaScalePointInfo() | |||||
| _CarlaScalePointInfo() noexcept | |||||
| : value(0.0f), | : value(0.0f), | ||||
| label(nullptr) {} | label(nullptr) {} | ||||
| @@ -459,7 +459,7 @@ typedef struct _CarlaTransportInfo { | |||||
| /*! | /*! | ||||
| * C++ constructor. | * C++ constructor. | ||||
| */ | */ | ||||
| _CarlaTransportInfo() | |||||
| _CarlaTransportInfo() noexcept | |||||
| : playing(false), | : playing(false), | ||||
| frame(0), | frame(0), | ||||
| bar(0), | bar(0), | ||||
| @@ -33,16 +33,6 @@ CARLA_BACKEND_START_NAMESPACE | |||||
| } /* Fix editor indentation */ | } /* Fix editor indentation */ | ||||
| #endif | #endif | ||||
| /*! | |||||
| * @defgroup PluginHints | |||||
| * @{ | |||||
| */ | |||||
| const unsigned int PLUGIN_NEEDS_FIXED_BUFFERS = 0x100; | |||||
| const unsigned int PLUGIN_NEEDS_SINGLE_THREAD = 0x200; | |||||
| /** @} */ | |||||
| /*! | /*! | ||||
| * @defgroup CarlaPluginAPI Carla Plugin API | * @defgroup CarlaPluginAPI Carla Plugin API | ||||
| * | * | ||||
| @@ -131,13 +131,6 @@ struct EnginePluginData { | |||||
| CarlaPlugin* plugin; | CarlaPlugin* plugin; | ||||
| float insPeak[2]; | float insPeak[2]; | ||||
| float outsPeak[2]; | float outsPeak[2]; | ||||
| EnginePluginData() | |||||
| : plugin(nullptr) | |||||
| { | |||||
| insPeak[0] = insPeak[1] = 0.0f; | |||||
| outsPeak[0] = outsPeak[1] = 0.0f; | |||||
| } | |||||
| }; | }; | ||||
| // ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
| @@ -171,7 +164,7 @@ struct CarlaEngineProtectedData { | |||||
| EngineEvent* in; | EngineEvent* in; | ||||
| EngineEvent* out; | EngineEvent* out; | ||||
| InternalEvents() | |||||
| InternalEvents() noexcept | |||||
| : in(nullptr), | : in(nullptr), | ||||
| out(nullptr) {} | out(nullptr) {} | ||||
| @@ -186,7 +179,7 @@ struct CarlaEngineProtectedData { | |||||
| bool playing; | bool playing; | ||||
| uint64_t frame; | uint64_t frame; | ||||
| InternalTime() | |||||
| InternalTime() noexcept | |||||
| : playing(false), | : playing(false), | ||||
| frame(0) {} | frame(0) {} | ||||
| } time; | } time; | ||||
| @@ -197,7 +190,7 @@ struct CarlaEngineProtectedData { | |||||
| unsigned int value; | unsigned int value; | ||||
| CarlaMutex mutex; | CarlaMutex mutex; | ||||
| NextAction() | |||||
| NextAction() noexcept | |||||
| : opcode(kEnginePostActionNull), | : opcode(kEnginePostActionNull), | ||||
| pluginId(0), | pluginId(0), | ||||
| value(0) {} | value(0) {} | ||||
| @@ -207,7 +200,7 @@ struct CarlaEngineProtectedData { | |||||
| CARLA_ASSERT(opcode == kEnginePostActionNull); | CARLA_ASSERT(opcode == kEnginePostActionNull); | ||||
| } | } | ||||
| void ready() | |||||
| void ready() noexcept | |||||
| { | { | ||||
| mutex.lock(); | mutex.lock(); | ||||
| mutex.unlock(); | mutex.unlock(); | ||||
| @@ -253,10 +246,7 @@ struct CarlaEngineProtectedData { | |||||
| { | { | ||||
| CarlaPlugin* const plugin(plugins[i+1].plugin); | CarlaPlugin* const plugin(plugins[i+1].plugin); | ||||
| CARLA_ASSERT(plugin != nullptr); | |||||
| if (plugin == nullptr) | |||||
| break; | |||||
| CARLA_SAFE_ASSERT_BREAK(plugin != nullptr); | |||||
| plugin->setId(i); | plugin->setId(i); | ||||
| @@ -299,7 +289,7 @@ struct CarlaEngineProtectedData { | |||||
| #endif | #endif | ||||
| } | } | ||||
| void doNextPluginAction(const bool unlock) | |||||
| void doNextPluginAction(const bool unlock) noexcept | |||||
| { | { | ||||
| switch (nextAction.opcode) | switch (nextAction.opcode) | ||||
| { | { | ||||
| @@ -351,7 +341,7 @@ struct CarlaEngineProtectedData { | |||||
| } | } | ||||
| } | } | ||||
| ~ScopedActionLock() | |||||
| ~ScopedActionLock() noexcept | |||||
| { | { | ||||
| fData->nextAction.mutex.unlock(); | fData->nextAction.mutex.unlock(); | ||||
| } | } | ||||
| @@ -68,12 +68,12 @@ public: | |||||
| const char* getServerPathTCP() const noexcept | const char* getServerPathTCP() const noexcept | ||||
| { | { | ||||
| return (const char*)fServerPathTCP; | |||||
| return fServerPathTCP.getBuffer(); | |||||
| } | } | ||||
| const char* getServerPathUDP() const noexcept | const char* getServerPathUDP() const noexcept | ||||
| { | { | ||||
| return (const char*)fServerPathUDP; | |||||
| return fServerPathUDP.getBuffer(); | |||||
| } | } | ||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| @@ -155,29 +155,35 @@ ENGINE_DRIVER_DEVICE_VARIABLE_SAMPLE_RATE = 0x4 | |||||
| # Plugin is a bridge. | # Plugin is a bridge. | ||||
| # This hint is required because "bridge" itself is not a plugin type. | # This hint is required because "bridge" itself is not a plugin type. | ||||
| PLUGIN_IS_BRIDGE = 0x01 | |||||
| PLUGIN_IS_BRIDGE = 0x001 | |||||
| # Plugin is hard real-time safe. | # Plugin is hard real-time safe. | ||||
| PLUGIN_IS_RTSAFE = 0x02 | |||||
| PLUGIN_IS_RTSAFE = 0x002 | |||||
| # Plugin is a synth (produces sound). | # Plugin is a synth (produces sound). | ||||
| PLUGIN_IS_SYNTH = 0x04 | |||||
| PLUGIN_IS_SYNTH = 0x004 | |||||
| # Plugin has its own custom UI. | # Plugin has its own custom UI. | ||||
| # @see carla_show_custom_ui() | # @see carla_show_custom_ui() | ||||
| PLUGIN_HAS_CUSTOM_UI = 0x08 | |||||
| PLUGIN_HAS_CUSTOM_UI = 0x008 | |||||
| # Plugin can use internal Dry/Wet control. | # Plugin can use internal Dry/Wet control. | ||||
| PLUGIN_CAN_DRYWET = 0x10 | |||||
| PLUGIN_CAN_DRYWET = 0x010 | |||||
| # Plugin can use internal Volume control. | # Plugin can use internal Volume control. | ||||
| PLUGIN_CAN_VOLUME = 0x20 | |||||
| PLUGIN_CAN_VOLUME = 0x020 | |||||
| # Plugin can use internal (Stereo) Balance controls. | # Plugin can use internal (Stereo) Balance controls. | ||||
| PLUGIN_CAN_BALANCE = 0x40 | |||||
| PLUGIN_CAN_BALANCE = 0x040 | |||||
| # Plugin can use internal (Mono) Panning control. | # Plugin can use internal (Mono) Panning control. | ||||
| PLUGIN_CAN_PANNING = 0x80 | |||||
| PLUGIN_CAN_PANNING = 0x080 | |||||
| # Plugin needs a constant, fixed-size audio buffer. | |||||
| PLUGIN_NEEDS_FIXED_BUFFERS = 0x100 | |||||
| # Plugin needs all UI events in a single/main thread. | |||||
| PLUGIN_NEEDS_SINGLE_THREAD = 0x200 | |||||
| # ------------------------------------------------------------------------------------------------------------ | # ------------------------------------------------------------------------------------------------------------ | ||||
| # Plugin Options | # Plugin Options | ||||
| @@ -395,6 +401,22 @@ PLUGIN_CATEGORY_UTILITY = 8 | |||||
| # Miscellaneous plugin (used to check if the plugin has a category). | # Miscellaneous plugin (used to check if the plugin has a category). | ||||
| PLUGIN_CATEGORY_OTHER = 9 | PLUGIN_CATEGORY_OTHER = 9 | ||||
| # ------------------------------------------------------------------------------------------------------------ | |||||
| # Parameter Type | |||||
| # Plugin parameter type. | |||||
| # Null parameter type. | |||||
| PARAMETER_UNKNOWN = 0 | |||||
| # Input parameter. | |||||
| PARAMETER_INPUT = 1 | |||||
| # Ouput parameter. | |||||
| PARAMETER_OUTPUT = 2 | |||||
| # Special (hidden) parameter. | |||||
| PARAMETER_SPECIAL = 3 | |||||
| # ------------------------------------------------------------------------------------------------------------ | # ------------------------------------------------------------------------------------------------------------ | ||||
| # Internal Parameter Index | # Internal Parameter Index | ||||
| # Special parameters used internally in Carla. | # Special parameters used internally in Carla. | ||||
| @@ -750,16 +772,19 @@ EngineCallbackFunc = CFUNCTYPE(None, c_void_p, c_enum, c_uint, c_int, c_int, c_f | |||||
| # Parameter data. | # Parameter data. | ||||
| class ParameterData(Structure): | class ParameterData(Structure): | ||||
| _fields_ = [ | _fields_ = [ | ||||
| # This parameter type. | |||||
| ("type", c_enum), | |||||
| # This parameter hints. | |||||
| # @see ParameterHints | |||||
| ("hints", c_uint), | |||||
| # Index as seen by Carla. | # Index as seen by Carla. | ||||
| ("index", c_int32), | ("index", c_int32), | ||||
| # Real index as seen by plugins. | # Real index as seen by plugins. | ||||
| ("rindex", c_int32), | ("rindex", c_int32), | ||||
| # This parameter hints. | |||||
| # @see ParameterHints | |||||
| ("hints", c_uint), | |||||
| # Currently mapped MIDI CC. | # Currently mapped MIDI CC. | ||||
| # A value lower than 0 means invalid or unused. | # A value lower than 0 means invalid or unused. | ||||
| # Maximum allowed value is 95 (0x5F). | # Maximum allowed value is 95 (0x5F). | ||||
| @@ -21,9 +21,10 @@ | |||||
| #define MAX_MIDI_CHANNELS 16 | #define MAX_MIDI_CHANNELS 16 | ||||
| #define MAX_MIDI_NOTE 128 | #define MAX_MIDI_NOTE 128 | ||||
| #define MAX_MIDI_VALUE 128 | #define MAX_MIDI_VALUE 128 | ||||
| //#define MAX_MIDI_CTRL 128 | |||||
| #define MIDI_STATUS_BIT 0xF0 | |||||
| #define MIDI_CHANNEL_BIT 0x0F | |||||
| #define MIDI_STATUS_BIT 0xF0 | |||||
| #define MIDI_CHANNEL_BIT 0x0F | |||||
| // MIDI Messages List | // MIDI Messages List | ||||
| #define MIDI_STATUS_NOTE_OFF 0x80 // note (0-127), velocity (0-127) | #define MIDI_STATUS_NOTE_OFF 0x80 // note (0-127), velocity (0-127) | ||||
| @@ -34,17 +35,17 @@ | |||||
| #define MIDI_STATUS_CHANNEL_PRESSURE 0xD0 // pressure (0-127), none | #define MIDI_STATUS_CHANNEL_PRESSURE 0xD0 // pressure (0-127), none | ||||
| #define MIDI_STATUS_PITCH_WHEEL_CONTROL 0xE0 // LSB (0-127), MSB (0-127) | #define MIDI_STATUS_PITCH_WHEEL_CONTROL 0xE0 // LSB (0-127), MSB (0-127) | ||||
| #define MIDI_IS_STATUS_NOTE_OFF(status) (((status) < 0xF0) && ((status) & MIDI_STATUS_BIT) == MIDI_STATUS_NOTE_OFF) | |||||
| #define MIDI_IS_STATUS_NOTE_ON(status) (((status) < 0xF0) && ((status) & MIDI_STATUS_BIT) == MIDI_STATUS_NOTE_ON) | |||||
| #define MIDI_IS_STATUS_POLYPHONIC_AFTERTOUCH(status) (((status) < 0xF0) && ((status) & MIDI_STATUS_BIT) == MIDI_STATUS_POLYPHONIC_AFTERTOUCH) | |||||
| #define MIDI_IS_STATUS_CONTROL_CHANGE(status) (((status) < 0xF0) && ((status) & MIDI_STATUS_BIT) == MIDI_STATUS_CONTROL_CHANGE) | |||||
| #define MIDI_IS_STATUS_PROGRAM_CHANGE(status) (((status) < 0xF0) && ((status) & MIDI_STATUS_BIT) == MIDI_STATUS_PROGRAM_CHANGE) | |||||
| #define MIDI_IS_STATUS_CHANNEL_PRESSURE(status) (((status) < 0xF0) && ((status) & MIDI_STATUS_BIT) == MIDI_STATUS_CHANNEL_PRESSURE) | |||||
| #define MIDI_IS_STATUS_PITCH_WHEEL_CONTROL(status) (((status) < 0xF0) && ((status) & MIDI_STATUS_BIT) == MIDI_STATUS_PITCH_WHEEL_CONTROL) | |||||
| #define MIDI_IS_STATUS_NOTE_OFF(status) (((status) < MIDI_STATUS_BIT) && ((status) & MIDI_STATUS_BIT) == MIDI_STATUS_NOTE_OFF) | |||||
| #define MIDI_IS_STATUS_NOTE_ON(status) (((status) < MIDI_STATUS_BIT) && ((status) & MIDI_STATUS_BIT) == MIDI_STATUS_NOTE_ON) | |||||
| #define MIDI_IS_STATUS_POLYPHONIC_AFTERTOUCH(status) (((status) < MIDI_STATUS_BIT) && ((status) & MIDI_STATUS_BIT) == MIDI_STATUS_POLYPHONIC_AFTERTOUCH) | |||||
| #define MIDI_IS_STATUS_CONTROL_CHANGE(status) (((status) < MIDI_STATUS_BIT) && ((status) & MIDI_STATUS_BIT) == MIDI_STATUS_CONTROL_CHANGE) | |||||
| #define MIDI_IS_STATUS_PROGRAM_CHANGE(status) (((status) < MIDI_STATUS_BIT) && ((status) & MIDI_STATUS_BIT) == MIDI_STATUS_PROGRAM_CHANGE) | |||||
| #define MIDI_IS_STATUS_CHANNEL_PRESSURE(status) (((status) < MIDI_STATUS_BIT) && ((status) & MIDI_STATUS_BIT) == MIDI_STATUS_CHANNEL_PRESSURE) | |||||
| #define MIDI_IS_STATUS_PITCH_WHEEL_CONTROL(status) (((status) < MIDI_STATUS_BIT) && ((status) & MIDI_STATUS_BIT) == MIDI_STATUS_PITCH_WHEEL_CONTROL) | |||||
| // MIDI Utils | // MIDI Utils | ||||
| #define MIDI_GET_STATUS_FROM_DATA(data) ((data[0] < 0xF0) ? data[0] & MIDI_STATUS_BIT : data[0]) | |||||
| #define MIDI_GET_CHANNEL_FROM_DATA(data) ((data[0] < 0xF0) ? data[0] & MIDI_CHANNEL_BIT : 0) | |||||
| #define MIDI_GET_STATUS_FROM_DATA(data) ((data[0] < MIDI_STATUS_BIT) ? data[0] & MIDI_STATUS_BIT : data[0]) | |||||
| #define MIDI_GET_CHANNEL_FROM_DATA(data) ((data[0] < MIDI_STATUS_BIT) ? data[0] & MIDI_CHANNEL_BIT : 0) | |||||
| // Control Change Messages List | // Control Change Messages List | ||||
| #define MIDI_CONTROL_BANK_SELECT 0x00 // 0-127, MSB | #define MIDI_CONTROL_BANK_SELECT 0x00 // 0-127, MSB | ||||
| @@ -144,6 +144,25 @@ const char* PluginCategory2Str(const PluginCategory category) | |||||
| return nullptr; | return nullptr; | ||||
| } | } | ||||
| static inline | |||||
| const char* ParameterType2Str(const ParameterType type) | |||||
| { | |||||
| switch (type) | |||||
| { | |||||
| case PARAMETER_UNKNOWN: | |||||
| return "PARAMETER_UNKNOWN"; | |||||
| case PARAMETER_INPUT: | |||||
| return "PARAMETER_INPUT"; | |||||
| case PARAMETER_OUTPUT: | |||||
| return "PARAMETER_OUTPUT"; | |||||
| case PARAMETER_SPECIAL: | |||||
| return "PARAMETER_SPECIAL"; | |||||
| } | |||||
| carla_stderr("CarlaBackend::ParameterType2Str(%i) - invalid type", type); | |||||
| return nullptr; | |||||
| } | |||||
| static inline | static inline | ||||
| const char* InternalParameterIndex2Str(const InternalParameterIndex index) | const char* InternalParameterIndex2Str(const InternalParameterIndex index) | ||||
| { | { | ||||