diff --git a/c++/carla-backend/carla-backend.pro b/c++/carla-backend/carla-backend.pro index 7f4e5cc..99227a2 100644 --- a/c++/carla-backend/carla-backend.pro +++ b/c++/carla-backend/carla-backend.pro @@ -28,6 +28,7 @@ SOURCES = \ HEADERS = \ carla_backend.hpp \ + carla_backend_utils.hpp \ carla_backend_standalone.hpp INCLUDEPATH = . \ diff --git a/c++/carla-backend/carla_backend.hpp b/c++/carla-backend/carla_backend.hpp index 2036a65..90c82ac 100644 --- a/c++/carla-backend/carla_backend.hpp +++ b/c++/carla-backend/carla_backend.hpp @@ -267,106 +267,88 @@ enum OptionsType { OPTION_OSC_UI_TIMEOUT = 10, /*! - * Set LADSPA_PATH environment variable.\n - * Default undefined. - */ - OPTION_PATH_LADSPA = 11, - - /*! - * Set DSSI_PATH environment variable.\n - * Default undefined. - */ - OPTION_PATH_DSSI = 12, - - /*! - * Set LV2_PATH environment variable.\n - * Default undefined. - */ - OPTION_PATH_LV2 = 13, - - /*! - * Set VST_PATH environment variable.\n - * Default undefined. + * Set path to the POSIX 32bit plugin bridge executable.\n + * Default unset. */ - OPTION_PATH_VST = 14, + OPTION_PATH_BRIDGE_POSIX32 = 11, /*! - * Set GIG_PATH environment variable.\n - * Default undefined. + * Set path to the POSIX 64bit plugin bridge executable.\n + * Default unset. */ - OPTION_PATH_GIG = 15, + OPTION_PATH_BRIDGE_POSIX64 = 12, /*! - * Set SF2_PATH environment variable.\n - * Default undefined. + * Set path to the Windows 32bit plugin bridge executable.\n + * Default unset. */ - OPTION_PATH_SF2 = 16, + OPTION_PATH_BRIDGE_WIN32 = 13, /*! - * Set SFZ_PATH environment variable.\n - * Default undefined. + * Set path to the Windows 64bit plugin bridge executable.\n + * Default unset. */ - OPTION_PATH_SFZ = 17, + OPTION_PATH_BRIDGE_WIN64 = 14, /*! - * Set path to the POSIX 32bit plugin bridge executable.\n + * Set path to the LV2 Gtk2 UI bridge executable.\n * Default unset. */ - OPTION_PATH_BRIDGE_POSIX32 = 18, + OPTION_PATH_BRIDGE_LV2_GTK2 = 15, /*! - * Set path to the POSIX 64bit plugin bridge executable.\n + * Set path to the LV2 Gtk3 UI bridge executable.\n * Default unset. */ - OPTION_PATH_BRIDGE_POSIX64 = 19, + OPTION_PATH_BRIDGE_LV2_GTK3 = 16, /*! - * Set path to the Windows 32bit plugin bridge executable.\n + * Set path to the LV2 Qt4 UI bridge executable.\n * Default unset. */ - OPTION_PATH_BRIDGE_WIN32 = 20, + OPTION_PATH_BRIDGE_LV2_QT4 = 17, /*! - * Set path to the Windows 64bit plugin bridge executable.\n + * Set path to the LV2 Qt5 UI bridge executable.\n * Default unset. */ - OPTION_PATH_BRIDGE_WIN64 = 21, + OPTION_PATH_BRIDGE_LV2_QT5 = 18, /*! - * Set path to the LV2 Gtk2 UI bridge executable.\n + * Set path to the LV2 Cocoa UI bridge executable.\n * Default unset. */ - OPTION_PATH_BRIDGE_LV2_GTK2 = 22, + OPTION_PATH_BRIDGE_LV2_COCOA = 19, /*! - * Set path to the LV2 Gtk3 UI bridge executable.\n + * Set path to the LV2 Windows UI bridge executable.\n * Default unset. */ - OPTION_PATH_BRIDGE_LV2_GTK3 = 23, + OPTION_PATH_BRIDGE_LV2_WINDOWS = 20, /*! - * Set path to the LV2 Qt4 UI bridge executable.\n + * Set path to the LV2 X11 UI bridge executable.\n * Default unset. */ - OPTION_PATH_BRIDGE_LV2_QT4 = 24, + OPTION_PATH_BRIDGE_LV2_X11 = 21, /*! - * Set path to the LV2 X11 UI bridge executable.\n + * Set path to the VST Cocoa UI bridge executable.\n * Default unset. */ - OPTION_PATH_BRIDGE_LV2_X11 = 25, + OPTION_PATH_BRIDGE_VST_COCOA = 22, /*! * Set path to the VST HWND UI bridge executable.\n * Default unset. */ - OPTION_PATH_BRIDGE_VST_HWND = 26, + OPTION_PATH_BRIDGE_VST_HWND = 23, /*! * Set path to the VST X11 UI bridge executable.\n * Default unset. */ - OPTION_PATH_BRIDGE_VST_X11 = 27 + OPTION_PATH_BRIDGE_VST_X11 = 24 }; /*! diff --git a/c++/carla-backend/carla_backend_standalone.cpp b/c++/carla-backend/carla_backend_standalone.cpp index 1e748ec..ec0b91d 100644 --- a/c++/carla-backend/carla_backend_standalone.cpp +++ b/c++/carla-backend/carla_backend_standalone.cpp @@ -186,12 +186,16 @@ bool engine_init(const char* driver_name, const char* client_name) standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_POSIX64, 0, standalone.options.bridge_posix64); standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_WIN32, 0, standalone.options.bridge_win32); standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_WIN64, 0, standalone.options.bridge_win64); - standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_LV2_GTK2, 0, standalone.options.bridge_lv2gtk2); - standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_LV2_GTK3, 0, standalone.options.bridge_lv2gtk3); - standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_LV2_QT4, 0, standalone.options.bridge_lv2qt4); - standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_LV2_X11, 0, standalone.options.bridge_lv2qt4); - standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_VST_HWND, 0, standalone.options.bridge_vsthwnd); - standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_VST_X11, 0, standalone.options.bridge_vstx11); + standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_LV2_GTK2, 0, standalone.options.bridge_lv2gtk2); + standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_LV2_GTK3, 0, standalone.options.bridge_lv2gtk3); + standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_LV2_QT4, 0, standalone.options.bridge_lv2qt4); + standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_LV2_QT5, 0, standalone.options.bridge_lv2qt5); + standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_LV2_COCOA, 0, standalone.options.bridge_lv2cocoa); + standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_LV2_WINDOWS, 0, standalone.options.bridge_lv2win); + standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_LV2_X11, 0, standalone.options.bridge_lv2qt4); + standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_VST_COCOA, 0, standalone.options.bridge_vstcocoa); + standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_VST_HWND, 0, standalone.options.bridge_vsthwnd); + standalone.engine->setOption(CarlaBackend::OPTION_PATH_BRIDGE_VST_X11, 0, standalone.options.bridge_vstx11); if (standalone.procName.isNotEmpty()) standalone.engine->setOption(CarlaBackend::OPTION_PROCESS_NAME, 0, standalone.procName); @@ -1493,14 +1497,8 @@ void set_option(CarlaBackend::OptionsType option, int value, const char* value_s qDebug("CarlaBackendStandalone::set_option(%s, %i, \"%s\")", CarlaBackend::OptionsType2Str(option), value, value_str); if (standalone.engine) - { standalone.engine->setOption(option, value, value_str); - if (option >= CarlaBackend::OPTION_PATH_LADSPA && option <= CarlaBackend::OPTION_PATH_SFZ) - // no need to set twice - return; - } - switch (option) { case CarlaBackend::OPTION_PROCESS_NAME: @@ -1550,28 +1548,6 @@ void set_option(CarlaBackend::OptionsType option, int value, const char* value_s standalone.options.oscUiTimeout = value; break; - case CarlaBackend::OPTION_PATH_LADSPA: - carla_setenv("LADSPA_PATH", value_str); - break; - case CarlaBackend::OPTION_PATH_DSSI: - carla_setenv("DSSI_PATH", value_str); - break; - case CarlaBackend::OPTION_PATH_LV2: - carla_setenv("LV2_PATH", value_str); - break; - case CarlaBackend::OPTION_PATH_VST: - carla_setenv("VST_PATH", value_str); - break; - case CarlaBackend::OPTION_PATH_GIG: - carla_setenv("GIG_PATH", value_str); - break; - case CarlaBackend::OPTION_PATH_SF2: - carla_setenv("SF2_PATH", value_str); - break; - case CarlaBackend::OPTION_PATH_SFZ: - carla_setenv("SFZ_PATH", value_str); - break; - case CarlaBackend::OPTION_PATH_BRIDGE_POSIX32: standalone.options.bridge_posix32 = value_str; break; @@ -1584,6 +1560,7 @@ void set_option(CarlaBackend::OptionsType option, int value, const char* value_s case CarlaBackend::OPTION_PATH_BRIDGE_WIN64: standalone.options.bridge_win64 = value_str; break; + case CarlaBackend::OPTION_PATH_BRIDGE_LV2_GTK2: standalone.options.bridge_lv2gtk2 = value_str; break; @@ -1593,9 +1570,22 @@ void set_option(CarlaBackend::OptionsType option, int value, const char* value_s case CarlaBackend::OPTION_PATH_BRIDGE_LV2_QT4: standalone.options.bridge_lv2qt4 = value_str; break; + case CarlaBackend::OPTION_PATH_BRIDGE_LV2_QT5: + standalone.options.bridge_lv2qt5 = value_str; + break; + case CarlaBackend::OPTION_PATH_BRIDGE_LV2_COCOA: + standalone.options.bridge_lv2cocoa = value_str; + break; + case CarlaBackend::OPTION_PATH_BRIDGE_LV2_WINDOWS: + standalone.options.bridge_lv2win = value_str; + break; case CarlaBackend::OPTION_PATH_BRIDGE_LV2_X11: standalone.options.bridge_lv2x11 = value_str; break; + + case CarlaBackend::OPTION_PATH_BRIDGE_VST_COCOA: + standalone.options.bridge_vstcocoa = value_str; + break; case CarlaBackend::OPTION_PATH_BRIDGE_VST_HWND: standalone.options.bridge_vsthwnd = value_str; break; diff --git a/c++/carla-backend/carla_backend_utils.hpp b/c++/carla-backend/carla_backend_utils.hpp index 979d8a2..3fde77e 100644 --- a/c++/carla-backend/carla_backend_utils.hpp +++ b/c++/carla-backend/carla_backend_utils.hpp @@ -21,10 +21,16 @@ #include "carla_backend.hpp" #include "carla_utils.hpp" -#include - CARLA_BACKEND_START_NAMESPACE +/*! + * @defgroup CarlaBackendUtils Carla Backend Utils + * + * Carla Backend Utils + * + * @{ + */ + static inline const char* BinaryType2Str(const BinaryType& type) { @@ -229,20 +235,6 @@ const char* OptionsType2Str(const OptionsType& type) return "OPTION_PREFER_UI_BRIDGES"; case OPTION_OSC_UI_TIMEOUT: return "OPTION_OSC_UI_TIMEOUT"; - case OPTION_PATH_LADSPA: - return "OPTION_PATH_LADSPA"; - case OPTION_PATH_DSSI: - return "OPTION_PATH_DSSI"; - case OPTION_PATH_LV2: - return "OPTION_PATH_LV2"; - case OPTION_PATH_VST: - return "OPTION_PATH_VST"; - case OPTION_PATH_GIG: - return "OPTION_PATH_GIG"; - case OPTION_PATH_SF2: - return "OPTION_PATH_SF2"; - case OPTION_PATH_SFZ: - return "OPTION_PATH_SFZ"; case OPTION_PATH_BRIDGE_POSIX32: return "OPTION_PATH_BRIDGE_POSIX32"; case OPTION_PATH_BRIDGE_POSIX64: @@ -257,8 +249,16 @@ const char* OptionsType2Str(const OptionsType& type) return "OPTION_PATH_BRIDGE_LV2_GTK3"; case OPTION_PATH_BRIDGE_LV2_QT4: return "OPTION_PATH_BRIDGE_LV2_QT4"; + case OPTION_PATH_BRIDGE_LV2_QT5: + return "OPTION_PATH_BRIDGE_LV2_QT5"; + case OPTION_PATH_BRIDGE_LV2_COCOA: + return "OPTION_PATH_BRIDGE_LV2_COCOA"; + case OPTION_PATH_BRIDGE_LV2_WINDOWS: + return "OPTION_PATH_BRIDGE_LV2_WINDOWS"; case OPTION_PATH_BRIDGE_LV2_X11: return "OPTION_PATH_BRIDGE_LV2_X11"; + case OPTION_PATH_BRIDGE_VST_COCOA: + return "OPTION_PATH_BRIDGE_VST_COCOA"; case OPTION_PATH_BRIDGE_VST_HWND: return "OPTION_PATH_BRIDGE_VST_HWND"; case OPTION_PATH_BRIDGE_VST_X11: @@ -515,6 +515,8 @@ PluginCategory getPluginCategoryFromName(const char* const name) return PLUGIN_CATEGORY_NONE; } +/**@}*/ + CARLA_BACKEND_END_NAMESPACE #endif // CARLA_BACKEND_UTILS_HPP diff --git a/c++/carla-engine/carla_engine.cpp b/c++/carla-engine/carla_engine.cpp index 9cb29f9..1be4cd2 100644 --- a/c++/carla-engine/carla_engine.cpp +++ b/c++/carla-engine/carla_engine.cpp @@ -1127,28 +1127,6 @@ void CarlaEngine::setOption(const OptionsType option, const int value, const cha options.oscUiTimeout = value; break; - case OPTION_PATH_LADSPA: - carla_setenv("LADSPA_PATH", valueStr); - break; - case OPTION_PATH_DSSI: - carla_setenv("DSSI_PATH", valueStr); - break; - case OPTION_PATH_LV2: - carla_setenv("LV2_PATH", valueStr); - break; - case OPTION_PATH_VST: - carla_setenv("VST_PATH", valueStr); - break; - case OPTION_PATH_GIG: - carla_setenv("GIG_PATH", valueStr); - break; - case OPTION_PATH_SF2: - carla_setenv("SF2_PATH", valueStr); - break; - case OPTION_PATH_SFZ: - carla_setenv("SFZ_PATH", valueStr); - break; - case OPTION_PATH_BRIDGE_POSIX32: options.bridge_posix32 = valueStr; break; @@ -1161,6 +1139,7 @@ void CarlaEngine::setOption(const OptionsType option, const int value, const cha case OPTION_PATH_BRIDGE_WIN64: options.bridge_win64 = valueStr; break; + case OPTION_PATH_BRIDGE_LV2_GTK2: options.bridge_lv2gtk2 = valueStr; break; @@ -1170,9 +1149,22 @@ void CarlaEngine::setOption(const OptionsType option, const int value, const cha case OPTION_PATH_BRIDGE_LV2_QT4: options.bridge_lv2qt4 = valueStr; break; + case OPTION_PATH_BRIDGE_LV2_QT5: + options.bridge_lv2qt5 = valueStr; + break; + case OPTION_PATH_BRIDGE_LV2_COCOA: + options.bridge_lv2cocoa = valueStr; + break; + case OPTION_PATH_BRIDGE_LV2_WINDOWS: + options.bridge_lv2win = valueStr; + break; case OPTION_PATH_BRIDGE_LV2_X11: options.bridge_lv2x11 = valueStr; break; + + case OPTION_PATH_BRIDGE_VST_COCOA: + options.bridge_vstcocoa = valueStr; + break; case OPTION_PATH_BRIDGE_VST_HWND: options.bridge_vsthwnd = valueStr; break; diff --git a/c++/carla-engine/carla_engine.hpp b/c++/carla-engine/carla_engine.hpp index 1bf6ce8..32f3995 100644 --- a/c++/carla-engine/carla_engine.hpp +++ b/c++/carla-engine/carla_engine.hpp @@ -232,7 +232,11 @@ struct CarlaEngineOptions { CarlaString bridge_lv2gtk2; CarlaString bridge_lv2gtk3; CarlaString bridge_lv2qt4; + CarlaString bridge_lv2qt5; + CarlaString bridge_lv2cocoa; + CarlaString bridge_lv2win; CarlaString bridge_lv2x11; + CarlaString bridge_vstcocoa; CarlaString bridge_vsthwnd; CarlaString bridge_vstx11; diff --git a/doc/Carla-TODO b/doc/Carla-TODO index 81f027e..30f62a1 100644 --- a/doc/Carla-TODO +++ b/doc/Carla-TODO @@ -1,7 +1,6 @@ # Carla TODO GENERAL: - - add lv2-cocoa+hwmd ui paths - add direct program access on ui-dialogs (needed for standalone bridges), maybe add extra buttons too - implement osc-based uis in bridge mode - implement midi-learn (new dialog) diff --git a/src/carla.py b/src/carla.py index d66c111..b2ab443 100755 --- a/src/carla.py +++ b/src/carla.py @@ -253,13 +253,6 @@ class SearchPluginsThread(QThread): def run(self): global LADSPA_PATH, DSSI_PATH, LV2_PATH, VST_PATH, GIG_PATH, SF2_PATH, SFZ_PATH - os.environ['LADSPA_PATH'] = splitter.join(LADSPA_PATH) - os.environ['DSSI_PATH'] = splitter.join(DSSI_PATH) - os.environ['LV2_PATH'] = splitter.join(LV2_PATH) - os.environ['VST_PATH'] = splitter.join(VST_PATH) - os.environ['GIG_PATH'] = splitter.join(GIG_PATH) - os.environ['SF2_PATH'] = splitter.join(SF2_PATH) - os.environ['SFZ_PATH'] = splitter.join(SFZ_PATH) self.blacklist = toList(self.settings_db.value("Plugins/Blacklisted", [])) @@ -1274,33 +1267,6 @@ class CarlaMainW(QMainWindow, ui_carla.Ui_CarlaMainW): Carla.Host.set_option(OPTION_PREFER_UI_BRIDGES, preferUiBridges, "") Carla.Host.set_option(OPTION_OSC_UI_TIMEOUT, oscUiTimeout, "") - # --------------------------------------------- - # bridge paths - - if carla_bridge_posix32: - Carla.Host.set_option(OPTION_PATH_BRIDGE_POSIX32, 0, carla_bridge_posix32) - - if carla_bridge_posix64: - Carla.Host.set_option(OPTION_PATH_BRIDGE_POSIX64, 0, carla_bridge_posix64) - - if carla_bridge_win32: - Carla.Host.set_option(OPTION_PATH_BRIDGE_WIN32, 0, carla_bridge_win32) - - if carla_bridge_win64: - Carla.Host.set_option(OPTION_PATH_BRIDGE_WIN64, 0, carla_bridge_win64) - - if carla_bridge_lv2_gtk2: - Carla.Host.set_option(OPTION_PATH_BRIDGE_LV2_GTK2, 0, carla_bridge_lv2_gtk2) - - if carla_bridge_lv2_qt4: - Carla.Host.set_option(OPTION_PATH_BRIDGE_LV2_QT4, 0, carla_bridge_lv2_qt4) - - if carla_bridge_lv2_x11: - Carla.Host.set_option(OPTION_PATH_BRIDGE_LV2_X11, 0, carla_bridge_lv2_x11) - - if carla_bridge_vst_x11: - Carla.Host.set_option(OPTION_PATH_BRIDGE_VST_X11, 0, carla_bridge_vst_x11) - # --------------------------------------------- # start @@ -1980,15 +1946,13 @@ class CarlaMainW(QMainWindow, ui_carla.Ui_CarlaMainW): # --------------------------------------------- # plugin checks - disableChecks = self.settings.value("Engine/DisableChecks", bool(not WINDOWS), type=bool) + disableChecks = self.settings.value("Engine/DisableChecks", False, type=bool) if disableChecks: os.environ["CARLA_DISCOVERY_NO_PROCESSING_CHECKS"] = "true" - else: - try: - os.environ.pop("CARLA_DISCOVERY_NO_PROCESSING_CHECKS") - except: - pass + + elif os.getenv("CARLA_DISCOVERY_NO_PROCESSING_CHECKS"): + os.environ.pop("CARLA_DISCOVERY_NO_PROCESSING_CHECKS") # --------------------------------------------- # plugin paths @@ -2002,13 +1966,13 @@ class CarlaMainW(QMainWindow, ui_carla.Ui_CarlaMainW): SF2_PATH = toList(self.settings.value("Paths/SF2", SF2_PATH)) SFZ_PATH = toList(self.settings.value("Paths/SFZ", SFZ_PATH)) - Carla.Host.set_option(OPTION_PATH_LADSPA, 0, splitter.join(LADSPA_PATH)) - Carla.Host.set_option(OPTION_PATH_DSSI, 0, splitter.join(DSSI_PATH)) - Carla.Host.set_option(OPTION_PATH_LV2, 0, splitter.join(LV2_PATH)) - Carla.Host.set_option(OPTION_PATH_VST, 0, splitter.join(VST_PATH)) - Carla.Host.set_option(OPTION_PATH_GIG, 0, splitter.join(GIG_PATH)) - Carla.Host.set_option(OPTION_PATH_SF2, 0, splitter.join(SF2_PATH)) - Carla.Host.set_option(OPTION_PATH_SFZ, 0, splitter.join(SFZ_PATH)) + os.environ["LADSPA_PATH"] = splitter.join(LADSPA_PATH) + os.environ["DSSI_PATH"] = splitter.join(DSSI_PATH) + os.environ["LV2_PATH"] = splitter.join(LV2_PATH) + os.environ["VST_PATH"] = splitter.join(VST_PATH) + os.environ["GIG_PATH"] = splitter.join(GIG_PATH) + os.environ["SF2_PATH"] = splitter.join(SF2_PATH) + os.environ["SFZ_PATH"] = splitter.join(SFZ_PATH) def timerEvent(self, event): if event.timerId() == self.TIMER_GUI_STUFF: @@ -2016,9 +1980,11 @@ class CarlaMainW(QMainWindow, ui_carla.Ui_CarlaMainW): if pwidget: pwidget.check_gui_stuff() if self.m_engine_started and self.m_pluginCount > 0: Carla.Host.idle_guis() + elif event.timerId() == self.TIMER_GUI_STUFF2: for pwidget in self.m_plugin_list: if pwidget: pwidget.check_gui_stuff2() + QMainWindow.timerEvent(self, event) def closeEvent(self, event): @@ -2103,10 +2069,57 @@ if __name__ == '__main__': elif os.path.exists(argument): projectFilename = argument + # Init backend Carla.Host = Host(libPrefix) Carla.Host.set_callback_function(callback_function) Carla.Host.set_option(OPTION_PROCESS_NAME, 0, "carla") + # Set bridge paths + if carla_bridge_posix32: + Carla.Host.set_option(OPTION_PATH_BRIDGE_POSIX32, 0, carla_bridge_posix32) + + if carla_bridge_posix64: + Carla.Host.set_option(OPTION_PATH_BRIDGE_POSIX64, 0, carla_bridge_posix64) + + if carla_bridge_win32: + Carla.Host.set_option(OPTION_PATH_BRIDGE_WIN32, 0, carla_bridge_win32) + + if carla_bridge_win64: + Carla.Host.set_option(OPTION_PATH_BRIDGE_WIN64, 0, carla_bridge_win64) + + if WINDOWS: + if carla_bridge_lv2_windows: + Carla.Host.set_option(OPTION_PATH_BRIDGE_LV2_WINDOWS, 0, carla_bridge_lv2_windows) + + if carla_bridge_vst_hwnd: + Carla.Host.set_option(OPTION_PATH_BRIDGE_VST_HWND, 0, carla_bridge_vst_hwnd) + + elif MACOS: + if carla_bridge_lv2_cocoa: + Carla.Host.set_option(OPTION_PATH_BRIDGE_LV2_COCOA, 0, carla_bridge_lv2_cocoa) + + if carla_bridge_vst_cocoa: + Carla.Host.set_option(OPTION_PATH_BRIDGE_VST_COCOA, 0, carla_bridge_vst_cocoa) + + else: + if carla_bridge_lv2_gtk2: + Carla.Host.set_option(OPTION_PATH_BRIDGE_LV2_GTK2, 0, carla_bridge_lv2_gtk2) + + if carla_bridge_lv2_gtk3: + Carla.Host.set_option(OPTION_PATH_BRIDGE_LV2_GTK3, 0, carla_bridge_lv2_gtk3) + + if carla_bridge_lv2_qt4: + Carla.Host.set_option(OPTION_PATH_BRIDGE_LV2_QT4, 0, carla_bridge_lv2_qt4) + + if carla_bridge_lv2_qt5: + Carla.Host.set_option(OPTION_PATH_BRIDGE_LV2_QT5, 0, carla_bridge_lv2_qt5) + + if carla_bridge_lv2_x11: + Carla.Host.set_option(OPTION_PATH_BRIDGE_LV2_X11, 0, carla_bridge_lv2_x11) + + if carla_bridge_vst_x11: + Carla.Host.set_option(OPTION_PATH_BRIDGE_VST_X11, 0, carla_bridge_vst_x11) + # Set available drivers driverCount = Carla.Host.get_engine_driver_count() driverList = [] @@ -2125,6 +2138,7 @@ if __name__ == '__main__': # Show GUI Carla.gui.show() + # Load project file if set if projectFilename: Carla.gui.m_project_filename = projectFilename Carla.gui.loadProjectLater() diff --git a/src/carla_backend.py b/src/carla_backend.py index 2f909e6..f6e7d00 100644 --- a/src/carla_backend.py +++ b/src/carla_backend.py @@ -252,12 +252,17 @@ carla_bridge_posix64 = "" carla_bridge_win32 = "" carla_bridge_win64 = "" -carla_bridge_lv2_gtk2 = "" -carla_bridge_lv2_gtk3 = "" -carla_bridge_lv2_qt4 = "" -carla_bridge_lv2_x11 = "" -carla_bridge_vst_hwnd = "" -carla_bridge_vst_x11 = "" +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 = "carla_backend.dll" @@ -291,33 +296,6 @@ else: carla_library_path = os.path.join(p, "carla", carla_libname) break -# find carla_discovery_native -if os.path.exists(os.path.join(CWDpp, "carla-discovery", "carla-discovery-native")): - carla_discovery_native = os.path.join(CWDpp, "carla-discovery", "carla-discovery-native") -else: - for p in PATH: - if os.path.exists(os.path.join(p, "carla-discovery-native")): - carla_discovery_native = os.path.join(p, "carla-discovery-native") - break - -# find carla_discovery_posix32 -if os.path.exists(os.path.join(CWDpp, "carla-discovery", "carla-discovery-posix32")): - carla_discovery_posix32 = os.path.join(CWDpp, "carla-discovery", "carla-discovery-posix32") -else: - for p in PATH: - if os.path.exists(os.path.join(p, "carla-discovery-posix32")): - carla_discovery_posix32 = os.path.join(p, "carla-discovery-posix32") - break - -# find carla_discovery_posix64 -if os.path.exists(os.path.join(CWDpp, "carla-discovery", "carla-discovery-posix64")): - carla_discovery_posix64 = os.path.join(CWDpp, "carla-discovery", "carla-discovery-posix64") -else: - for p in PATH: - if os.path.exists(os.path.join(p, "carla-discovery-posix64")): - carla_discovery_posix64 = os.path.join(p, "carla-discovery-posix64") - break - # find carla_discovery_win32 if os.path.exists(os.path.join(CWDpp, "carla-discovery", "carla-discovery-win32.exe")): carla_discovery_win32 = os.path.join(CWDpp, "carla-discovery", "carla-discovery-win32.exe") @@ -336,24 +314,6 @@ else: carla_discovery_win64 = os.path.join(p, "carla-discovery-win64.exe") break -# find carla_bridge_posix32 -if os.path.exists(os.path.join(CWDpp, "carla-bridge", "carla-bridge-posix32")): - carla_bridge_posix32 = os.path.join(CWDpp, "carla-bridge", "carla-bridge-posix32") -else: - for p in PATH: - if os.path.exists(os.path.join(p, "carla-bridge-posix32")): - carla_bridge_posix32 = os.path.join(p, "carla-bridge-posix32") - break - -# find carla_bridge_posix64 -if os.path.exists(os.path.join(CWDpp, "carla-bridge", "carla-bridge-posix64")): - carla_bridge_posix64 = os.path.join(CWDpp, "carla-bridge", "carla-bridge-posix64") -else: - for p in PATH: - if os.path.exists(os.path.join(p, "carla-bridge-posix64")): - carla_bridge_posix64 = os.path.join(p, "carla-bridge-posix64") - break - # find carla_bridge_win32 if os.path.exists(os.path.join(CWDpp, "carla-bridge", "carla-bridge-win32.exe")): carla_bridge_win32 = os.path.join(CWDpp, "carla-bridge", "carla-bridge-win32.exe") @@ -372,59 +332,145 @@ else: carla_bridge_win64 = os.path.join(p, "carla-bridge-win64.exe") break -# find carla_bridge_lv2_gtk2 -if os.path.exists(os.path.join(CWDpp, "carla-bridge", "carla-bridge-lv2-gtk2")): - carla_bridge_lv2_gtk2 = os.path.join(CWDpp, "carla-bridge", "carla-bridge-lv2-gtk2") -else: - for p in PATH: - if os.path.exists(os.path.join(p, "carla-bridge-lv2-gtk2")): - carla_bridge_lv2_gtk2 = os.path.join(p, "carla-bridge-lv2-gtk2") - break - -# find carla_bridge_lv2_gtk3 -if os.path.exists(os.path.join(CWDpp, "carla-bridge", "carla-bridge-lv2-gtk3")): - carla_bridge_lv2_gtk3 = os.path.join(CWDpp, "carla-bridge", "carla-bridge-lv2-gtk3") -else: - for p in PATH: - if os.path.exists(os.path.join(p, "carla-bridge-lv2-gtk3")): - carla_bridge_lv2_gtk3 = os.path.join(p, "carla-bridge-lv2-gtk3") - break - -# find carla_bridge_lv2_qt4 -if os.path.exists(os.path.join(CWDpp, "carla-bridge", "carla-bridge-lv2-qt4")): - carla_bridge_lv2_qt4 = os.path.join(CWDpp, "carla-bridge", "carla-bridge-lv2-qt4") -else: - for p in PATH: - if os.path.exists(os.path.join(p, "carla-bridge-lv2-qt4")): - carla_bridge_lv2_qt4 = os.path.join(p, "carla-bridge-lv2-qt4") - break +if not WINDOWS: + # find carla_discovery_native + if os.path.exists(os.path.join(CWDpp, "carla-discovery", "carla-discovery-native")): + carla_discovery_native = os.path.join(CWDpp, "carla-discovery", "carla-discovery-native") + else: + for p in PATH: + if os.path.exists(os.path.join(p, "carla-discovery-native")): + carla_discovery_native = os.path.join(p, "carla-discovery-native") + break + + # find carla_discovery_posix32 + if os.path.exists(os.path.join(CWDpp, "carla-discovery", "carla-discovery-posix32")): + carla_discovery_posix32 = os.path.join(CWDpp, "carla-discovery", "carla-discovery-posix32") + else: + for p in PATH: + if os.path.exists(os.path.join(p, "carla-discovery-posix32")): + carla_discovery_posix32 = os.path.join(p, "carla-discovery-posix32") + break + + # find carla_discovery_posix64 + if os.path.exists(os.path.join(CWDpp, "carla-discovery", "carla-discovery-posix64")): + carla_discovery_posix64 = os.path.join(CWDpp, "carla-discovery", "carla-discovery-posix64") + else: + for p in PATH: + if os.path.exists(os.path.join(p, "carla-discovery-posix64")): + carla_discovery_posix64 = os.path.join(p, "carla-discovery-posix64") + break + + # find carla_bridge_posix32 + if os.path.exists(os.path.join(CWDpp, "carla-bridge", "carla-bridge-posix32")): + carla_bridge_posix32 = os.path.join(CWDpp, "carla-bridge", "carla-bridge-posix32") + else: + for p in PATH: + if os.path.exists(os.path.join(p, "carla-bridge-posix32")): + carla_bridge_posix32 = os.path.join(p, "carla-bridge-posix32") + break + + # find carla_bridge_posix64 + if os.path.exists(os.path.join(CWDpp, "carla-bridge", "carla-bridge-posix64")): + carla_bridge_posix64 = os.path.join(CWDpp, "carla-bridge", "carla-bridge-posix64") + else: + for p in PATH: + if os.path.exists(os.path.join(p, "carla-bridge-posix64")): + carla_bridge_posix64 = os.path.join(p, "carla-bridge-posix64") + break -# find carla_bridge_lv2_x11 -if os.path.exists(os.path.join(CWDpp, "carla-bridge", "carla-bridge-lv2-x11")): - carla_bridge_lv2_x11 = os.path.join(CWDpp, "carla-bridge", "carla-bridge-lv2-x11") -else: - for p in PATH: - if os.path.exists(os.path.join(p, "carla-bridge-lv2-x11")): - carla_bridge_lv2_x11 = os.path.join(p, "carla-bridge-lv2-x11") - break +if WINDOWS: + # find carla_bridge_lv2_windows + if os.path.exists(os.path.join(CWDpp, "carla-bridge", "carla-bridge-lv2-windows.exe")): + carla_bridge_lv2_windows = os.path.join(CWDpp, "carla-bridge", "carla-bridge-lv2-windows.exe") + else: + for p in PATH: + if os.path.exists(os.path.join(p, "carla-bridge-lv2-windows.exe")): + carla_bridge_lv2_windows = os.path.join(p, "carla-bridge-lv2-windows.exe") + break + + # find carla_bridge_vst_hwnd + if os.path.exists(os.path.join(CWDpp, "carla-bridge", "carla-bridge-vst-hwnd.exe")): + carla_bridge_vst_hwnd = os.path.join(CWDpp, "carla-bridge", "carla-bridge-vst-hwnd.exe") + else: + for p in PATH: + if os.path.exists(os.path.join(p, "carla-bridge-vst-hwnd.exe")): + carla_bridge_vst_hwnd = os.path.join(p, "carla-bridge-vst-hwnd.exe") + break -# find carla_bridge_vst_hwnd -if os.path.exists(os.path.join(CWDpp, "carla-bridge", "carla-bridge-vst-hwnd.exe")): - carla_bridge_vst_hwnd = os.path.join(CWDpp, "carla-bridge", "carla-bridge-vst-hwnd.exe") -else: - for p in PATH: - if os.path.exists(os.path.join(p, "carla-bridge-vst-hwnd.exe")): - carla_bridge_vst_hwnd = os.path.join(p, "carla-bridge-vst-hwnd.exe") - break +elif MACOS: + # find carla_bridge_lv2_cocoa + if os.path.exists(os.path.join(CWDpp, "carla-bridge", "carla-bridge-lv2-cocoa")): + carla_bridge_lv2_cocoa = os.path.join(CWDpp, "carla-bridge", "carla-bridge-lv2-cocoa") + else: + for p in PATH: + if os.path.exists(os.path.join(p, "carla-bridge-lv2-cocoa")): + carla_bridge_lv2_cocoa = os.path.join(p, "carla-bridge-lv2-cocoa") + break + + # find carla_bridge_vst_cocoa + if os.path.exists(os.path.join(CWDpp, "carla-bridge", "carla-bridge-vst-cocoa")): + carla_bridge_vst_cocoa = os.path.join(CWDpp, "carla-bridge", "carla-bridge-vst-cocoa") + else: + for p in PATH: + if os.path.exists(os.path.join(p, "carla-bridge-vst-cocoa")): + carla_bridge_vst_cocoa = os.path.join(p, "carla-bridge-vst-cocoa") + break -# find carla_bridge_vst_x11 -if os.path.exists(os.path.join(CWDpp, "carla-bridge", "carla-bridge-vst-x11")): - carla_bridge_vst_x11 = os.path.join(CWDpp, "carla-bridge", "carla-bridge-vst-x11") else: - for p in PATH: - if os.path.exists(os.path.join(p, "carla-bridge-vst-x11")): - carla_bridge_vst_x11 = os.path.join(p, "carla-bridge-vst-x11") - break + # find carla_bridge_lv2_gtk2 + if os.path.exists(os.path.join(CWDpp, "carla-bridge", "carla-bridge-lv2-gtk2")): + carla_bridge_lv2_gtk2 = os.path.join(CWDpp, "carla-bridge", "carla-bridge-lv2-gtk2") + else: + for p in PATH: + if os.path.exists(os.path.join(p, "carla-bridge-lv2-gtk2")): + carla_bridge_lv2_gtk2 = os.path.join(p, "carla-bridge-lv2-gtk2") + break + + # find carla_bridge_lv2_gtk3 + if os.path.exists(os.path.join(CWDpp, "carla-bridge", "carla-bridge-lv2-gtk3")): + carla_bridge_lv2_gtk3 = os.path.join(CWDpp, "carla-bridge", "carla-bridge-lv2-gtk3") + else: + for p in PATH: + if os.path.exists(os.path.join(p, "carla-bridge-lv2-gtk3")): + carla_bridge_lv2_gtk3 = os.path.join(p, "carla-bridge-lv2-gtk3") + break + + # find carla_bridge_lv2_qt4 + if os.path.exists(os.path.join(CWDpp, "carla-bridge", "carla-bridge-lv2-qt4")): + carla_bridge_lv2_qt4 = os.path.join(CWDpp, "carla-bridge", "carla-bridge-lv2-qt4") + else: + for p in PATH: + if os.path.exists(os.path.join(p, "carla-bridge-lv2-qt4")): + carla_bridge_lv2_qt4 = os.path.join(p, "carla-bridge-lv2-qt4") + break + + # find carla_bridge_lv2_qt5 + if os.path.exists(os.path.join(CWDpp, "carla-bridge", "carla-bridge-lv2-qt5")): + carla_bridge_lv2_qt5 = os.path.join(CWDpp, "carla-bridge", "carla-bridge-lv2-qt5") + else: + for p in PATH: + if os.path.exists(os.path.join(p, "carla-bridge-lv2-qt5")): + carla_bridge_lv2_qt5 = os.path.join(p, "carla-bridge-lv2-qt5") + break + +if LINUX: + # find carla_bridge_lv2_x11 + if os.path.exists(os.path.join(CWDpp, "carla-bridge", "carla-bridge-lv2-x11")): + carla_bridge_lv2_x11 = os.path.join(CWDpp, "carla-bridge", "carla-bridge-lv2-x11") + else: + for p in PATH: + if os.path.exists(os.path.join(p, "carla-bridge-lv2-x11")): + carla_bridge_lv2_x11 = os.path.join(p, "carla-bridge-lv2-x11") + break + + # find carla_bridge_vst_x11 + if os.path.exists(os.path.join(CWDpp, "carla-bridge", "carla-bridge-vst-x11")): + carla_bridge_vst_x11 = os.path.join(CWDpp, "carla-bridge", "carla-bridge-vst-x11") + else: + for p in PATH: + if os.path.exists(os.path.join(p, "carla-bridge-vst-x11")): + carla_bridge_vst_x11 = os.path.join(p, "carla-bridge-vst-x11") + break # ------------------------------------------------------------------------------------------------ # Plugin Query (helper functions) @@ -447,7 +493,7 @@ def findBinaries(bPATH, OS): def findLV2Bundles(bPATH): bundles = [] - extensions = (".lv2", ".lV2", ".LV2", ".Lv2") + 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)]: @@ -459,11 +505,11 @@ def findSoundKits(bPATH, stype): soundfonts = [] if stype == "gig": - extensions = (".gig", ".giG", ".gIG", ".GIG", ".GIg", ".Gig") + extensions = (".gig", ".giG", ".gIG", ".GIG", ".GIg", ".Gig") if not WINDOWS else (".gig",) elif stype == "sf2": - extensions = (".sf2", ".sF2", ".SF2", ".Sf2") + extensions = (".sf2", ".sF2", ".SF2", ".Sf2") if not WINDOWS else (".sf2",) elif stype == "sfz": - extensions = (".sfz", ".sfZ", ".sFZ", ".SFZ", ".SFz", ".Sfz") + extensions = (".sfz", ".sfZ", ".sFZ", ".SFZ", ".SFz", ".Sfz") if not WINDOWS else (".sfz",) else: return [] @@ -482,7 +528,7 @@ def findDSSIGUI(filename, name, label): check_label = label check_sname = short_name - if check_name[-1] != "_": check_name += "_" + if check_name[-1] != "_": check_name += "_" if check_label[-1] != "_": check_label += "_" if check_sname[-1] != "_": check_sname += "_" @@ -507,7 +553,7 @@ PLUGIN_QUERY_API_VERSION = 1 PyPluginInfo = { 'API': PLUGIN_QUERY_API_VERSION, 'build': 0, # BINARY_NONE - 'type': 0, # PLUGIN_NONE, + 'type': 0, # PLUGIN_NONE 'hints': 0x0, 'binary': "", 'name': "", @@ -528,7 +574,7 @@ PyPluginInfo = { } def runCarlaDiscovery(itype, stype, filename, tool, isWine=False): - fake_label = os.path.basename(filename).rsplit(".", 1)[0] + fakeLabel = os.path.basename(filename).rsplit(".", 1)[0] plugins = [] command = [] @@ -576,9 +622,9 @@ def runCarlaDiscovery(itype, stype, filename, tool, isWine=False): prop, value = line.replace("carla-discovery::", "").split("::", 1) if prop == "name": - pinfo['name'] = value if value else fake_label + pinfo['name'] = value if value else fakeLabel elif prop == "label": - pinfo['label'] = value if value else fake_label + pinfo['label'] = value if value else fakeLabel elif prop == "maker": pinfo['maker'] = value elif prop == "copyright": diff --git a/src/shared_carla.py b/src/shared_carla.py index 9ccb19e..f74618e 100644 --- a/src/shared_carla.py +++ b/src/shared_carla.py @@ -156,23 +156,20 @@ OPTION_USE_DSSI_VST_CHUNKS = 7 OPTION_PREFER_PLUGIN_BRIDGES = 8 OPTION_PREFER_UI_BRIDGES = 9 OPTION_OSC_UI_TIMEOUT = 10 -OPTION_PATH_LADSPA = 11 -OPTION_PATH_DSSI = 12 -OPTION_PATH_LV2 = 13 -OPTION_PATH_VST = 14 -OPTION_PATH_GIG = 15 -OPTION_PATH_SF2 = 16 -OPTION_PATH_SFZ = 17 -OPTION_PATH_BRIDGE_POSIX32 = 18 -OPTION_PATH_BRIDGE_POSIX64 = 19 -OPTION_PATH_BRIDGE_WIN32 = 20 -OPTION_PATH_BRIDGE_WIN64 = 21 -OPTION_PATH_BRIDGE_LV2_GTK2 = 22 -OPTION_PATH_BRIDGE_LV2_GTK3 = 23 -OPTION_PATH_BRIDGE_LV2_QT4 = 24 -OPTION_PATH_BRIDGE_LV2_X11 = 25 -OPTION_PATH_BRIDGE_VST_HWND = 26 -OPTION_PATH_BRIDGE_VST_X11 = 27 +OPTION_PATH_BRIDGE_POSIX32 = 11 +OPTION_PATH_BRIDGE_POSIX64 = 12 +OPTION_PATH_BRIDGE_WIN32 = 13 +OPTION_PATH_BRIDGE_WIN64 = 14 +OPTION_PATH_BRIDGE_LV2_GTK2 = 15 +OPTION_PATH_BRIDGE_LV2_GTK3 = 16 +OPTION_PATH_BRIDGE_LV2_QT4 = 17 +OPTION_PATH_BRIDGE_LV2_QT5 = 18 +OPTION_PATH_BRIDGE_LV2_COCOA = 19 +OPTION_PATH_BRIDGE_LV2_WINDOWS = 20 +OPTION_PATH_BRIDGE_LV2_X11 = 21 +OPTION_PATH_BRIDGE_VST_COCOA = 22 +OPTION_PATH_BRIDGE_VST_HWND = 23 +OPTION_PATH_BRIDGE_VST_X11 = 24 # enum CallbackType CALLBACK_DEBUG = 0