diff --git a/Makefile b/Makefile index ba447d9..cfc253a 100644 --- a/Makefile +++ b/Makefile @@ -224,10 +224,10 @@ install: data/claudia \ data/claudia-launcher \ data/carla \ - src/carla-bridge-ui/carla-bridge-lv2-gtk2 \ - src/carla-bridge-ui/carla-bridge-lv2-qt4 \ - src/carla-bridge-ui/carla-bridge-lv2-x11 \ - src/carla-bridge-ui/carla-bridge-vst-x11 \ + src/carla-bridge/carla-bridge-lv2-gtk2 \ + src/carla-bridge/carla-bridge-lv2-qt4 \ + src/carla-bridge/carla-bridge-lv2-x11 \ + src/carla-bridge/carla-bridge-vst-x11 \ src/carla-discovery/carla-discovery-* \ $(DESTDIR)$(PREFIX)/bin/ @@ -276,7 +276,7 @@ install: # Install main code install -m 755 src/*.py $(DESTDIR)$(PREFIX)/share/cadence/src/ - install -m 755 src/carla/*.so $(DESTDIR)$(PREFIX)/lib/carla/ + install -m 755 src/carla-backend/*.so $(DESTDIR)$(PREFIX)/lib/carla/ # Install addtional stuff install -m 644 data/pulse2jack-data/* $(DESTDIR)$(PREFIX)/share/cadence/pulse2jack/ diff --git a/src/carla-backend/carla_backend.cpp b/src/carla-backend/carla_backend.cpp index 33e7bf7..11b9297 100644 --- a/src/carla-backend/carla_backend.cpp +++ b/src/carla-backend/carla_backend.cpp @@ -52,7 +52,7 @@ bool engine_init(const char* client_name) if (started) { - osc_init(nullptr); + osc_init(get_host_client_name()); carla_check_thread.start(QThread::HighPriority); set_last_error("no error"); } diff --git a/src/carla-backend/carla_osc.cpp b/src/carla-backend/carla_osc.cpp index a1a7e76..524a78a 100644 --- a/src/carla-backend/carla_osc.cpp +++ b/src/carla-backend/carla_osc.cpp @@ -20,11 +20,9 @@ #include -#ifndef CARLA_BACKEND_NO_NAMESPACE -using namespace CarlaBackend; -#endif +size_t client_name_len = 0; +const char* client_name = nullptr; -size_t client_name_len = 0; const char* global_osc_server_path = nullptr; lo_server_thread global_osc_server_thread = nullptr; OscData global_osc_data = { nullptr, nullptr, nullptr }; @@ -45,31 +43,30 @@ CARLA_BACKEND_END_NAMESPACE // End of exported symbols (API) // ------------------------------------------------------------------------------------------------------------------- -void osc_init(const char*) +#ifndef CARLA_BACKEND_NO_NAMESPACE +using namespace CarlaBackend; +#endif + +void osc_init(const char* host_client_name) { - qDebug("osc_init()"); - const char* host_client_name = get_host_client_name(); - client_name_len = strlen(host_client_name); + qDebug("osc_init(%s)", host_client_name); + client_name = strdup(host_client_name); + client_name_len = strlen(client_name); // create new OSC thread global_osc_server_thread = lo_server_thread_new(nullptr, osc_error_handler); // get our full OSC server path char* osc_thread_path = lo_server_thread_get_url(global_osc_server_thread); - - char osc_path_tmp[strlen(osc_thread_path) + client_name_len + 1]; - strcpy(osc_path_tmp, osc_thread_path); - strcat(osc_path_tmp, host_client_name); + global_osc_server_path = strdup(QString("%1%2").arg(osc_thread_path).arg(client_name).toUtf8().constData()); free(osc_thread_path); - global_osc_server_path = strdup(osc_path_tmp); - // register message handler and start OSC thread lo_server_thread_add_method(global_osc_server_thread, nullptr, nullptr, osc_message_handler, nullptr); lo_server_thread_start(global_osc_server_thread); - // debug our server path just to make sure everything is ok - qDebug("Carla OSC -> %s\n", global_osc_server_path); + // print our server path just to make sure everything is ok + printf("Carla-Backend OSC -> %s\n", global_osc_server_path); } void osc_close() @@ -84,6 +81,10 @@ void osc_close() free((void*)global_osc_server_path); global_osc_server_path = nullptr; + + free((void*)client_name); + client_name = nullptr; + client_name_len = 0; } void osc_clear_data(OscData* osc_data) @@ -113,25 +114,27 @@ void osc_error_handler(int num, const char* msg, const char* path) int osc_message_handler(const char* path, const char* types, lo_arg** argv, int argc, void* data, void* user_data) { - //qDebug("osc_message_handler(%s, %s, %p, %i, %p, %p)", path, types, argv, argc, data, user_data); +#if DEBUG + qDebug("osc_message_handler(%s, %s, %p, %i, %p, %p)", path, types, argv, argc, data, user_data); +#endif // Initial path check - if (strcmp(path, "register") == 0) + if (strcmp(path, "/register") == 0) { lo_message message = lo_message(data); lo_address source = lo_message_get_source(message); return osc_handle_register(argv, source); } - else if (strcmp(path, "unregister") == 0) + else if (strcmp(path, "/unregister") == 0) { return osc_handle_unregister(); } else { // Check if message is for this client - if (strncmp(path+1, get_host_client_name(), client_name_len) != 0 && path[client_name_len+1] == '/') + if (strlen(path) <= client_name_len || strncmp(path+1, client_name, client_name_len) != 0) { - qWarning("osc_message_handler() - message not for this client -> '%s'' != '/%s/'", path, get_host_client_name()); + qWarning("osc_message_handler() - message not for this client -> '%s'' != '/%s/'", path, client_name); return 1; } } @@ -160,29 +163,26 @@ int osc_message_handler(const char* path, const char* types, lo_arg** argv, int } // Get method from path (/Carla/i/method) - size_t mindex = client_name_len + 3; - mindex += (plugin_id >= 10) ? 2 : 1; - char method[24] = { 0 }; - - for (size_t i=mindex; i < strlen(path) && i < mindex+24; i++) - method[i-mindex] = path[i]; + int offset = (plugin_id >= 10) ? 4 : 3; + char method[32] = { 0 }; + memcpy(method, path + (client_name_len + offset), 32); // Common OSC methods - if (strcmp(method, "update") == 0) + if (strcmp(method, "/update") == 0) { lo_message message = lo_message(data); lo_address source = lo_message_get_source(message); return osc_handle_update(plugin, argv, source); } - else if (strcmp(method, "configure") == 0) + if (strcmp(method, "/configure") == 0) return osc_handle_configure(plugin, argv); - else if (strcmp(method, "control") == 0) + if (strcmp(method, "/control") == 0) return osc_handle_control(plugin, argv); - else if (strcmp(method, "program") == 0) - return (plugin->type() == PLUGIN_DSSI) ? osc_handle_program_as_midi(plugin, argv) : osc_handle_program(plugin, argv); - else if (strcmp(method, "midi") == 0) + if (strcmp(method, "/program") == 0) + return osc_handle_program(plugin, argv); + if (strcmp(method, "/midi") == 0) return osc_handle_midi(plugin, argv); - else if (strcmp(method, "exiting") == 0) + if (strcmp(method, "/exiting") == 0) return osc_handle_exiting(plugin); // Plugin-specific methods @@ -192,56 +192,56 @@ int osc_message_handler(const char* path, const char* types, lo_arg** argv, int // Plugin Bridges if (plugin->hints() & PLUGIN_IS_BRIDGE) { - if (strcmp(method, "bridge_ains_peak") == 0) + if (strcmp(method, "/bridge_ains_peak") == 0) return osc_handle_bridge_ains_peak(plugin, argv); - else if (strcmp(method, "bridge_aouts_peak") == 0) + else if (strcmp(method, "/bridge_aouts_peak") == 0) return osc_handle_bridge_aouts_peak(plugin, argv); - else if (strcmp(method, "bridge_audio_count") == 0) + else if (strcmp(method, "/bridge_audio_count") == 0) return plugin->set_osc_bridge_info(PluginBridgeAudioCount, argv); - else if (strcmp(method, "bridge_midi_count") == 0) + else if (strcmp(method, "/bridge_midi_count") == 0) return plugin->set_osc_bridge_info(PluginBridgeMidiCount, argv); - else if (strcmp(method, "bridge_param_count") == 0) + else if (strcmp(method, "/bridge_param_count") == 0) return plugin->set_osc_bridge_info(PluginBridgeParameterCount, argv); - else if (strcmp(method, "bridge_program_count") == 0) + else if (strcmp(method, "/bridge_program_count") == 0) return plugin->set_osc_bridge_info(PluginBridgeProgramCount, argv); - else if (strcmp(method, "bridge_midi_program_count") == 0) + else if (strcmp(method, "/bridge_midi_program_count") == 0) return plugin->set_osc_bridge_info(PluginBridgeMidiProgramCount, argv); - else if (strcmp(method, "bridge_plugin_info") == 0) + else if (strcmp(method, "/bridge_plugin_info") == 0) return plugin->set_osc_bridge_info(PluginBridgePluginInfo, argv); - else if (strcmp(method, "bridge_param_info") == 0) + else if (strcmp(method, "/bridge_param_info") == 0) return plugin->set_osc_bridge_info(PluginBridgeParameterInfo, argv); - else if (strcmp(method, "bridge_param_data") == 0) + else if (strcmp(method, "/bridge_param_data") == 0) return plugin->set_osc_bridge_info(PluginBridgeParameterDataInfo, argv); - else if (strcmp(method, "bridge_param_ranges") == 0) + else if (strcmp(method, "/bridge_param_ranges") == 0) return plugin->set_osc_bridge_info(PluginBridgeParameterRangesInfo, argv); - else if (strcmp(method, "bridge_program_info") == 0) + else if (strcmp(method, "/bridge_program_info") == 0) return plugin->set_osc_bridge_info(PluginBridgeProgramInfo, argv); - else if (strcmp(method, "bridge_midi_program_info") == 0) + else if (strcmp(method, "/bridge_midi_program_info") == 0) return plugin->set_osc_bridge_info(PluginBridgeMidiProgramInfo, argv); - else if (strcmp(method, "bridge_update") == 0) + else if (strcmp(method, "/bridge_update") == 0) return plugin->set_osc_bridge_info(PluginBridgeUpdateNow, argv); } // Internal OSC Stuff if (global_osc_data.target) { - if (strcmp(method, "set_active") == 0) + if (strcmp(method, "/set_active") == 0) return osc_handle_set_active(plugin, argv); - else if (strcmp(method, "set_drywet") == 0) + else if (strcmp(method, "/set_drywet") == 0) return osc_handle_set_drywet(plugin, argv); - else if (strcmp(method, "set_vol") == 0) + else if (strcmp(method, "/set_vol") == 0) return osc_handle_set_volume(plugin, argv); - else if (strcmp(method, "set_balance_left") == 0) + else if (strcmp(method, "/set_balance_left") == 0) return osc_handle_set_balance_left(plugin, argv); - else if (strcmp(method, "set_balance_right") == 0) + else if (strcmp(method, "/set_balance_right") == 0) return osc_handle_set_balance_right(plugin, argv); - else if (strcmp(method, "set_parameter") == 0) + else if (strcmp(method, "/set_parameter") == 0) return osc_handle_set_parameter(plugin, argv); - else if (strcmp(method, "set_program") == 0) + else if (strcmp(method, "/set_program") == 0) return osc_handle_set_program(plugin, argv); - else if (strcmp(method, "note_on") == 0) + else if (strcmp(method, "/note_on") == 0) return osc_handle_note_on(plugin, argv); - else if (strcmp(method, "note_off") == 0) + else if (strcmp(method, "/note_off") == 0) return osc_handle_note_off(plugin, argv); } @@ -362,39 +362,39 @@ int osc_handle_program(CarlaPlugin* plugin, lo_arg** argv) { qDebug("osc_handle_program()"); - uint32_t program_id = argv[0]->i; - - if (program_id < plugin->prog_count()) + if (plugin->type() == PLUGIN_DSSI) { - plugin->set_program(program_id, false, true, true, true); - return 0; - } - else - qCritical("osc_handle_program() - program_id '%i' out of bounds", program_id); + uint32_t bank_id = argv[0]->i; + uint32_t program_id = argv[1]->i; - return 1; -} + MidiProgramInfo midiprog = { false, 0, 0, nullptr }; -int osc_handle_program_as_midi(CarlaPlugin* plugin, lo_arg** argv) -{ - qDebug("osc_handle_program_as_midi()"); + for (uint32_t i=0; i < plugin->midiprog_count(); i++) + { + plugin->get_midi_program_info(&midiprog, i); + if (midiprog.bank == bank_id && midiprog.program == program_id) + { + plugin->set_midi_program(i, false, true, true, true); + return 0; + } + } - uint32_t bank_id = argv[0]->i; - uint32_t program_id = argv[1]->i; + qCritical("osc_handle_program() - failed to find respective bank/program '%i', '%i'", bank_id, program_id); + } + else + { - MidiProgramInfo midiprog = { false, 0, 0, nullptr }; + uint32_t program_id = argv[0]->i; - for (uint32_t i=0; i < plugin->midiprog_count(); i++) - { - plugin->get_midi_program_info(&midiprog, i); - if (midiprog.bank == bank_id && midiprog.program == program_id) + if (program_id < plugin->prog_count()) { - plugin->set_midi_program(i, false, true, true, true); + plugin->set_program(program_id, false, true, true, true); return 0; } + else + qCritical("osc_handle_program() - program_id '%i' out of bounds", program_id); } - qCritical("osc_handle_program_as_midi() - failed to find respective bank/program '%i', '%i'", bank_id, program_id); return 1; } @@ -580,15 +580,15 @@ void osc_send_lv2_event_transfer(OscData* osc_data, const char* type, const char } } -void osc_send_control(OscData* osc_data, int param, double value) +void osc_send_control(OscData* osc_data, int index, double value) { - qDebug("osc_send_control(%i, %f)", param, value); + qDebug("osc_send_control(%i, %f)", index, value); if (osc_data->target) { char target_path[strlen(osc_data->path)+9]; strcpy(target_path, osc_data->path); strcat(target_path, "/control"); - lo_send(osc_data->target, target_path, "if", param, value); + lo_send(osc_data->target, target_path, "if", index, value); } } diff --git a/src/carla-backend/carla_osc.h b/src/carla-backend/carla_osc.h index 400f880..7283d17 100644 --- a/src/carla-backend/carla_osc.h +++ b/src/carla-backend/carla_osc.h @@ -25,12 +25,6 @@ int osc_handle_register(lo_arg** argv, lo_address source); int osc_handle_unregister(); int osc_handle_update(CarlaPlugin* plugin, lo_arg** argv, lo_address source); -int osc_handle_configure(CarlaPlugin* plugin, lo_arg** argv); -int osc_handle_control(CarlaPlugin* plugin, lo_arg** argv); -int osc_handle_program(CarlaPlugin* plugin, lo_arg** argv); -int osc_handle_program_as_midi(CarlaPlugin* plugin, lo_arg** argv); -int osc_handle_midi_program(CarlaPlugin* plugin, lo_arg** argv); -int osc_handle_midi(CarlaPlugin* plugin, lo_arg** argv); int osc_handle_exiting(CarlaPlugin* plugin); int osc_handle_lv2_event_transfer(CarlaPlugin* plugin, lo_arg** argv); diff --git a/src/carla-backend/lv2.cpp b/src/carla-backend/lv2.cpp index 55f66a3..a9a1f15 100644 --- a/src/carla-backend/lv2.cpp +++ b/src/carla-backend/lv2.cpp @@ -2990,12 +2990,12 @@ public: CustomDataType dtype; - if (type == CARLA_URI_MAP_ID_ATOM_STRING) - dtype = CUSTOM_DATA_STRING; + if (type == CARLA_URI_MAP_ID_ATOM_CHUNK) + dtype = CUSTOM_DATA_CHUNK; else if (type == CARLA_URI_MAP_ID_ATOM_PATH) dtype = CUSTOM_DATA_PATH; - else if (type == CARLA_URI_MAP_ID_ATOM_CHUNK) - dtype = CUSTOM_DATA_CHUNK; + else if (type == CARLA_URI_MAP_ID_ATOM_STRING) + dtype = CUSTOM_DATA_STRING; else if (type >= CARLA_URI_MAP_ID_COUNT) dtype = CUSTOM_DATA_BINARY; else diff --git a/src/carla-backend/qtcreator/carla-backend.pro b/src/carla-backend/qtcreator/carla-backend.pro index 4460ad4..4093c8c 100644 --- a/src/carla-backend/qtcreator/carla-backend.pro +++ b/src/carla-backend/qtcreator/carla-backend.pro @@ -44,7 +44,8 @@ INCLUDEPATH = .. \ ../../carla-includes \ ../../carla-includes/vst -DEFINES = QTCREATOR_TEST __LINUX_JACK__ CARLA_ENGINE_JACK +DEFINES = QTCREATOR_TEST CARLA_ENGINE_JACK +#DEFINES = QTCREATOR_TEST __LINUX_JACK__ LIBS = ../../carla-lilv/carla_lilv.a -ldl #-lrtaudio QMAKE_CXXFLAGS *= -std=c++0x diff --git a/src/carla-bridge/carla_bridge_osc.cpp b/src/carla-bridge/carla_bridge_osc.cpp index 402c8f1..9e2ff80 100644 --- a/src/carla-bridge/carla_bridge_osc.cpp +++ b/src/carla-bridge/carla_bridge_osc.cpp @@ -18,19 +18,19 @@ #include "carla_bridge_osc.h" #include "carla_midi.h" -#include +#include #ifdef BUILD_BRIDGE_PLUGIN #include "carla_plugin.h" extern void plugin_bridge_show_gui(bool yesno); extern void plugin_bridge_quit(); -static const size_t plugin_name_len = 14; -static const char* const plugin_name = "plugin-bridge"; +static const size_t client_name_len = 13; +static const char* const client_name = "plugin-bridge"; #else #include "carla_bridge_ui.h" extern int osc_handle_lv2_event_transfer(lo_arg** argv); -static const size_t plugin_name_len = 14; -static const char* const plugin_name = "lv2-ui-bridge"; +static const size_t client_name_len = 13; +static const char* const client_name = "lv2-ui-bridge"; #endif const char* global_osc_server_path = nullptr; @@ -56,14 +56,9 @@ void osc_init(const char* osc_url) global_osc_server_thread = lo_server_thread_new(nullptr, osc_error_handler); // get our full OSC server path - char* this_thread_path = lo_server_thread_get_url(global_osc_server_thread); - - char osc_path_tmp[strlen(this_thread_path) + plugin_name_len + 1]; - strcpy(osc_path_tmp, this_thread_path); - strcat(osc_path_tmp, plugin_name); - free(this_thread_path); - - global_osc_server_path = strdup(osc_path_tmp); + char* osc_thread_path = lo_server_thread_get_url(global_osc_server_thread); + global_osc_server_path = strdup(QString("%1%2").arg(osc_thread_path).arg(client_name).toUtf8().constData()); + free(osc_thread_path); // register message handler and start OSC thread lo_server_thread_add_method(global_osc_server_thread, nullptr, nullptr, osc_message_handler, nullptr); @@ -111,35 +106,38 @@ void osc_error_handler(int num, const char* msg, const char* path) int osc_message_handler(const char* path, const char* types, lo_arg** argv, int argc, void* data, void* user_data) { +#if DEBUG qDebug("osc_message_handler(%s, %s, %p, %i, %p, %p)", path, types, argv, argc, data, user_data); +#endif - if (strlen(path) < plugin_name_len + 3) + // Check if message is for this client + if (strlen(path) <= client_name_len || strncmp(path+1, client_name, client_name_len) != 0) { - qWarning("Got invalid OSC path '%s'", path); + qWarning("osc_message_handler() - message not for this client -> '%s'' != '/%s/'", path, client_name); return 1; } char method[32] = { 0 }; - memcpy(method, path + plugin_name_len + 2, 32); + memcpy(method, path + client_name_len + 1, 32); - if (strcmp(method, "configure") == 0) + if (strcmp(method, "/configure") == 0) return osc_handle_configure(argv); - else if (strcmp(method, "control") == 0) + else if (strcmp(method, "/control") == 0) return osc_handle_control(argv); - else if (strcmp(method, "program") == 0) + else if (strcmp(method, "/program") == 0) return osc_handle_program(argv); - else if (strcmp(method, "midi_program") == 0) + else if (strcmp(method, "/midi_program") == 0) return osc_handle_midi_program(argv); - else if (strcmp(method, "midi") == 0) + else if (strcmp(method, "/midi") == 0) return osc_handle_midi(argv); - else if (strcmp(method, "show") == 0) + else if (strcmp(method, "/show") == 0) return osc_handle_show(); - else if (strcmp(method, "hide") == 0) + else if (strcmp(method, "/hide") == 0) return osc_handle_hide(); - else if (strcmp(method, "quit") == 0) + else if (strcmp(method, "/quit") == 0) return osc_handle_quit(); #if BRIDGE_LV2_GTK2 || BRIDGE_LV2_QT4 || BRIDGE_LV2_X11 - else if (strcmp(method, "lv2_event_transfer") == 0) + else if (strcmp(method, "/lv2_event_transfer") == 0) return osc_handle_lv2_event_transfer(argv); #endif #if 0 diff --git a/src/carla-bridge/qtcreator/carla-bridge-lv2-gtk2.pro b/src/carla-bridge/qtcreator/carla-bridge-lv2-gtk2.pro index e4e545f..385bab7 100644 --- a/src/carla-bridge/qtcreator/carla-bridge-lv2-gtk2.pro +++ b/src/carla-bridge/qtcreator/carla-bridge-lv2-gtk2.pro @@ -5,6 +5,7 @@ QT = core CONFIG = debug link_pkgconfig qt warn_on PKGCONFIG = liblo gtk+-2.0 +TARGET = carla-bridge-lv2-gtk2 TEMPLATE = app VERSION = 0.5.0 @@ -26,8 +27,6 @@ INCLUDEPATH = .. \ ../../carla-backend \ ../../carla-includes -TARGET = carla-bridge-lv2-gtk2 - DEFINES = BUILD_BRIDGE BUILD_BRIDGE_UI BRIDGE_LV2_GTK2 LIBS = ../../carla-lilv/carla_lilv.a -ldl diff --git a/src/carla-includes/carla_osc_includes.h b/src/carla-includes/carla_osc_includes.h index 74b842d..4299049 100644 --- a/src/carla-includes/carla_osc_includes.h +++ b/src/carla-includes/carla_osc_includes.h @@ -26,7 +26,14 @@ #define OSC_SEND_ARGS #define OSC_HANDLE_ARGS #else +#ifdef CARLA_BACKEND_NO_NAMESPACE class CarlaPlugin; +#else +namespace CarlaBackend { +class CarlaPlugin; +} +typedef CarlaBackend::CarlaPlugin CarlaPlugin; +#endif #define OSC_SEND_ARGS OscData*, #define OSC_HANDLE_ARGS CarlaPlugin*, #endif diff --git a/src/carla.py b/src/carla.py index f82503e..cccad71 100755 --- a/src/carla.py +++ b/src/carla.py @@ -3155,19 +3155,39 @@ class CarlaMainW(QMainWindow, ui_carla.Ui_CarlaMainW): unique_id = x_save_state_dict['UniqueID'] if ptype == "LADSPA": - if not x_ladspa_plugins: x_ladspa_plugins = toList(self.settings_db.value("Plugins/LADSPA", [])) + if not x_ladspa_plugins: + x_ladspa_plugins = [] + x_ladspa_plugins += toList(self.settings_db.value("Plugins/LADSPA_unix32", [])) + x_ladspa_plugins += toList(self.settings_db.value("Plugins/LADSPA_unix64", [])) + x_ladspa_plugins += toList(self.settings_db.value("Plugins/LADSPA_win32", [])) + x_ladspa_plugins += toList(self.settings_db.value("Plugins/LADSPA_win64", [])) x_plugins = x_ladspa_plugins elif ptype == "DSSI": - if not x_dssi_plugins: x_dssi_plugins = toList(self.settings_db.value("Plugins/DSSI", [])) + if not x_dssi_plugins: + x_dssi_plugins = [] + x_dssi_plugins += toList(self.settings_db.value("Plugins/DSSI_unix32", [])) + x_dssi_plugins += toList(self.settings_db.value("Plugins/DSSI_unix64", [])) + x_dssi_plugins += toList(self.settings_db.value("Plugins/DSSI_win32", [])) + x_dssi_plugins += toList(self.settings_db.value("Plugins/DSSI_win64", [])) x_plugins = x_dssi_plugins elif ptype == "LV2": - if not x_lv2_plugins: x_lv2_plugins = toList(self.settings_db.value("Plugins/LV2", [])) + if not x_lv2_plugins: + x_lv2_plugins = [] + x_lv2_plugins += toList(self.settings_db.value("Plugins/LV2_unix32", [])) + x_lv2_plugins += toList(self.settings_db.value("Plugins/LV2_unix64", [])) + x_lv2_plugins += toList(self.settings_db.value("Plugins/LV2_win32", [])) + x_lv2_plugins += toList(self.settings_db.value("Plugins/LV2_win64", [])) x_plugins = x_lv2_plugins elif ptype == "VST": - if not x_vst_plugins: x_vst_plugins = toList(self.settings_db.value("Plugins/VST", [])) + if not x_vst_plugins: + x_vst_plugins = [] + x_vst_plugins += toList(self.settings_db.value("Plugins/VST_unix32", [])) + x_vst_plugins += toList(self.settings_db.value("Plugins/VST_unix64", [])) + x_vst_plugins += toList(self.settings_db.value("Plugins/VST_win32", [])) + x_vst_plugins += toList(self.settings_db.value("Plugins/VST_win64", [])) x_plugins = x_vst_plugins elif ptype == "GIG": @@ -3183,6 +3203,7 @@ class CarlaMainW(QMainWindow, ui_carla.Ui_CarlaMainW): x_plugins = x_sfz_plugins else: + print("load_project() - ptype '%s' not recognized", ptype) x_failed_plugins.append(x_save_state_dict['Name']) continue @@ -3279,6 +3300,8 @@ class CarlaMainW(QMainWindow, ui_carla.Ui_CarlaMainW): else: plugin = None + print(plugin, ptype, len(x_plugins), plugin_l) + if plugin: btype = plugin['build'] ptype = plugin['type'] @@ -3300,8 +3323,7 @@ class CarlaMainW(QMainWindow, ui_carla.Ui_CarlaMainW): if len(x_failed_plugins) > 0: text = self.tr("The following plugins were not found or failed to initialize:\n") for plugin in x_failed_plugins: - text += plugin - text += "\n" + text += " - %s\n" % plugin self.statusBar().showMessage("State file loaded with errors") QMessageBox.critical(self, self.tr("Error"), text)