| @@ -627,6 +627,11 @@ public: | |||
| */ | |||
| virtual bool close(); | |||
| /*! | |||
| * Idle. | |||
| */ | |||
| virtual void idle(); | |||
| /*! | |||
| * Check if engine is running. | |||
| */ | |||
| @@ -651,14 +656,6 @@ public: | |||
| // ------------------------------------------------------------------- | |||
| // Plugin management | |||
| #if 0 | |||
| /*! | |||
| * Get next available plugin id.\n | |||
| * Returns -1 if no more plugins can be loaded. | |||
| */ | |||
| int getNewPluginId() const; | |||
| #endif | |||
| /*! | |||
| * Get plugin with id \a id. | |||
| */ | |||
| @@ -700,11 +697,6 @@ public: | |||
| */ | |||
| void removeAllPlugins(); | |||
| /*! | |||
| * Idle all plugins GUIs. | |||
| */ | |||
| void idlePluginGuis(); | |||
| // bridge, internal use only | |||
| // TODO - find a better way for this | |||
| //void __bridgePluginRegister(const unsigned short id, CarlaPlugin* const plugin); | |||
| @@ -151,6 +151,7 @@ CARLA_EXPORT const CarlaNativePluginInfo* carla_get_internal_plugin_info(unsigne | |||
| CARLA_EXPORT bool carla_engine_init(const char* driverName, const char* clientName); | |||
| CARLA_EXPORT bool carla_engine_close(); | |||
| CARLA_EXPORT void carla_engine_idle(); | |||
| CARLA_EXPORT bool carla_is_engine_running(); | |||
| CARLA_EXPORT bool carla_add_plugin(CarlaBinaryType btype, CarlaPluginType ptype, const char* filename, const char* name, const char* label, void* extraPtr); | |||
| @@ -204,11 +205,9 @@ CARLA_EXPORT void carla_set_midi_program(unsigned int pluginId, uint32_t midiPro | |||
| CARLA_EXPORT void carla_set_custom_data(unsigned int pluginId, const char* type, const char* key, const char* value); | |||
| CARLA_EXPORT void carla_set_chunk_data(unsigned int pluginId, const char* chunkData); | |||
| CARLA_EXPORT void carla_show_gui(unsigned int pluginId, bool yesNo); | |||
| CARLA_EXPORT void carla_idle_guis(); | |||
| CARLA_EXPORT void carla_send_midi_note(unsigned int pluginId, uint8_t channel, uint8_t note, uint8_t velocity); | |||
| CARLA_EXPORT void carla_prepare_for_save(unsigned int pluginId); | |||
| CARLA_EXPORT void carla_send_midi_note(unsigned int pluginId, uint8_t channel, uint8_t note, uint8_t velocity); | |||
| CARLA_EXPORT void carla_show_gui(unsigned int pluginId, bool yesNo); | |||
| CARLA_EXPORT uint32_t carla_get_buffer_size(); | |||
| CARLA_EXPORT double carla_get_sample_rate(); | |||
| @@ -584,6 +584,20 @@ bool CarlaEngine::close() | |||
| return true; | |||
| } | |||
| void CarlaEngine::idle() | |||
| { | |||
| CARLA_ASSERT(fData->plugins != nullptr); | |||
| CARLA_ASSERT(isRunning()); | |||
| for (unsigned int i=0; i < fData->curPluginCount; i++) | |||
| { | |||
| CarlaPlugin* const plugin = fData->plugins[i].plugin; | |||
| if (plugin && plugin->enabled()) | |||
| plugin->idleGui(); | |||
| } | |||
| } | |||
| // ----------------------------------------------------------------------- | |||
| // Plugin management | |||
| @@ -929,19 +943,6 @@ void CarlaEngine::removeAllPlugins() | |||
| } | |||
| #if 0 | |||
| void CarlaEngine::idlePluginGuis() | |||
| { | |||
| CARLA_ASSERT(data->maxPluginNumber > 0); | |||
| for (unsigned short i=0; i < data->maxPluginNumber; i++) | |||
| { | |||
| CarlaPlugin* const plugin = data->carlaPlugins[i]; | |||
| if (plugin && plugin->enabled()) | |||
| plugin->idleGui(); | |||
| } | |||
| } | |||
| void CarlaEngine::__bridgePluginRegister(const unsigned short id, CarlaPlugin* const plugin) | |||
| { | |||
| data->carlaPlugins[id] = plugin; | |||
| @@ -16,9 +16,11 @@ | |||
| */ | |||
| #include "carla_standalone.hpp" | |||
| #include "carla_backend_utils.hpp" | |||
| #include "carla_engine.hpp" | |||
| #include "carla_plugin.hpp" | |||
| #include "carla_midi.h" | |||
| #include "carla_native.h" | |||
| #include <QtCore/QByteArray> | |||
| @@ -270,6 +272,14 @@ bool carla_engine_close() | |||
| return closed; | |||
| } | |||
| void carla_engine_idle() | |||
| { | |||
| CARLA_ASSERT(standalone.engine != nullptr); | |||
| if (standalone.engine) | |||
| standalone.engine->idle(); | |||
| } | |||
| bool carla_is_engine_running() | |||
| { | |||
| qDebug("carla_is_engine_running()"); | |||
| @@ -656,14 +666,14 @@ const char* carla_get_chunk_data(unsigned int pluginId) | |||
| qDebug("carla_get_chunk_data(%i)", pluginId); | |||
| CARLA_ASSERT(standalone.engine != nullptr); | |||
| if (standalone.engine == nullptr) | |||
| return nullptr; | |||
| static CarlaString chunkData; | |||
| // cleanup | |||
| chunkData.clear(); | |||
| if (standalone.engine == nullptr) | |||
| return nullptr; | |||
| if (CarlaPlugin* const plugin = standalone.engine->getPlugin(pluginId)) | |||
| { | |||
| if (plugin->hints() & CarlaBackend::PLUGIN_USES_CHUNKS) | |||
| @@ -751,113 +761,88 @@ uint32_t carla_get_custom_data_count(unsigned int pluginId) | |||
| return 0; | |||
| } | |||
| #if 0 | |||
| // ------------------------------------------------------------------------------------------------------------------- | |||
| const char* carla_get_parameter_text(unsigned int pluginId, uint32_t parameter_id) | |||
| const char* carla_get_parameter_text(unsigned int pluginId, uint32_t parameterId) | |||
| { | |||
| qDebug("carla_get_parameter_text(%i, %i)", pluginId, parameter_id); | |||
| qDebug("carla_get_parameter_text(%i, %i)", pluginId, parameterId); | |||
| CARLA_ASSERT(standalone.engine != nullptr); | |||
| static char textBuf[STR_MAX]; | |||
| memset(textBuf, 0, sizeof(char)*STR_MAX); | |||
| if (standalone.engine == nullptr) | |||
| return nullptr; | |||
| static char textBuf[STR_MAX]; | |||
| carla_zeroMem(textBuf, sizeof(char)*STR_MAX); | |||
| if (CarlaPlugin* const plugin = standalone.engine->getPlugin(pluginId)) | |||
| { | |||
| if (parameter_id < plugin->parameterCount()) | |||
| if (parameterId < plugin->parameterCount()) | |||
| { | |||
| plugin->getParameterText(parameter_id, textBuf); | |||
| plugin->getParameterText(parameterId, textBuf); | |||
| return textBuf; | |||
| } | |||
| qCritical("carla_get_parameter_text(%i, %i) - parameter_id out of bounds", pluginId, parameter_id); | |||
| qCritical("carla_get_parameter_text(%i, %i) - parameterId out of bounds", pluginId, parameterId); | |||
| return nullptr; | |||
| } | |||
| qCritical("carla_get_parameter_text(%i, %i) - could not find plugin", pluginId, parameter_id); | |||
| qCritical("carla_get_parameter_text(%i, %i) - could not find plugin", pluginId, parameterId); | |||
| return nullptr; | |||
| } | |||
| const char* carla_get_program_name(unsigned int pluginId, uint32_t program_id) | |||
| const char* carla_get_program_name(unsigned int pluginId, uint32_t programId) | |||
| { | |||
| qDebug("carla_get_program_name(%i, %i)", pluginId, program_id); | |||
| qDebug("carla_get_program_name(%i, %i)", pluginId, programId); | |||
| CARLA_ASSERT(standalone.engine != nullptr); | |||
| static const char* program_name = nullptr; | |||
| // cleanup | |||
| if (program_name) | |||
| { | |||
| free((void*)program_name); | |||
| program_name = nullptr; | |||
| } | |||
| if (standalone.engine == nullptr) | |||
| return nullptr; | |||
| if (! standalone.started) | |||
| return nullptr; | |||
| static char programName[STR_MAX]; | |||
| carla_zeroMem(programName, sizeof(char)*STR_MAX); | |||
| if (CarlaPlugin* const plugin = standalone.engine->getPlugin(pluginId)) | |||
| { | |||
| if (program_id < plugin->programCount()) | |||
| if (programId < plugin->programCount()) | |||
| { | |||
| char strBuf[STR_MAX] = { 0 }; | |||
| plugin->getProgramName(program_id, strBuf); | |||
| program_name = strdup(strBuf); | |||
| plugin->getProgramName(programId, programName); | |||
| return program_name; | |||
| return programName; | |||
| } | |||
| qCritical("carla_get_program_name(%i, %i) - program_id out of bounds", pluginId, program_id); | |||
| qCritical("carla_get_program_name(%i, %i) - programId out of bounds", pluginId, programId); | |||
| return nullptr; | |||
| } | |||
| qCritical("carla_get_program_name(%i, %i) - could not find plugin", pluginId, program_id); | |||
| qCritical("carla_get_program_name(%i, %i) - could not find plugin", pluginId, programId); | |||
| return nullptr; | |||
| } | |||
| const char* carla_get_midi_program_name(unsigned int pluginId, uint32_t midi_program_id) | |||
| const char* carla_get_midi_program_name(unsigned int pluginId, uint32_t midiProgramId) | |||
| { | |||
| qDebug("carla_get_midi_program_name(%i, %i)", pluginId, midi_program_id); | |||
| qDebug("carla_get_midi_program_name(%i, %i)", pluginId, midiProgramId); | |||
| CARLA_ASSERT(standalone.engine != nullptr); | |||
| static const char* midi_program_name = nullptr; | |||
| // cleanup | |||
| if (midi_program_name) | |||
| { | |||
| free((void*)midi_program_name); | |||
| midi_program_name = nullptr; | |||
| } | |||
| if (standalone.engine == nullptr) | |||
| return nullptr; | |||
| if (! standalone.started) | |||
| return nullptr; | |||
| static char midiProgramName[STR_MAX]; | |||
| carla_zeroMem(midiProgramName, sizeof(char)*STR_MAX); | |||
| if (CarlaPlugin* const plugin = standalone.engine->getPlugin(pluginId)) | |||
| { | |||
| if (midi_program_id < plugin->midiProgramCount()) | |||
| if (midiProgramId < plugin->midiProgramCount()) | |||
| { | |||
| char strBuf[STR_MAX] = { 0 }; | |||
| plugin->getMidiProgramName(midi_program_id, strBuf); | |||
| midi_program_name = strdup(strBuf); | |||
| plugin->getMidiProgramName(midiProgramId, midiProgramName); | |||
| return midi_program_name; | |||
| return midiProgramName; | |||
| } | |||
| qCritical("carla_get_midi_program_name(%i, %i) - program_id out of bounds", pluginId, midi_program_id); | |||
| qCritical("carla_get_midi_program_name(%i, %i) - midiProgramId out of bounds", pluginId, midiProgramId); | |||
| return nullptr; | |||
| } | |||
| qCritical("carla_get_midi_program_name(%i, %i) - could not find plugin", pluginId, midi_program_id); | |||
| qCritical("carla_get_midi_program_name(%i, %i) - could not find plugin", pluginId, midiProgramId); | |||
| return nullptr; | |||
| } | |||
| @@ -866,29 +851,17 @@ const char* carla_get_real_plugin_name(unsigned int pluginId) | |||
| qDebug("carla_get_real_plugin_name(%i)", pluginId); | |||
| CARLA_ASSERT(standalone.engine != nullptr); | |||
| static const char* real_plugin_name = nullptr; | |||
| // cleanup | |||
| if (real_plugin_name) | |||
| { | |||
| free((void*)real_plugin_name); | |||
| real_plugin_name = nullptr; | |||
| } | |||
| if (standalone.engine == nullptr) | |||
| return nullptr; | |||
| if (! standalone.started) | |||
| return nullptr; | |||
| static char realPluginName[STR_MAX]; | |||
| carla_zeroMem(realPluginName, sizeof(char)*STR_MAX); | |||
| if (CarlaPlugin* const plugin = standalone.engine->getPlugin(pluginId)) | |||
| { | |||
| char strBuf[STR_MAX] = { 0 }; | |||
| plugin->getRealName(strBuf); | |||
| real_plugin_name = strdup(strBuf); | |||
| plugin->getRealName(realPluginName); | |||
| return real_plugin_name; | |||
| return realPluginName; | |||
| } | |||
| qCritical("carla_get_real_plugin_name(%i) - could not find plugin", pluginId); | |||
| @@ -929,94 +902,90 @@ int32_t carla_get_current_midi_program_index(unsigned int pluginId) | |||
| // ------------------------------------------------------------------------------------------------------------------- | |||
| double carla_get_default_parameter_value(unsigned int pluginId, uint32_t parameter_id) | |||
| float carla_get_default_parameter_value(unsigned int pluginId, uint32_t parameterId) | |||
| { | |||
| qDebug("carla_get_default_parameter_value(%i, %i)", pluginId, parameter_id); | |||
| qDebug("carla_get_default_parameter_value(%i, %i)", pluginId, parameterId); | |||
| CARLA_ASSERT(standalone.engine != nullptr); | |||
| if (standalone.engine == nullptr) | |||
| return 0.0; | |||
| return 0.0f; | |||
| if (CarlaPlugin* const plugin = standalone.engine->getPlugin(pluginId)) | |||
| { | |||
| if (parameter_id < plugin->parameterCount()) | |||
| return plugin->parameterRanges(parameter_id)->def; | |||
| if (parameterId < plugin->parameterCount()) | |||
| return plugin->parameterRanges(parameterId).def; | |||
| qCritical("carla_get_default_parameter_value(%i, %i) - parameter_id out of bounds", pluginId, parameter_id); | |||
| return 0.0; | |||
| qCritical("carla_get_default_parameter_value(%i, %i) - parameterId out of bounds", pluginId, parameterId); | |||
| return 0.0f; | |||
| } | |||
| qCritical("carla_get_default_parameter_value(%i, %i) - could not find plugin", pluginId, parameter_id); | |||
| return 0.0; | |||
| qCritical("carla_get_default_parameter_value(%i, %i) - could not find plugin", pluginId, parameterId); | |||
| return 0.0f; | |||
| } | |||
| double carla_get_current_parameter_value(unsigned int pluginId, uint32_t parameter_id) | |||
| float carla_get_current_parameter_value(unsigned int pluginId, uint32_t parameterId) | |||
| { | |||
| qDebug("carla_get_current_parameter_value(%i, %i)", pluginId, parameter_id); | |||
| qDebug("carla_get_current_parameter_value(%i, %i)", pluginId, parameterId); | |||
| CARLA_ASSERT(standalone.engine != nullptr); | |||
| if (standalone.engine == nullptr) | |||
| return 0.0; | |||
| return 0.0f; | |||
| if (CarlaPlugin* const plugin = standalone.engine->getPlugin(pluginId)) | |||
| { | |||
| if (parameter_id < plugin->parameterCount()) | |||
| return plugin->getParameterValue(parameter_id); | |||
| if (parameterId < plugin->parameterCount()) | |||
| return plugin->getParameterValue(parameterId); | |||
| qCritical("carla_get_current_parameter_value(%i, %i) - parameter_id out of bounds", pluginId, parameter_id); | |||
| return 0.0; | |||
| qCritical("carla_get_current_parameter_value(%i, %i) - parameterId out of bounds", pluginId, parameterId); | |||
| return 0.0f; | |||
| } | |||
| qCritical("carla_get_current_parameter_value(%i, %i) - could not find plugin", pluginId, parameter_id); | |||
| return 0.0; | |||
| qCritical("carla_get_current_parameter_value(%i, %i) - could not find plugin", pluginId, parameterId); | |||
| return 0.0f; | |||
| } | |||
| // ------------------------------------------------------------------------------------------------------------------- | |||
| double carla_get_input_peak_value(unsigned int pluginId, unsigned short port_id) | |||
| float carla_get_input_peak_value(unsigned int pluginId, unsigned short portId) | |||
| { | |||
| CARLA_ASSERT(standalone.engine != nullptr); | |||
| CARLA_ASSERT(port_id == 1 || port_id == 2); | |||
| CARLA_ASSERT(portId == 1 || portId == 2); | |||
| if (standalone.engine == nullptr) | |||
| return 0.0; | |||
| return 0.0f; | |||
| #if 0 | |||
| if (pluginId >= standalone.engine->maxPluginNumber()) | |||
| if (pluginId >= standalone.engine->currentPluginCount()) | |||
| { | |||
| qCritical("carla_get_input_peak_value(%i, %i) - invalid plugin value", pluginId, port_id); | |||
| return 0.0; | |||
| qCritical("carla_get_input_peak_value(%i, %i) - invalid plugin value", pluginId, portId); | |||
| return 0.0f; | |||
| } | |||
| #endif | |||
| if (port_id == 1 || port_id == 2) | |||
| return standalone.engine->getInputPeak(pluginId, port_id-1); | |||
| //if (portId == 1 || portId == 2) | |||
| // return standalone.engine->getInputPeak(pluginId, portId-1); | |||
| qCritical("carla_get_input_peak_value(%i, %i) - invalid port value", pluginId, port_id); | |||
| return 0.0; | |||
| qCritical("carla_get_input_peak_value(%i, %i) - invalid port value", pluginId, portId); | |||
| return 0.0f; | |||
| } | |||
| double carla_get_output_peak_value(unsigned int pluginId, unsigned short port_id) | |||
| float carla_get_output_peak_value(unsigned int pluginId, unsigned short portId) | |||
| { | |||
| CARLA_ASSERT(standalone.engine != nullptr); | |||
| CARLA_ASSERT(port_id == 1 || port_id == 2); | |||
| CARLA_ASSERT(portId == 1 || portId == 2); | |||
| if (standalone.engine == nullptr) | |||
| return 0.0; | |||
| return 0.0f; | |||
| #if 0 | |||
| if (pluginId >= standalone.engine->maxPluginNumber()) | |||
| if (pluginId >= standalone.engine->currentPluginCount()) | |||
| { | |||
| qCritical("carla_get_input_peak_value(%i, %i) - invalid plugin value", pluginId, port_id); | |||
| return 0.0; | |||
| qCritical("carla_get_input_peak_value(%i, %i) - invalid plugin value", pluginId, portId); | |||
| return 0.0f; | |||
| } | |||
| #endif | |||
| if (port_id == 1 || port_id == 2) | |||
| return standalone.engine->getOutputPeak(pluginId, port_id-1); | |||
| //if (portId == 1 || portId == 2) | |||
| // return standalone.engine->getOutputPeak(pluginId, portId-1); | |||
| qCritical("carla_get_output_peak_value(%i, %i) - invalid port value", pluginId, port_id); | |||
| return 0.0; | |||
| qCritical("carla_get_output_peak_value(%i, %i) - invalid port value", pluginId, portId); | |||
| return 0.0f; | |||
| } | |||
| // ------------------------------------------------------------------------------------------------------------------- | |||
| @@ -1035,9 +1004,9 @@ void carla_set_active(unsigned int pluginId, bool onOff) | |||
| qCritical("carla_set_active(%i, %s) - could not find plugin", pluginId, bool2str(onOff)); | |||
| } | |||
| void carla_set_drywet(unsigned int pluginId, double value) | |||
| void carla_set_drywet(unsigned int pluginId, float value) | |||
| { | |||
| qDebug("carla_set_drywet(%i, %g)", pluginId, value); | |||
| qDebug("carla_set_drywet(%i, %f)", pluginId, value); | |||
| CARLA_ASSERT(standalone.engine != nullptr); | |||
| if (standalone.engine == nullptr) | |||
| @@ -1046,12 +1015,12 @@ void carla_set_drywet(unsigned int pluginId, double value) | |||
| if (CarlaPlugin* const plugin = standalone.engine->getPlugin(pluginId)) | |||
| return plugin->setDryWet(value, true, false); | |||
| qCritical("carla_set_drywet(%i, %g) - could not find plugin", pluginId, value); | |||
| qCritical("carla_set_drywet(%i, %f) - could not find plugin", pluginId, value); | |||
| } | |||
| void carla_set_volume(unsigned int pluginId, double value) | |||
| void carla_set_volume(unsigned int pluginId, float value) | |||
| { | |||
| qDebug("carla_set_volume(%i, %g)", pluginId, value); | |||
| qDebug("carla_set_volume(%i, %f)", pluginId, value); | |||
| CARLA_ASSERT(standalone.engine != nullptr); | |||
| if (standalone.engine == nullptr) | |||
| @@ -1060,12 +1029,12 @@ void carla_set_volume(unsigned int pluginId, double value) | |||
| if (CarlaPlugin* const plugin = standalone.engine->getPlugin(pluginId)) | |||
| return plugin->setVolume(value, true, false); | |||
| qCritical("carla_set_volume(%i, %g) - could not find plugin", pluginId, value); | |||
| qCritical("carla_set_volume(%i, %f) - could not find plugin", pluginId, value); | |||
| } | |||
| void carla_set_balance_left(unsigned int pluginId, double value) | |||
| void carla_set_balance_left(unsigned int pluginId, float value) | |||
| { | |||
| qDebug("carla_set_balance_left(%i, %g)", pluginId, value); | |||
| qDebug("carla_set_balance_left(%i, %f)", pluginId, value); | |||
| CARLA_ASSERT(standalone.engine != nullptr); | |||
| if (standalone.engine == nullptr) | |||
| @@ -1074,12 +1043,12 @@ void carla_set_balance_left(unsigned int pluginId, double value) | |||
| if (CarlaPlugin* const plugin = standalone.engine->getPlugin(pluginId)) | |||
| return plugin->setBalanceLeft(value, true, false); | |||
| qCritical("carla_set_balance_left(%i, %g) - could not find plugin", pluginId, value); | |||
| qCritical("carla_set_balance_left(%i, %f) - could not find plugin", pluginId, value); | |||
| } | |||
| void carla_set_balance_right(unsigned int pluginId, double value) | |||
| void carla_set_balance_right(unsigned int pluginId, float value) | |||
| { | |||
| qDebug("carla_set_balance_right(%i, %g)", pluginId, value); | |||
| qDebug("carla_set_balance_right(%i, %f)", pluginId, value); | |||
| CARLA_ASSERT(standalone.engine != nullptr); | |||
| if (standalone.engine == nullptr) | |||
| @@ -1088,14 +1057,28 @@ void carla_set_balance_right(unsigned int pluginId, double value) | |||
| if (CarlaPlugin* const plugin = standalone.engine->getPlugin(pluginId)) | |||
| return plugin->setBalanceRight(value, true, false); | |||
| qCritical("carla_set_balance_right(%i, %g) - could not find plugin", pluginId, value); | |||
| qCritical("carla_set_balance_right(%i, %f) - could not find plugin", pluginId, value); | |||
| } | |||
| void carla_set_panning(unsigned int pluginId, float value) | |||
| { | |||
| qDebug("carla_set_panning(%i, %f)", pluginId, value); | |||
| CARLA_ASSERT(standalone.engine != nullptr); | |||
| if (standalone.engine == nullptr) | |||
| return; | |||
| if (CarlaPlugin* const plugin = standalone.engine->getPlugin(pluginId)) | |||
| return plugin->setPanning(value, true, false); | |||
| qCritical("carla_set_panning(%i, %f) - could not find plugin", pluginId, value); | |||
| } | |||
| // ------------------------------------------------------------------------------------------------------------------- | |||
| void carla_set_parameter_value(unsigned int pluginId, uint32_t parameter_id, double value) | |||
| void carla_set_parameter_value(unsigned int pluginId, uint32_t parameterId, float value) | |||
| { | |||
| qDebug("carla_set_parameter_value(%i, %i, %g)", pluginId, parameter_id, value); | |||
| qDebug("carla_set_parameter_value(%i, %i, %f)", pluginId, parameterId, value); | |||
| CARLA_ASSERT(standalone.engine != nullptr); | |||
| if (standalone.engine == nullptr) | |||
| @@ -1103,25 +1086,25 @@ void carla_set_parameter_value(unsigned int pluginId, uint32_t parameter_id, dou | |||
| if (CarlaPlugin* const plugin = standalone.engine->getPlugin(pluginId)) | |||
| { | |||
| if (parameter_id < plugin->parameterCount()) | |||
| return plugin->setParameterValue(parameter_id, value, true, true, false); | |||
| if (parameterId < plugin->parameterCount()) | |||
| return plugin->setParameterValue(parameterId, value, true, true, false); | |||
| qCritical("carla_set_parameter_value(%i, %i, %g) - parameter_id out of bounds", pluginId, parameter_id, value); | |||
| qCritical("carla_set_parameter_value(%i, %i, %f) - parameterId out of bounds", pluginId, parameterId, value); | |||
| return; | |||
| } | |||
| qCritical("carla_set_parameter_value(%i, %i, %g) - could not find plugin", pluginId, parameter_id, value); | |||
| qCritical("carla_set_parameter_value(%i, %i, %f) - could not find plugin", pluginId, parameterId, value); | |||
| } | |||
| void carla_set_parameter_midi_channel(unsigned int pluginId, uint32_t parameter_id, uint8_t channel) | |||
| void carla_set_parameter_midi_channel(unsigned int pluginId, uint32_t parameterId, uint8_t channel) | |||
| { | |||
| qDebug("carla_set_parameter_midi_channel(%i, %i, %i)", pluginId, parameter_id, channel); | |||
| qDebug("carla_set_parameter_midi_channel(%i, %i, %i)", pluginId, parameterId, channel); | |||
| CARLA_ASSERT(standalone.engine != nullptr); | |||
| CARLA_ASSERT(channel < MAX_MIDI_CHANNELS); | |||
| if (channel >= MAX_MIDI_CHANNELS) | |||
| { | |||
| qCritical("carla_set_parameter_midi_channel(%i, %i, %i) - invalid channel number", pluginId, parameter_id, channel); | |||
| qCritical("carla_set_parameter_midi_channel(%i, %i, %i) - invalid channel number", pluginId, parameterId, channel); | |||
| return; | |||
| } | |||
| @@ -1130,19 +1113,19 @@ void carla_set_parameter_midi_channel(unsigned int pluginId, uint32_t parameter_ | |||
| if (CarlaPlugin* const plugin = standalone.engine->getPlugin(pluginId)) | |||
| { | |||
| if (parameter_id < plugin->parameterCount()) | |||
| return plugin->setParameterMidiChannel(parameter_id, channel, true, false); | |||
| if (parameterId < plugin->parameterCount()) | |||
| return plugin->setParameterMidiChannel(parameterId, channel, true, false); | |||
| qCritical("carla_set_parameter_midi_channel(%i, %i, %i) - parameter_id out of bounds", pluginId, parameter_id, channel); | |||
| qCritical("carla_set_parameter_midi_channel(%i, %i, %i) - parameterId out of bounds", pluginId, parameterId, channel); | |||
| return; | |||
| } | |||
| qCritical("carla_set_parameter_midi_channel(%i, %i, %i) - could not find plugin", pluginId, parameter_id, channel); | |||
| qCritical("carla_set_parameter_midi_channel(%i, %i, %i) - could not find plugin", pluginId, parameterId, channel); | |||
| } | |||
| void carla_set_parameter_midi_cc(unsigned int pluginId, uint32_t parameter_id, int16_t cc) | |||
| void carla_set_parameter_midi_cc(unsigned int pluginId, uint32_t parameterId, int16_t cc) | |||
| { | |||
| qDebug("carla_set_parameter_midi_cc(%i, %i, %i)", pluginId, parameter_id, cc); | |||
| qDebug("carla_set_parameter_midi_cc(%i, %i, %i)", pluginId, parameterId, cc); | |||
| CARLA_ASSERT(standalone.engine != nullptr); | |||
| CARLA_ASSERT(cc >= -1 && cc <= 0x5F); | |||
| @@ -1152,7 +1135,7 @@ void carla_set_parameter_midi_cc(unsigned int pluginId, uint32_t parameter_id, i | |||
| } | |||
| else if (cc > 0x5F) // 95 | |||
| { | |||
| qCritical("carla_set_parameter_midi_cc(%i, %i, %i) - invalid cc number", pluginId, parameter_id, cc); | |||
| qCritical("carla_set_parameter_midi_cc(%i, %i, %i) - invalid cc number", pluginId, parameterId, cc); | |||
| return; | |||
| } | |||
| @@ -1161,19 +1144,19 @@ void carla_set_parameter_midi_cc(unsigned int pluginId, uint32_t parameter_id, i | |||
| if (CarlaPlugin* const plugin = standalone.engine->getPlugin(pluginId)) | |||
| { | |||
| if (parameter_id < plugin->parameterCount()) | |||
| return plugin->setParameterMidiCC(parameter_id, cc, true, false); | |||
| if (parameterId < plugin->parameterCount()) | |||
| return plugin->setParameterMidiCC(parameterId, cc, true, false); | |||
| qCritical("carla_set_parameter_midi_cc(%i, %i, %i) - parameter_id out of bounds", pluginId, parameter_id, cc); | |||
| qCritical("carla_set_parameter_midi_cc(%i, %i, %i) - parameterId out of bounds", pluginId, parameterId, cc); | |||
| return; | |||
| } | |||
| qCritical("carla_set_parameter_midi_cc(%i, %i, %i) - could not find plugin", pluginId, parameter_id, cc); | |||
| qCritical("carla_set_parameter_midi_cc(%i, %i, %i) - could not find plugin", pluginId, parameterId, cc); | |||
| } | |||
| void carla_set_program(unsigned int pluginId, uint32_t program_id) | |||
| void carla_set_program(unsigned int pluginId, uint32_t programId) | |||
| { | |||
| qDebug("carla_set_program(%i, %i)", pluginId, program_id); | |||
| qDebug("carla_set_program(%i, %i)", pluginId, programId); | |||
| CARLA_ASSERT(standalone.engine != nullptr); | |||
| if (standalone.engine == nullptr) | |||
| @@ -1181,19 +1164,19 @@ void carla_set_program(unsigned int pluginId, uint32_t program_id) | |||
| if (CarlaPlugin* const plugin = standalone.engine->getPlugin(pluginId)) | |||
| { | |||
| if (program_id < plugin->programCount()) | |||
| return plugin->setProgram(program_id, true, true, false, true); | |||
| if (programId < plugin->programCount()) | |||
| return plugin->setProgram(programId, true, true, false, true); | |||
| qCritical("carla_set_program(%i, %i) - program_id out of bounds", pluginId, program_id); | |||
| qCritical("carla_set_program(%i, %i) - programId out of bounds", pluginId, programId); | |||
| return; | |||
| } | |||
| qCritical("carla_set_program(%i, %i) - could not find plugin", pluginId, program_id); | |||
| qCritical("carla_set_program(%i, %i) - could not find plugin", pluginId, programId); | |||
| } | |||
| void carla_set_midi_program(unsigned int pluginId, uint32_t midi_program_id) | |||
| void carla_set_midi_program(unsigned int pluginId, uint32_t midiProgramId) | |||
| { | |||
| qDebug("carla_set_midi_program(%i, %i)", pluginId, midi_program_id); | |||
| qDebug("carla_set_midi_program(%i, %i)", pluginId, midiProgramId); | |||
| CARLA_ASSERT(standalone.engine != nullptr); | |||
| if (standalone.engine == nullptr) | |||
| @@ -1201,14 +1184,14 @@ void carla_set_midi_program(unsigned int pluginId, uint32_t midi_program_id) | |||
| if (CarlaPlugin* const plugin = standalone.engine->getPlugin(pluginId)) | |||
| { | |||
| if (midi_program_id < plugin->midiProgramCount()) | |||
| return plugin->setMidiProgram(midi_program_id, true, true, false, true); | |||
| if (midiProgramId < plugin->midiProgramCount()) | |||
| return plugin->setMidiProgram(midiProgramId, true, true, false, true); | |||
| qCritical("carla_set_midi_program(%i, %i) - midi_program_id out of bounds", pluginId, midi_program_id); | |||
| qCritical("carla_set_midi_program(%i, %i) - midiProgramId out of bounds", pluginId, midiProgramId); | |||
| return; | |||
| } | |||
| qCritical("carla_set_midi_program(%i, %i) - could not find plugin", pluginId, midi_program_id); | |||
| qCritical("carla_set_midi_program(%i, %i) - could not find plugin", pluginId, midiProgramId); | |||
| } | |||
| // ------------------------------------------------------------------------------------------------------------------- | |||
| @@ -1227,9 +1210,9 @@ void carla_set_custom_data(unsigned int pluginId, const char* type, const char* | |||
| qCritical("carla_set_custom_data(%i, \"%s\", \"%s\", \"%s\") - could not find plugin", pluginId, type, key, value); | |||
| } | |||
| void carla_set_chunk_data(unsigned int pluginId, const char* chunk_data) | |||
| void carla_set_chunk_data(unsigned int pluginId, const char* chunkData) | |||
| { | |||
| qDebug("carla_set_chunk_data(%i, \"%s\")", pluginId, chunk_data); | |||
| qDebug("carla_set_chunk_data(%i, \"%s\")", pluginId, chunkData); | |||
| CARLA_ASSERT(standalone.engine != nullptr); | |||
| if (standalone.engine == nullptr) | |||
| @@ -1238,47 +1221,37 @@ void carla_set_chunk_data(unsigned int pluginId, const char* chunk_data) | |||
| if (CarlaPlugin* const plugin = standalone.engine->getPlugin(pluginId)) | |||
| { | |||
| if (plugin->hints() & CarlaBackend::PLUGIN_USES_CHUNKS) | |||
| return plugin->setChunkData(chunk_data); | |||
| return plugin->setChunkData(chunkData); | |||
| qCritical("carla_set_chunk_data(%i, \"%s\") - plugin does not support chunks", pluginId, chunk_data); | |||
| qCritical("carla_set_chunk_data(%i, \"%s\") - plugin does not support chunks", pluginId, chunkData); | |||
| return; | |||
| } | |||
| qCritical("carla_set_chunk_data(%i, \"%s\") - could not find plugin", pluginId, chunk_data); | |||
| qCritical("carla_set_chunk_data(%i, \"%s\") - could not find plugin", pluginId, chunkData); | |||
| } | |||
| // ------------------------------------------------------------------------------------------------------------------- | |||
| void carla_show_gui(unsigned int pluginId, bool yesno) | |||
| void carla_prepare_for_save(unsigned int pluginId) | |||
| { | |||
| qDebug("carla_show_gui(%i, %s)", pluginId, bool2str(yesno)); | |||
| qDebug("carla_prepare_for_save(%i)", pluginId); | |||
| CARLA_ASSERT(standalone.engine != nullptr); | |||
| if (standalone.engine == nullptr) | |||
| return; | |||
| if (CarlaPlugin* const plugin = standalone.engine->getPlugin(pluginId)) | |||
| return plugin->showGui(yesno); | |||
| qCritical("carla_show_gui(%i, %s) - could not find plugin", pluginId, bool2str(yesno)); | |||
| } | |||
| void carla_idle_guis() | |||
| { | |||
| CARLA_ASSERT(standalone.engine != nullptr); | |||
| return plugin->prepareForSave(); | |||
| if (standalone.engine) | |||
| standalone.engine->idlePluginGuis(); | |||
| qCritical("carla_prepare_for_save(%i) - could not find plugin", pluginId); | |||
| } | |||
| // ------------------------------------------------------------------------------------------------------------------- | |||
| void carla_send_midi_note(unsigned int pluginId, uint8_t channel, uint8_t note, uint8_t velocity) | |||
| { | |||
| qDebug("carla_send_midi_note(%i, %i, %i, %i)", pluginId, channel, note, velocity); | |||
| CARLA_ASSERT(standalone.engine != nullptr); | |||
| if (! (standalone.engine && standalone.engine->isRunning())) | |||
| if (standalone.engine == nullptr || ! standalone.engine->isRunning()) | |||
| return; | |||
| if (CarlaPlugin* const plugin = standalone.engine->getPlugin(pluginId)) | |||
| @@ -1287,18 +1260,18 @@ void carla_send_midi_note(unsigned int pluginId, uint8_t channel, uint8_t note, | |||
| qCritical("carla_send_midi_note(%i, %i, %i, %i) - could not find plugin", pluginId, channel, note, velocity); | |||
| } | |||
| void carla_prepare_for_save(unsigned int pluginId) | |||
| void carla_show_gui(unsigned int pluginId, bool yesno) | |||
| { | |||
| qDebug("carla_prepare_for_save(%i)", pluginId); | |||
| qDebug("carla_show_gui(%i, %s)", pluginId, bool2str(yesno)); | |||
| CARLA_ASSERT(standalone.engine != nullptr); | |||
| if (standalone.engine == nullptr) | |||
| return; | |||
| if (CarlaPlugin* const plugin = standalone.engine->getPlugin(pluginId)) | |||
| return plugin->prepareForSave(); | |||
| return plugin->showGui(yesno); | |||
| qCritical("carla_prepare_for_save(%i) - could not find plugin", pluginId); | |||
| qCritical("carla_show_gui(%i, %s) - could not find plugin", pluginId, bool2str(yesno)); | |||
| } | |||
| // ------------------------------------------------------------------------------------------------------------------- | |||
| @@ -1331,7 +1304,7 @@ const char* carla_get_last_error() | |||
| { | |||
| qDebug("carla_get_last_error()"); | |||
| if (standalone.engine) | |||
| if (standalone.engine != nullptr) | |||
| return standalone.engine->getLastError(); | |||
| return standalone.lastError; | |||
| @@ -1360,109 +1333,114 @@ void carla_set_callback_function(CarlaBackend::CallbackFunc func) | |||
| standalone.engine->setCallback(func, nullptr); | |||
| } | |||
| void carla_set_option(CarlaBackend::OptionsType option, int value, const char* value_str) | |||
| void carla_set_option(CarlaBackend::OptionsType option, int value, const char* valueStr) | |||
| { | |||
| qDebug("carla_set_option(%s, %i, \"%s\")", CarlaBackend::OptionsType2Str(option), value, value_str); | |||
| qDebug("carla_set_option(%s, %i, \"%s\")", CarlaBackend::OptionsType2Str(option), value, valueStr); | |||
| if (standalone.engine) | |||
| standalone.engine->setOption(option, value, value_str); | |||
| standalone.engine->setOption(option, value, valueStr); | |||
| switch (option) | |||
| { | |||
| case CarlaBackend::OPTION_PROCESS_NAME: | |||
| standalone.procName = value_str; | |||
| standalone.procName = valueStr; | |||
| break; | |||
| case CarlaBackend::OPTION_PROCESS_MODE: | |||
| if (value < CarlaBackend::PROCESS_MODE_SINGLE_CLIENT || value > CarlaBackend::PROCESS_MODE_PATCHBAY) | |||
| return qCritical("carla_set_option(%s, %i, \"%s\") - invalid value", OptionsType2Str(option), value, value_str); | |||
| return qCritical("carla_set_option(OPTION_PROCESS_MODE, %i, \"%s\") - invalid value", value, valueStr); | |||
| standalone.options.processMode = static_cast<CarlaBackend::ProcessMode>(value); | |||
| break; | |||
| case CarlaBackend::OPTION_PROCESS_HIGH_PRECISION: | |||
| standalone.options.processHighPrecision = value; | |||
| case CarlaBackend::OPTION_FORCE_STEREO: | |||
| standalone.options.forceStereo = value; | |||
| break; | |||
| case CarlaBackend::OPTION_MAX_PARAMETERS: | |||
| standalone.options.maxParameters = (value > 0) ? value : CarlaBackend::MAX_PARAMETERS; | |||
| case CarlaBackend::OPTION_PREFER_PLUGIN_BRIDGES: | |||
| standalone.options.preferPluginBridges = value; | |||
| break; | |||
| case CarlaBackend::OPTION_PREFERRED_BUFFER_SIZE: | |||
| standalone.options.preferredBufferSize = value; | |||
| case CarlaBackend::OPTION_PREFER_UI_BRIDGES: | |||
| standalone.options.preferUiBridges = value; | |||
| break; | |||
| case CarlaBackend::OPTION_PREFERRED_SAMPLE_RATE: | |||
| standalone.options.preferredSampleRate = value; | |||
| #ifdef WANT_DSSI | |||
| case CarlaBackend::OPTION_USE_DSSI_VST_CHUNKS: | |||
| standalone.options.useDssiVstChunks = value; | |||
| break; | |||
| #endif | |||
| case CarlaBackend::OPTION_FORCE_STEREO: | |||
| standalone.options.forceStereo = value; | |||
| case CarlaBackend::OPTION_MAX_PARAMETERS: | |||
| standalone.options.maxParameters = (value > 0) ? value : CarlaBackend::MAX_DEFAULT_PARAMETERS; | |||
| break; | |||
| case CarlaBackend::OPTION_USE_DSSI_VST_CHUNKS: | |||
| standalone.options.useDssiVstChunks = value; | |||
| case CarlaBackend::OPTION_OSC_UI_TIMEOUT: | |||
| standalone.options.oscUiTimeout = value; | |||
| break; | |||
| case CarlaBackend::OPTION_PREFER_PLUGIN_BRIDGES: | |||
| standalone.options.preferPluginBridges = value; | |||
| case CarlaBackend::OPTION_PREFERRED_BUFFER_SIZE: | |||
| standalone.options.preferredBufferSize = value; | |||
| break; | |||
| case CarlaBackend::OPTION_PREFER_UI_BRIDGES: | |||
| standalone.options.preferUiBridges = value; | |||
| case CarlaBackend::OPTION_PREFERRED_SAMPLE_RATE: | |||
| standalone.options.preferredSampleRate = value; | |||
| break; | |||
| case CarlaBackend::OPTION_OSC_UI_TIMEOUT: | |||
| standalone.options.oscUiTimeout = value; | |||
| case CarlaBackend::OPTION_PATH_BRIDGE_NATIVE: | |||
| standalone.options.bridge_native = valueStr; | |||
| break; | |||
| case CarlaBackend::OPTION_PATH_BRIDGE_POSIX32: | |||
| standalone.options.bridge_posix32 = value_str; | |||
| standalone.options.bridge_posix32 = valueStr; | |||
| break; | |||
| case CarlaBackend::OPTION_PATH_BRIDGE_POSIX64: | |||
| standalone.options.bridge_posix64 = value_str; | |||
| standalone.options.bridge_posix64 = valueStr; | |||
| break; | |||
| case CarlaBackend::OPTION_PATH_BRIDGE_WIN32: | |||
| standalone.options.bridge_win32 = value_str; | |||
| standalone.options.bridge_win32 = valueStr; | |||
| break; | |||
| case CarlaBackend::OPTION_PATH_BRIDGE_WIN64: | |||
| standalone.options.bridge_win64 = value_str; | |||
| standalone.options.bridge_win64 = valueStr; | |||
| break; | |||
| #ifdef WANT_LV2 | |||
| case CarlaBackend::OPTION_PATH_BRIDGE_LV2_GTK2: | |||
| standalone.options.bridge_lv2gtk2 = value_str; | |||
| standalone.options.bridge_lv2gtk2 = valueStr; | |||
| break; | |||
| case CarlaBackend::OPTION_PATH_BRIDGE_LV2_GTK3: | |||
| standalone.options.bridge_lv2gtk3 = value_str; | |||
| standalone.options.bridge_lv2gtk3 = valueStr; | |||
| break; | |||
| case CarlaBackend::OPTION_PATH_BRIDGE_LV2_QT4: | |||
| standalone.options.bridge_lv2qt4 = value_str; | |||
| standalone.options.bridge_lv2qt4 = valueStr; | |||
| break; | |||
| case CarlaBackend::OPTION_PATH_BRIDGE_LV2_QT5: | |||
| standalone.options.bridge_lv2qt5 = value_str; | |||
| standalone.options.bridge_lv2qt5 = valueStr; | |||
| break; | |||
| case CarlaBackend::OPTION_PATH_BRIDGE_LV2_COCOA: | |||
| standalone.options.bridge_lv2cocoa = value_str; | |||
| standalone.options.bridge_lv2cocoa = valueStr; | |||
| break; | |||
| case CarlaBackend::OPTION_PATH_BRIDGE_LV2_WINDOWS: | |||
| standalone.options.bridge_lv2win = value_str; | |||
| standalone.options.bridge_lv2win = valueStr; | |||
| break; | |||
| case CarlaBackend::OPTION_PATH_BRIDGE_LV2_X11: | |||
| standalone.options.bridge_lv2x11 = value_str; | |||
| standalone.options.bridge_lv2x11 = valueStr; | |||
| break; | |||
| #endif | |||
| #ifdef WANT_VST | |||
| case CarlaBackend::OPTION_PATH_BRIDGE_VST_COCOA: | |||
| standalone.options.bridge_vstcocoa = value_str; | |||
| standalone.options.bridge_vstcocoa = valueStr; | |||
| break; | |||
| case CarlaBackend::OPTION_PATH_BRIDGE_VST_HWND: | |||
| standalone.options.bridge_vsthwnd = value_str; | |||
| standalone.options.bridge_vsthwnd = valueStr; | |||
| break; | |||
| case CarlaBackend::OPTION_PATH_BRIDGE_VST_X11: | |||
| standalone.options.bridge_vstx11 = value_str; | |||
| standalone.options.bridge_vstx11 = valueStr; | |||
| break; | |||
| #endif | |||
| } | |||
| } | |||
| #if 0 | |||
| // ------------------------------------------------------------------------------------------------------------------- | |||
| #define NSM_API_VERSION_MAJOR 1 | |||
| @@ -20,551 +20,18 @@ | |||
| # Imports (Global) | |||
| from ctypes import * | |||
| from subprocess import Popen, PIPE | |||
| # ------------------------------------------------------------------------------------------------------------ | |||
| # Imports (Custom) | |||
| from carla_shared import * | |||
| try: | |||
| import ladspa_rdf | |||
| haveLRDF = True | |||
| except: | |||
| print("LRDF Support not available (LADSPA-RDF will be disabled)") | |||
| haveLRDF = False | |||
| # ------------------------------------------------------------------------------------------------------------ | |||
| # Convert a ctypes struct into a python dict | |||
| def structToDict(struct): | |||
| return dict((attr, getattr(struct, attr)) for attr, value in struct._fields_) | |||
| # ------------------------------------------------------------------------------------------------------------ | |||
| # Default Plugin Folders | |||
| if WINDOWS: | |||
| splitter = ";" | |||
| APPDATA = os.getenv("APPDATA") | |||
| PROGRAMFILES = os.getenv("PROGRAMFILES") | |||
| PROGRAMFILESx86 = os.getenv("PROGRAMFILES(x86)") | |||
| COMMONPROGRAMFILES = os.getenv("COMMONPROGRAMFILES") | |||
| # Small integrity tests | |||
| if not APPDATA: | |||
| print("APPDATA variable not set, cannot continue") | |||
| sys.exit(1) | |||
| if not PROGRAMFILES: | |||
| print("PROGRAMFILES variable not set, cannot continue") | |||
| sys.exit(1) | |||
| if not COMMONPROGRAMFILES: | |||
| print("COMMONPROGRAMFILES variable not set, cannot continue") | |||
| sys.exit(1) | |||
| DEFAULT_LADSPA_PATH = [ | |||
| os.path.join(APPDATA, "LADSPA"), | |||
| os.path.join(PROGRAMFILES, "LADSPA") | |||
| ] | |||
| DEFAULT_DSSI_PATH = [ | |||
| os.path.join(APPDATA, "DSSI"), | |||
| os.path.join(PROGRAMFILES, "DSSI") | |||
| ] | |||
| DEFAULT_LV2_PATH = [ | |||
| os.path.join(APPDATA, "LV2"), | |||
| os.path.join(COMMONPROGRAMFILES, "LV2") | |||
| ] | |||
| DEFAULT_VST_PATH = [ | |||
| os.path.join(PROGRAMFILES, "VstPlugins"), | |||
| os.path.join(PROGRAMFILES, "Steinberg", "VstPlugins") | |||
| ] | |||
| DEFAULT_GIG_PATH = [ | |||
| os.path.join(APPDATA, "GIG") | |||
| ] | |||
| DEFAULT_SF2_PATH = [ | |||
| os.path.join(APPDATA, "SF2") | |||
| ] | |||
| DEFAULT_SFZ_PATH = [ | |||
| os.path.join(APPDATA, "SFZ") | |||
| ] | |||
| if PROGRAMFILESx86: | |||
| DEFAULT_LADSPA_PATH.append(os.path.join(PROGRAMFILESx86, "LADSPA")) | |||
| DEFAULT_DSSI_PATH.append(os.path.join(PROGRAMFILESx86, "DSSI")) | |||
| DEFAULT_VST_PATH.append(os.path.join(PROGRAMFILESx86, "VstPlugins")) | |||
| DEFAULT_VST_PATH.append(os.path.join(PROGRAMFILESx86, "Steinberg", "VstPlugins")) | |||
| elif HAIKU: | |||
| splitter = ":" | |||
| DEFAULT_LADSPA_PATH = [ | |||
| # TODO | |||
| ] | |||
| DEFAULT_DSSI_PATH = [ | |||
| # TODO | |||
| ] | |||
| DEFAULT_LV2_PATH = [ | |||
| # TODO | |||
| ] | |||
| DEFAULT_VST_PATH = [ | |||
| # TODO | |||
| ] | |||
| DEFAULT_GIG_PATH = [ | |||
| # TODO | |||
| ] | |||
| DEFAULT_SF2_PATH = [ | |||
| # TODO | |||
| ] | |||
| DEFAULT_SFZ_PATH = [ | |||
| # TODO | |||
| ] | |||
| elif MACOS: | |||
| splitter = ":" | |||
| DEFAULT_LADSPA_PATH = [ | |||
| os.path.join(HOME, "Library", "Audio", "Plug-Ins", "LADSPA"), | |||
| os.path.join("/", "Library", "Audio", "Plug-Ins", "LADSPA") | |||
| ] | |||
| DEFAULT_DSSI_PATH = [ | |||
| os.path.join(HOME, "Library", "Audio", "Plug-Ins", "DSSI"), | |||
| os.path.join("/", "Library", "Audio", "Plug-Ins", "DSSI") | |||
| ] | |||
| DEFAULT_LV2_PATH = [ | |||
| os.path.join(HOME, "Library", "Audio", "Plug-Ins", "LV2"), | |||
| os.path.join("/", "Library", "Audio", "Plug-Ins", "LV2") | |||
| ] | |||
| DEFAULT_VST_PATH = [ | |||
| os.path.join(HOME, "Library", "Audio", "Plug-Ins", "VST"), | |||
| os.path.join("/", "Library", "Audio", "Plug-Ins", "VST") | |||
| ] | |||
| DEFAULT_GIG_PATH = [ | |||
| # TODO | |||
| ] | |||
| DEFAULT_SF2_PATH = [ | |||
| # TODO | |||
| ] | |||
| DEFAULT_SFZ_PATH = [ | |||
| # TODO | |||
| ] | |||
| else: | |||
| splitter = ":" | |||
| DEFAULT_LADSPA_PATH = [ | |||
| os.path.join(HOME, ".ladspa"), | |||
| os.path.join("/", "usr", "lib", "ladspa"), | |||
| os.path.join("/", "usr", "local", "lib", "ladspa") | |||
| ] | |||
| DEFAULT_DSSI_PATH = [ | |||
| os.path.join(HOME, ".dssi"), | |||
| os.path.join("/", "usr", "lib", "dssi"), | |||
| os.path.join("/", "usr", "local", "lib", "dssi") | |||
| ] | |||
| DEFAULT_LV2_PATH = [ | |||
| os.path.join(HOME, ".lv2"), | |||
| os.path.join("/", "usr", "lib", "lv2"), | |||
| os.path.join("/", "usr", "local", "lib", "lv2") | |||
| ] | |||
| DEFAULT_VST_PATH = [ | |||
| os.path.join(HOME, ".vst"), | |||
| os.path.join("/", "usr", "lib", "vst"), | |||
| os.path.join("/", "usr", "local", "lib", "vst") | |||
| ] | |||
| DEFAULT_GIG_PATH = [ | |||
| os.path.join(HOME, ".sounds"), | |||
| os.path.join("/", "usr", "share", "sounds", "gig") | |||
| ] | |||
| DEFAULT_SF2_PATH = [ | |||
| os.path.join(HOME, ".sounds"), | |||
| os.path.join("/", "usr", "share", "sounds", "sf2") | |||
| ] | |||
| DEFAULT_SFZ_PATH = [ | |||
| os.path.join(HOME, ".sounds"), | |||
| os.path.join("/", "usr", "share", "sounds", "sfz") | |||
| ] | |||
| # ------------------------------------------------------------------------------------------------------------ | |||
| # Default Plugin Folders (set) | |||
| global LADSPA_PATH, DSSI_PATH, LV2_PATH, VST_PATH, GIG_PATH, SF2_PATH, SFZ_PATH | |||
| LADSPA_PATH = os.getenv("LADSPA_PATH", DEFAULT_LADSPA_PATH) | |||
| DSSI_PATH = os.getenv("DSSI_PATH", DEFAULT_DSSI_PATH) | |||
| LV2_PATH = os.getenv("LV2_PATH", DEFAULT_LV2_PATH) | |||
| VST_PATH = os.getenv("VST_PATH", DEFAULT_VST_PATH) | |||
| GIG_PATH = os.getenv("GIG_PATH", DEFAULT_GIG_PATH) | |||
| SF2_PATH = os.getenv("SF2_PATH", DEFAULT_SF2_PATH) | |||
| SFZ_PATH = os.getenv("SFZ_PATH", DEFAULT_SFZ_PATH) | |||
| if haveLRDF: | |||
| LADSPA_RDF_PATH_env = os.getenv("LADSPA_RDF_PATH") | |||
| if LADSPA_RDF_PATH_env: | |||
| ladspa_rdf.set_rdf_path(LADSPA_RDF_PATH_env.split(splitter)) | |||
| del LADSPA_RDF_PATH_env | |||
| # ------------------------------------------------------------------------------------------------------------ | |||
| # Search for Carla library and tools | |||
| global carla_library_path | |||
| carla_library_path = "" | |||
| carla_discovery_native = "" | |||
| carla_discovery_posix32 = "" | |||
| carla_discovery_posix64 = "" | |||
| carla_discovery_win32 = "" | |||
| carla_discovery_win64 = "" | |||
| carla_bridge_native = "" | |||
| carla_bridge_posix32 = "" | |||
| carla_bridge_posix64 = "" | |||
| carla_bridge_win32 = "" | |||
| carla_bridge_win64 = "" | |||
| carla_bridge_lv2_gtk2 = "" | |||
| carla_bridge_lv2_gtk3 = "" | |||
| carla_bridge_lv2_qt4 = "" | |||
| carla_bridge_lv2_qt5 = "" | |||
| carla_bridge_lv2_cocoa = "" | |||
| carla_bridge_lv2_windows = "" | |||
| carla_bridge_lv2_x11 = "" | |||
| carla_bridge_vst_cocoa = "" | |||
| carla_bridge_vst_hwnd = "" | |||
| carla_bridge_vst_x11 = "" | |||
| if WINDOWS: | |||
| carla_libname = "libcarla_standalone.dll" | |||
| elif MACOS: | |||
| carla_libname = "libcarla_standalone.dylib" | |||
| else: | |||
| carla_libname = "libcarla_standalone.so" | |||
| CWD = sys.path[0] | |||
| # make it work with cxfreeze | |||
| if CWD.endswith("%scarla" % os.sep): | |||
| CWD = CWD.rsplit("%scarla" % os.sep, 1)[0] | |||
| # find carla_library_path | |||
| if os.path.exists(os.path.join(CWD, "backend", carla_libname)): | |||
| carla_library_path = os.path.join(CWD, "backend", carla_libname) | |||
| else: | |||
| if WINDOWS: | |||
| CARLA_PATH = (os.path.join(PROGRAMFILES, "Carla"),) | |||
| elif MACOS: | |||
| CARLA_PATH = ("/opt/local/lib", "/usr/local/lib/", "/usr/lib") | |||
| else: | |||
| CARLA_PATH = ("/usr/local/lib/", "/usr/lib") | |||
| for path in CARLA_PATH: | |||
| if os.path.exists(os.path.join(path, "carla", carla_libname)): | |||
| carla_library_path = os.path.join(path, "carla", carla_libname) | |||
| break | |||
| # find any tool | |||
| def findTool(tdir, tname): | |||
| if os.path.exists(os.path.join(CWD, tdir, tname)): | |||
| return os.path.join(CWD, tdir, tname) | |||
| for p in PATH: | |||
| if os.path.exists(os.path.join(p, tname)): | |||
| return os.path.join(p, tname) | |||
| return "" | |||
| # find wine/windows tools | |||
| carla_discovery_win32 = findTool("carla-discovery", "carla-discovery-win32.exe") | |||
| carla_discovery_win64 = findTool("carla-discovery", "carla-discovery-win64.exe") | |||
| carla_bridge_win32 = findTool("carla-bridge", "carla-bridge-win32.exe") | |||
| carla_bridge_win64 = findTool("carla-bridge", "carla-bridge-win64.exe") | |||
| # find native and posix tools | |||
| if not WINDOWS: | |||
| carla_discovery_native = findTool("carla-discovery", "carla-discovery-native") | |||
| carla_discovery_posix32 = findTool("carla-discovery", "carla-discovery-posix32") | |||
| carla_discovery_posix64 = findTool("carla-discovery", "carla-discovery-posix64") | |||
| carla_bridge_native = findTool("carla-bridge", "carla-bridge-native") | |||
| carla_bridge_posix32 = findTool("carla-bridge", "carla-bridge-posix32") | |||
| carla_bridge_posix64 = findTool("carla-bridge", "carla-bridge-posix64") | |||
| # find windows only tools | |||
| if WINDOWS: | |||
| carla_bridge_lv2_windows = findTool("carla-bridge", "carla-bridge-lv2-windows.exe") | |||
| carla_bridge_vst_hwnd = findTool("carla-bridge", "carla-bridge-vst-hwnd.exe") | |||
| # find mac os only tools | |||
| elif MACOS: | |||
| carla_bridge_lv2_cocoa = findTool("carla-bridge", "carla-bridge-lv2-cocoa") | |||
| carla_bridge_vst_cocoa = findTool("carla-bridge", "carla-bridge-vst-cocoa") | |||
| # find generic tools | |||
| else: | |||
| carla_bridge_lv2_gtk2 = findTool("carla-bridge", "carla-bridge-lv2-gtk2") | |||
| carla_bridge_lv2_gtk3 = findTool("carla-bridge", "carla-bridge-lv2-gtk3") | |||
| carla_bridge_lv2_qt4 = findTool("carla-bridge", "carla-bridge-lv2-qt4") | |||
| carla_bridge_lv2_qt5 = findTool("carla-bridge", "carla-bridge-lv2-qt5") | |||
| # find linux only tools | |||
| if LINUX: | |||
| carla_bridge_lv2_x11 = os.path.join("carla-bridge", "carla-bridge-lv2-x11") | |||
| carla_bridge_vst_x11 = os.path.join("carla-bridge", "carla-bridge-vst-x11") | |||
| # ------------------------------------------------------------------------------------------------------------ | |||
| # Plugin Query (helper functions) | |||
| def findBinaries(bPATH, OS): | |||
| binaries = [] | |||
| if OS == "WINDOWS": | |||
| extensions = (".dll",) | |||
| elif OS == "MACOS": | |||
| extensions = (".dylib", ".so") | |||
| else: | |||
| extensions = (".so", ".sO", ".SO", ".So") | |||
| for root, dirs, files in os.walk(bPATH): | |||
| for name in [name for name in files if name.endswith(extensions)]: | |||
| binaries.append(os.path.join(root, name)) | |||
| return binaries | |||
| # FIXME - may use any extension, just needs to have manifest.ttl | |||
| def findLV2Bundles(bPATH): | |||
| bundles = [] | |||
| extensions = (".lv2", ".lV2", ".LV2", ".Lv2") if not WINDOWS else (".lv2",) | |||
| for root, dirs, files in os.walk(bPATH): | |||
| for dir_ in [dir_ for dir_ in dirs if dir_.endswith(extensions)]: | |||
| bundles.append(os.path.join(root, dir_)) | |||
| return bundles | |||
| def findSoundKits(bPATH, stype): | |||
| soundfonts = [] | |||
| if stype == "gig": | |||
| extensions = (".gig", ".giG", ".gIG", ".GIG", ".GIg", ".Gig") if not WINDOWS else (".gig",) | |||
| elif stype == "sf2": | |||
| extensions = (".sf2", ".sF2", ".SF2", ".Sf2") if not WINDOWS else (".sf2",) | |||
| elif stype == "sfz": | |||
| extensions = (".sfz", ".sfZ", ".sFZ", ".SFZ", ".SFz", ".Sfz") if not WINDOWS else (".sfz",) | |||
| else: | |||
| return [] | |||
| for root, dirs, files in os.walk(bPATH): | |||
| for name in [name for name in files if name.endswith(extensions)]: | |||
| soundfonts.append(os.path.join(root, name)) | |||
| return soundfonts | |||
| def findDSSIGUI(filename, name, label): | |||
| pluginDir = filename.rsplit(".", 1)[0] | |||
| shortName = os.path.basename(pluginDir) | |||
| guiFilename = "" | |||
| checkName = name.replace(" ", "_") | |||
| checkLabel = label | |||
| checkSName = shortName | |||
| if checkName[-1] != "_": checkName += "_" | |||
| if checkLabel[-1] != "_": checkLabel += "_" | |||
| if checkSName[-1] != "_": checkSName += "_" | |||
| for root, dirs, files in os.walk(pluginDir): | |||
| guiFiles = files | |||
| break | |||
| else: | |||
| guiFiles = [] | |||
| for gui in guiFiles: | |||
| if gui.startswith(checkName) or gui.startswith(checkLabel) or gui.startswith(checkSName): | |||
| guiFilename = os.path.join(pluginDir, gui) | |||
| break | |||
| return guiFilename | |||
| # ------------------------------------------------------------------------------------------------------------ | |||
| # Plugin Query | |||
| PLUGIN_QUERY_API_VERSION = 1 | |||
| PyPluginInfo = { | |||
| 'API': PLUGIN_QUERY_API_VERSION, | |||
| 'build': 0, # BINARY_NONE | |||
| 'type': 0, # PLUGIN_NONE | |||
| 'hints': 0x0, | |||
| 'binary': "", | |||
| 'name': "", | |||
| 'label': "", | |||
| 'maker': "", | |||
| 'copyright': "", | |||
| 'uniqueId': 0, | |||
| 'audio.ins': 0, | |||
| 'audio.outs': 0, | |||
| 'audio.totals': 0, | |||
| 'midi.ins': 0, | |||
| 'midi.outs': 0, | |||
| 'midi.totals': 0, | |||
| 'parameters.ins': 0, | |||
| 'parameters.outs': 0, | |||
| 'parameters.total': 0, | |||
| 'programs.total': 0 | |||
| } | |||
| def runCarlaDiscovery(itype, stype, filename, tool, isWine=False): | |||
| fakeLabel = os.path.basename(filename).rsplit(".", 1)[0] | |||
| plugins = [] | |||
| command = [] | |||
| if LINUX or MACOS: | |||
| command.append("env") | |||
| command.append("LANG=C") | |||
| if isWine: | |||
| command.append("WINEDEBUG=-all") | |||
| command.append(tool) | |||
| command.append(stype) | |||
| command.append(filename) | |||
| Ps = Popen(command, stdout=PIPE) | |||
| Ps.wait() | |||
| output = Ps.stdout.read().decode("utf-8", errors="ignore").split("\n") | |||
| pinfo = None | |||
| for line in output: | |||
| line = line.strip() | |||
| if line == "carla-discovery::init::-----------": | |||
| pinfo = deepcopy(PyPluginInfo) | |||
| pinfo['type'] = itype | |||
| pinfo['binary'] = filename | |||
| elif line == "carla-discovery::end::------------": | |||
| if pinfo != None: | |||
| plugins.append(pinfo) | |||
| pinfo = None | |||
| elif line == "Segmentation fault": | |||
| print("carla-discovery::crash::%s crashed during discovery" % filename) | |||
| elif line.startswith("err:module:import_dll Library"): | |||
| print(line) | |||
| elif line.startswith("carla-discovery::error::"): | |||
| print("%s - %s" % (line, filename)) | |||
| elif line.startswith("carla-discovery::"): | |||
| if pinfo == None: | |||
| continue | |||
| prop, value = line.replace("carla-discovery::", "").split("::", 1) | |||
| if prop == "name": | |||
| pinfo['name'] = value if value else fakeLabel | |||
| elif prop == "label": | |||
| pinfo['label'] = value if value else fakeLabel | |||
| elif prop == "maker": | |||
| pinfo['maker'] = value | |||
| elif prop == "copyright": | |||
| pinfo['copyright'] = value | |||
| elif prop == "uniqueId": | |||
| if value.isdigit(): pinfo['uniqueId'] = int(value) | |||
| elif prop == "hints": | |||
| if value.isdigit(): pinfo['hints'] = int(value) | |||
| elif prop == "audio.ins": | |||
| if value.isdigit(): pinfo['audio.ins'] = int(value) | |||
| elif prop == "audio.outs": | |||
| if value.isdigit(): pinfo['audio.outs'] = int(value) | |||
| elif prop == "audio.total": | |||
| if value.isdigit(): pinfo['audio.total'] = int(value) | |||
| elif prop == "midi.ins": | |||
| if value.isdigit(): pinfo['midi.ins'] = int(value) | |||
| elif prop == "midi.outs": | |||
| if value.isdigit(): pinfo['midi.outs'] = int(value) | |||
| elif prop == "midi.total": | |||
| if value.isdigit(): pinfo['midi.total'] = int(value) | |||
| elif prop == "parameters.ins": | |||
| if value.isdigit(): pinfo['parameters.ins'] = int(value) | |||
| elif prop == "parameters.outs": | |||
| if value.isdigit(): pinfo['parameters.outs'] = int(value) | |||
| elif prop == "parameters.total": | |||
| if value.isdigit(): pinfo['parameters.total'] = int(value) | |||
| elif prop == "programs.total": | |||
| if value.isdigit(): pinfo['programs.total'] = int(value) | |||
| elif prop == "build": | |||
| if value.isdigit(): pinfo['build'] = int(value) | |||
| # Additional checks | |||
| for pinfo in plugins: | |||
| if itype == PLUGIN_DSSI: | |||
| if findDSSIGUI(pinfo['binary'], pinfo['name'], pinfo['label']): | |||
| pinfo['hints'] |= PLUGIN_HAS_GUI | |||
| return plugins | |||
| def checkPluginInternal(desc): | |||
| plugins = [] | |||
| pinfo = deepcopy(PyPluginInfo) | |||
| pinfo['type'] = PLUGIN_INTERNAL | |||
| pinfo['name'] = cString(desc['name']) | |||
| pinfo['label'] = cString(desc['label']) | |||
| pinfo['maker'] = cString(desc['maker']) | |||
| pinfo['copyright'] = cString(desc['copyright']) | |||
| pinfo['hints'] = int(desc['hints']) | |||
| pinfo['build'] = BINARY_NATIVE | |||
| plugins.append(pinfo) | |||
| return plugins | |||
| def checkPluginLADSPA(filename, tool, isWine=False): | |||
| return runCarlaDiscovery(PLUGIN_LADSPA, "LADSPA", filename, tool, isWine) | |||
| def checkPluginDSSI(filename, tool, isWine=False): | |||
| return runCarlaDiscovery(PLUGIN_DSSI, "DSSI", filename, tool, isWine) | |||
| def checkPluginLV2(filename, tool, isWine=False): | |||
| return runCarlaDiscovery(PLUGIN_LV2, "LV2", filename, tool, isWine) | |||
| def checkPluginVST(filename, tool, isWine=False): | |||
| return runCarlaDiscovery(PLUGIN_VST, "VST", filename, tool, isWine) | |||
| def checkPluginGIG(filename, tool): | |||
| return runCarlaDiscovery(PLUGIN_GIG, "GIG", filename, tool) | |||
| def checkPluginSF2(filename, tool): | |||
| return runCarlaDiscovery(PLUGIN_SF2, "SF2", filename, tool) | |||
| def checkPluginSFZ(filename, tool): | |||
| return runCarlaDiscovery(PLUGIN_SFZ, "SFZ", filename, tool) | |||
| # ------------------------------------------------------------------------------------------------------------ | |||
| # Backend C++ -> Python variables | |||
| @@ -705,6 +172,9 @@ class Host(object): | |||
| self.lib.carla_engine_close.argtypes = None | |||
| self.lib.carla_engine_close.restype = c_bool | |||
| self.lib.carla_engine_idle.argtypes = None | |||
| self.lib.carla_engine_idle.restype = None | |||
| self.lib.carla_is_engine_running.argtypes = None | |||
| self.lib.carla_is_engine_running.restype = c_bool | |||
| @@ -759,104 +229,103 @@ class Host(object): | |||
| self.lib.carla_get_custom_data_count.argtypes = [c_uint] | |||
| self.lib.carla_get_custom_data_count.restype = c_uint32 | |||
| #self.lib.carla_get_parameter_text.argtypes = [c_uint, c_uint32] | |||
| #self.lib.carla_get_parameter_text.restype = c_char_p | |||
| #self.lib.carla_get_program_name.argtypes = [c_uint, c_uint32] | |||
| #self.lib.carla_get_program_name.restype = c_char_p | |||
| self.lib.carla_get_parameter_text.argtypes = [c_uint, c_uint32] | |||
| self.lib.carla_get_parameter_text.restype = c_char_p | |||
| #self.lib.carla_get_midi_program_name.argtypes = [c_uint, c_uint32] | |||
| #self.lib.carla_get_midi_program_name.restype = c_char_p | |||
| self.lib.carla_get_program_name.argtypes = [c_uint, c_uint32] | |||
| self.lib.carla_get_program_name.restype = c_char_p | |||
| #self.lib.carla_get_real_plugin_name.argtypes = [c_uint] | |||
| #self.lib.carla_get_real_plugin_name.restype = c_char_p | |||
| self.lib.carla_get_midi_program_name.argtypes = [c_uint, c_uint32] | |||
| self.lib.carla_get_midi_program_name.restype = c_char_p | |||
| #self.lib.carla_get_current_program_index.argtypes = [c_uint] | |||
| #self.lib.carla_get_current_program_index.restype = c_int32 | |||
| self.lib.carla_get_real_plugin_name.argtypes = [c_uint] | |||
| self.lib.carla_get_real_plugin_name.restype = c_char_p | |||
| #self.lib.carla_get_current_midi_program_index.argtypes = [c_uint] | |||
| #self.lib.carla_get_current_midi_program_index.restype = c_int32 | |||
| self.lib.carla_get_current_program_index.argtypes = [c_uint] | |||
| self.lib.carla_get_current_program_index.restype = c_int32 | |||
| #self.lib.carla_get_default_parameter_value.argtypes = [c_uint, c_uint32] | |||
| #self.lib.carla_get_default_parameter_value.restype = c_double | |||
| self.lib.carla_get_current_midi_program_index.argtypes = [c_uint] | |||
| self.lib.carla_get_current_midi_program_index.restype = c_int32 | |||
| #self.lib.carla_get_current_parameter_value.argtypes = [c_uint, c_uint32] | |||
| #self.lib.carla_get_current_parameter_value.restype = c_double | |||
| # TODO - consider removal | |||
| self.lib.carla_get_default_parameter_value.argtypes = [c_uint, c_uint32] | |||
| self.lib.carla_get_default_parameter_value.restype = c_float | |||
| #self.lib.carla_get_input_peak_value.argtypes = [c_uint, c_ushort] | |||
| #self.lib.carla_get_input_peak_value.restype = c_double | |||
| # TODO - consider removal | |||
| self.lib.carla_get_current_parameter_value.argtypes = [c_uint, c_uint32] | |||
| self.lib.carla_get_current_parameter_value.restype = c_float | |||
| #self.lib.carla_get_output_peak_value.argtypes = [c_uint, c_ushort] | |||
| #self.lib.carla_get_output_peak_value.restype = c_double | |||
| self.lib.carla_get_input_peak_value.argtypes = [c_uint, c_ushort] | |||
| self.lib.carla_get_input_peak_value.restype = c_float | |||
| #self.lib.carla_set_active.argtypes = [c_uint, c_bool] | |||
| #self.lib.carla_set_active.restype = None | |||
| self.lib.carla_get_output_peak_value.argtypes = [c_uint, c_ushort] | |||
| self.lib.carla_get_output_peak_value.restype = c_float | |||
| #self.lib.carla_set_drywet.argtypes = [c_uint, c_double] | |||
| #self.lib.carla_set_drywet.restype = None | |||
| self.lib.carla_set_active.argtypes = [c_uint, c_bool] | |||
| self.lib.carla_set_active.restype = None | |||
| #self.lib.carla_set_volume.argtypes = [c_uint, c_double] | |||
| #self.lib.carla_set_volume.restype = None | |||
| self.lib.carla_set_drywet.argtypes = [c_uint, c_float] | |||
| self.lib.carla_set_drywet.restype = None | |||
| #self.lib.carla_set_balance_left.argtypes = [c_uint, c_double] | |||
| #self.lib.carla_set_balance_left.restype = None | |||
| self.lib.carla_set_volume.argtypes = [c_uint, c_float] | |||
| self.lib.carla_set_volume.restype = None | |||
| #self.lib.carla_set_balance_right.argtypes = [c_uint, c_double] | |||
| #self.lib.carla_set_balance_right.restype = None | |||
| self.lib.carla_set_balance_left.argtypes = [c_uint, c_float] | |||
| self.lib.carla_set_balance_left.restype = None | |||
| #self.lib.carla_set_parameter_value.argtypes = [c_uint, c_uint32, c_double] | |||
| #self.lib.carla_set_parameter_value.restype = None | |||
| self.lib.carla_set_balance_right.argtypes = [c_uint, c_float] | |||
| self.lib.carla_set_balance_right.restype = None | |||
| #self.lib.carla_set_parameter_midi_cc.argtypes = [c_uint, c_uint32, c_int16] | |||
| #self.lib.carla_set_parameter_midi_cc.restype = None | |||
| self.lib.carla_set_panning.argtypes = [c_uint, c_float] | |||
| self.lib.carla_set_panning.restype = None | |||
| #self.lib.carla_set_parameter_midi_channel.argtypes = [c_uint, c_uint32, c_uint8] | |||
| #self.lib.carla_set_parameter_midi_channel.restype = None | |||
| self.lib.carla_set_parameter_value.argtypes = [c_uint, c_uint32, c_float] | |||
| self.lib.carla_set_parameter_value.restype = None | |||
| #self.lib.carla_set_program.argtypes = [c_uint, c_uint32] | |||
| #self.lib.carla_set_program.restype = None | |||
| self.lib.carla_set_parameter_midi_cc.argtypes = [c_uint, c_uint32, c_int16] | |||
| self.lib.carla_set_parameter_midi_cc.restype = None | |||
| #self.lib.carla_set_midi_program.argtypes = [c_uint, c_uint32] | |||
| #self.lib.carla_set_midi_program.restype = None | |||
| self.lib.carla_set_parameter_midi_channel.argtypes = [c_uint, c_uint32, c_uint8] | |||
| self.lib.carla_set_parameter_midi_channel.restype = None | |||
| #self.lib.carla_set_custom_data.argtypes = [c_uint, c_char_p, c_char_p, c_char_p] | |||
| #self.lib.carla_set_custom_data.restype = None | |||
| self.lib.carla_set_program.argtypes = [c_uint, c_uint32] | |||
| self.lib.carla_set_program.restype = None | |||
| #self.lib.carla_set_chunk_data.argtypes = [c_uint, c_char_p] | |||
| #self.lib.carla_set_chunk_data.restype = None | |||
| self.lib.carla_set_midi_program.argtypes = [c_uint, c_uint32] | |||
| self.lib.carla_set_midi_program.restype = None | |||
| #self.lib.carla_set_gui_container.argtypes = [c_uint, c_uintptr] | |||
| #self.lib.carla_set_gui_container.restype = None | |||
| self.lib.carla_set_custom_data.argtypes = [c_uint, c_char_p, c_char_p, c_char_p] | |||
| self.lib.carla_set_custom_data.restype = None | |||
| #self.lib.show_gui.argtypes = [c_uint, c_bool] | |||
| #self.lib.show_gui.restype = None | |||
| self.lib.carla_set_chunk_data.argtypes = [c_uint, c_char_p] | |||
| self.lib.carla_set_chunk_data.restype = None | |||
| #self.lib.idle_guis.argtypes = None | |||
| #self.lib.idle_guis.restype = None | |||
| self.lib.carla_prepare_for_save.argtypes = [c_uint] | |||
| self.lib.carla_prepare_for_save.restype = None | |||
| #self.lib.send_midi_note.argtypes = [c_uint, c_uint8, c_uint8, c_uint8] | |||
| #self.lib.send_midi_note.restype = None | |||
| self.lib.carla_send_midi_note.argtypes = [c_uint, c_uint8, c_uint8, c_uint8] | |||
| self.lib.carla_send_midi_note.restype = None | |||
| #self.lib.prepare_for_save.argtypes = [c_uint] | |||
| #self.lib.prepare_for_save.restype = None | |||
| self.lib.carla_show_gui.argtypes = [c_uint, c_bool] | |||
| self.lib.carla_show_gui.restype = None | |||
| #self.lib.carla_get_buffer_size.argtypes = None | |||
| #self.lib.carla_get_buffer_size.restype = c_uint32 | |||
| self.lib.carla_get_buffer_size.argtypes = None | |||
| self.lib.carla_get_buffer_size.restype = c_uint32 | |||
| #self.lib.carla_get_sample_rate.argtypes = None | |||
| #self.lib.carla_get_sample_rate.restype = c_double | |||
| self.lib.carla_get_sample_rate.argtypes = None | |||
| self.lib.carla_get_sample_rate.restype = c_double | |||
| #self.lib.carla_get_last_error.argtypes = None | |||
| #self.lib.carla_get_last_error.restype = c_char_p | |||
| self.lib.carla_get_last_error.argtypes = None | |||
| self.lib.carla_get_last_error.restype = c_char_p | |||
| #self.lib.carla_get_host_osc_url.argtypes = None | |||
| #self.lib.carla_get_host_osc_url.restype = c_char_p | |||
| self.lib.carla_get_host_osc_url.argtypes = None | |||
| self.lib.carla_get_host_osc_url.restype = c_char_p | |||
| #self.lib.carla_set_callback_function.argtypes = [CallbackFunc] | |||
| #self.lib.carla_set_callback_function.restype = None | |||
| self.lib.carla_set_callback_function.argtypes = [CallbackFunc] | |||
| self.lib.carla_set_callback_function.restype = None | |||
| #self.lib.carla_set_option.argtypes = [c_enum, c_int, c_char_p] | |||
| #self.lib.carla_set_option.restype = None | |||
| self.lib.carla_set_option.argtypes = [c_enum, c_int, c_char_p] | |||
| self.lib.carla_set_option.restype = None | |||
| #self.lib.nsm_announce.argtypes = [c_char_p, c_int] | |||
| #self.lib.nsm_announce.restype = None | |||
| @@ -888,6 +357,9 @@ class Host(object): | |||
| def engine_close(self): | |||
| return self.lib.carla_engine_close() | |||
| def engine_idle(self): | |||
| return self.lib.carla_engine_idle() | |||
| def is_engine_running(self): | |||
| return self.lib.carla_is_engine_running() | |||
| @@ -925,126 +397,120 @@ class Host(object): | |||
| def get_midi_program_data(self, pluginId, midiProgramId): | |||
| return structToDict(self.lib.carla_get_midi_program_data(pluginId, midiProgramId).contents) | |||
| #def get_custom_data(self, pluginId, customDataId): | |||
| #return structToDict(self.lib.carla_get_custom_data(pluginId, customDataId).contents) | |||
| #def get_chunk_data(self, pluginId): | |||
| #return self.lib.carla_get_chunk_data(pluginId) | |||
| #def get_gui_info(self, pluginId): | |||
| #return structToDict(self.lib.carla_get_gui_info(pluginId).contents) | |||
| def get_custom_data(self, pluginId, customDataId): | |||
| return structToDict(self.lib.carla_get_custom_data(pluginId, customDataId).contents) | |||
| #def get_parameter_count(self, pluginId): | |||
| #return self.lib.carla_get_parameter_count(pluginId) | |||
| def get_chunk_data(self, pluginId): | |||
| return self.lib.carla_get_chunk_data(pluginId) | |||
| #def get_program_count(self, pluginId): | |||
| #return self.lib.carla_get_program_count(pluginId) | |||
| def get_parameter_count(self, pluginId): | |||
| return self.lib.carla_get_parameter_count(pluginId) | |||
| #def get_midi_program_count(self, pluginId): | |||
| #return self.lib.carla_get_midi_program_count(pluginId) | |||
| def get_program_count(self, pluginId): | |||
| return self.lib.carla_get_program_count(pluginId) | |||
| #def get_custom_data_count(self, pluginId): | |||
| #return self.lib.carla_get_custom_data_count(pluginId) | |||
| def get_midi_program_count(self, pluginId): | |||
| return self.lib.carla_get_midi_program_count(pluginId) | |||
| #def get_parameter_text(self, pluginId, parameterId): | |||
| #return self.lib.carla_get_parameter_text(pluginId, parameterId) | |||
| def get_custom_data_count(self, pluginId): | |||
| return self.lib.carla_get_custom_data_count(pluginId) | |||
| #def get_program_name(self, pluginId, programId): | |||
| #return self.lib.carla_get_program_name(pluginId, programId) | |||
| def get_parameter_text(self, pluginId, parameterId): | |||
| return self.lib.carla_get_parameter_text(pluginId, parameterId) | |||
| #def get_midi_program_name(self, pluginId, midiProgramId): | |||
| #return self.lib.carla_get_midi_program_name(pluginId, midiProgramId) | |||
| def get_program_name(self, pluginId, programId): | |||
| return self.lib.carla_get_program_name(pluginId, programId) | |||
| #def get_real_plugin_name(self, pluginId): | |||
| #return self.lib.carla_get_real_plugin_name(pluginId) | |||
| def get_midi_program_name(self, pluginId, midiProgramId): | |||
| return self.lib.carla_get_midi_program_name(pluginId, midiProgramId) | |||
| #def get_current_program_index(self, pluginId): | |||
| #return self.lib.carla_get_current_program_index(pluginId) | |||
| def get_real_plugin_name(self, pluginId): | |||
| return self.lib.carla_get_real_plugin_name(pluginId) | |||
| #def get_current_midi_program_index(self, pluginId): | |||
| #return self.lib.carla_get_current_midi_program_index(pluginId) | |||
| def get_current_program_index(self, pluginId): | |||
| return self.lib.carla_get_current_program_index(pluginId) | |||
| #def get_default_parameter_value(self, pluginId, parameterId): | |||
| #return self.lib.carla_get_default_parameter_value(pluginId, parameterId) | |||
| def get_current_midi_program_index(self, pluginId): | |||
| return self.lib.carla_get_current_midi_program_index(pluginId) | |||
| #def get_current_parameter_value(self, pluginId, parameterId): | |||
| #return self.lib.carla_get_current_parameter_value(pluginId, parameterId) | |||
| def get_default_parameter_value(self, pluginId, parameterId): | |||
| return self.lib.carla_get_default_parameter_value(pluginId, parameterId) | |||
| #def get_input_peak_value(self, pluginId, portId): | |||
| #return self.lib.carla_get_input_peak_value(pluginId, portId) | |||
| def get_current_parameter_value(self, pluginId, parameterId): | |||
| return self.lib.carla_get_current_parameter_value(pluginId, parameterId) | |||
| #def get_output_peak_value(self, pluginId, portId): | |||
| #return self.lib.carla_get_output_peak_value(pluginId, portId) | |||
| def get_input_peak_value(self, pluginId, portId): | |||
| return self.lib.carla_get_input_peak_value(pluginId, portId) | |||
| #def set_active(self, pluginId, onOff): | |||
| #self.lib.carla_set_active(pluginId, onOff) | |||
| def get_output_peak_value(self, pluginId, portId): | |||
| return self.lib.carla_get_output_peak_value(pluginId, portId) | |||
| #def set_drywet(self, pluginId, value): | |||
| #self.lib.carla_set_drywet(pluginId, value) | |||
| def set_active(self, pluginId, onOff): | |||
| self.lib.carla_set_active(pluginId, onOff) | |||
| #def set_volume(self, pluginId, value): | |||
| #self.lib.carla_set_volume(pluginId, value) | |||
| def set_drywet(self, pluginId, value): | |||
| self.lib.carla_set_drywet(pluginId, value) | |||
| #def set_balance_left(self, pluginId, value): | |||
| #self.lib.carla_set_balance_left(pluginId, value) | |||
| def set_volume(self, pluginId, value): | |||
| self.lib.carla_set_volume(pluginId, value) | |||
| #def set_balance_right(self, pluginId, value): | |||
| #self.lib.carla_set_balance_right(pluginId, value) | |||
| def set_balance_left(self, pluginId, value): | |||
| self.lib.carla_set_balance_left(pluginId, value) | |||
| #def set_parameter_value(self, pluginId, parameterId, value): | |||
| #self.lib.carla_set_parameter_value(pluginId, parameterId, value) | |||
| def set_balance_right(self, pluginId, value): | |||
| self.lib.carla_set_balance_right(pluginId, value) | |||
| #def set_parameter_midi_cc(self, pluginId, parameterId, cc): | |||
| #self.lib.carla_set_parameter_midi_cc(pluginId, parameterId, cc) | |||
| def set_panning(self, pluginId, value): | |||
| self.lib.carla_set_panning(pluginId, value) | |||
| #def set_parameter_midi_channel(self, pluginId, parameterId, channel): | |||
| #self.lib.carla_set_parameter_midi_channel(pluginId, parameterId, channel) | |||
| def set_parameter_value(self, pluginId, parameterId, value): | |||
| self.lib.carla_set_parameter_value(pluginId, parameterId, value) | |||
| #def set_program(self, pluginId, programId): | |||
| #self.lib.carla_set_program(pluginId, programId) | |||
| def set_parameter_midi_cc(self, pluginId, parameterId, cc): | |||
| self.lib.carla_set_parameter_midi_cc(pluginId, parameterId, cc) | |||
| #def set_midi_program(self, pluginId, midiProgramId): | |||
| #self.lib.carla_set_midi_program(pluginId, midiProgramId) | |||
| def set_parameter_midi_channel(self, pluginId, parameterId, channel): | |||
| self.lib.carla_set_parameter_midi_channel(pluginId, parameterId, channel) | |||
| #def set_custom_data(self, pluginId, type_, key, value): | |||
| #self.lib.carla_set_custom_data(pluginId, type_.encode("utf-8"), key.encode("utf-8"), value.encode("utf-8")) | |||
| def set_program(self, pluginId, programId): | |||
| self.lib.carla_set_program(pluginId, programId) | |||
| #def set_chunk_data(self, pluginId, chunkData): | |||
| #self.lib.carla_set_chunk_data(pluginId, chunkData.encode("utf-8")) | |||
| def set_midi_program(self, pluginId, midiProgramId): | |||
| self.lib.carla_set_midi_program(pluginId, midiProgramId) | |||
| #def set_gui_container(self, pluginId, guiAddr): | |||
| #self.lib.carla_set_gui_container(pluginId, guiAddr) | |||
| def set_custom_data(self, pluginId, type_, key, value): | |||
| self.lib.carla_set_custom_data(pluginId, type_.encode("utf-8"), key.encode("utf-8"), value.encode("utf-8")) | |||
| #def show_gui(self, pluginId, yesNo): | |||
| #self.lib.show_gui(pluginId, yesNo) | |||
| def set_chunk_data(self, pluginId, chunkData): | |||
| self.lib.carla_set_chunk_data(pluginId, chunkData.encode("utf-8")) | |||
| #def idle_guis(self): | |||
| #self.lib.idle_guis() | |||
| def prepare_for_save(self, pluginId): | |||
| self.lib.carla_prepare_for_save(pluginId) | |||
| #def send_midi_note(self, pluginId, channel, note, velocity): | |||
| #self.lib.send_midi_note(pluginId, channel, note, velocity) | |||
| def send_midi_note(self, pluginId, channel, note, velocity): | |||
| self.lib.carla_send_midi_note(pluginId, channel, note, velocity) | |||
| #def prepare_for_save(self, pluginId): | |||
| #self.lib.prepare_for_save(pluginId) | |||
| def show_gui(self, pluginId, yesNo): | |||
| self.lib.carla_show_gui(pluginId, yesNo) | |||
| #def set_callback_function(self, func): | |||
| #self.callback = CallbackFunc(func) | |||
| #self.lib.carla_set_callback_function(self.callback) | |||
| def get_last_error(self): | |||
| return self.lib.carla_get_last_error() | |||
| #def set_option(self, option, value, valueStr): | |||
| #self.lib.carla_set_option(option, value, valueStr.encode("utf-8")) | |||
| def get_host_osc_url(self): | |||
| return self.lib.carla_get_host_osc_url() | |||
| #def get_last_error(self): | |||
| #return self.lib.carla_get_last_error() | |||
| def get_buffer_size(self): | |||
| return self.lib.carla_get_buffer_size() | |||
| #def get_host_osc_url(self): | |||
| #return self.lib.carla_get_host_osc_url() | |||
| def get_sample_rate(self): | |||
| return self.lib.carla_get_sample_rate() | |||
| #def get_buffer_size(self): | |||
| #return self.lib.carla_get_buffer_size() | |||
| def set_callback_function(self, func): | |||
| self._callback = CallbackFunc(func) | |||
| self.lib.carla_set_callback_function(self._callback) | |||
| #def get_sample_rate(self): | |||
| #return self.lib.carla_get_sample_rate() | |||
| def set_option(self, option, value, valueStr): | |||
| self.lib.carla_set_option(option, value, valueStr.encode("utf-8")) | |||
| #def nsm_announce(self, url, pid): | |||
| #self.lib.nsm_announce(url.encode("utf-8"), pid) | |||
| @@ -1055,19 +521,19 @@ class Host(object): | |||
| #def nsm_reply_save(self): | |||
| #self.lib.nsm_reply_save() | |||
| Carla.host = Host(None) | |||
| # Test available drivers | |||
| driverCount = Carla.host.get_engine_driver_count() | |||
| driverList = [] | |||
| for i in range(driverCount): | |||
| driver = cString(Carla.host.get_engine_driver_name(i)) | |||
| if driver: | |||
| driverList.append(driver) | |||
| print(i, driver) | |||
| # Test available internal plugins | |||
| pluginCount = Carla.host.get_internal_plugin_count() | |||
| for i in range(pluginCount): | |||
| plugin = Carla.host.get_internal_plugin_info(i) | |||
| print(plugin) | |||
| #Carla.host = Host(None) | |||
| ## Test available drivers | |||
| #driverCount = Carla.host.get_engine_driver_count() | |||
| #driverList = [] | |||
| #for i in range(driverCount): | |||
| #driver = cString(Carla.host.get_engine_driver_name(i)) | |||
| #if driver: | |||
| #driverList.append(driver) | |||
| #print(i, driver) | |||
| ## Test available internal plugins | |||
| #pluginCount = Carla.host.get_internal_plugin_count() | |||
| #for i in range(pluginCount): | |||
| #plugin = Carla.host.get_internal_plugin_info(i) | |||
| #print(plugin) | |||