From f1d717f8696688d4df325be282e0eb58f78d41de Mon Sep 17 00:00:00 2001 From: falkTX Date: Tue, 26 Nov 2013 03:18:26 +0000 Subject: [PATCH] More API changes; Try build without juce --- source/Makefile.mk | 70 ++++---- source/backend/CarlaBackend.hpp | 148 +++++++++------- source/backend/CarlaHost.hpp | 5 +- source/backend/standalone/CarlaStandalone.cpp | 49 ++---- source/carla_backend.py | 166 ++++++++++-------- 5 files changed, 237 insertions(+), 201 deletions(-) diff --git a/source/Makefile.mk b/source/Makefile.mk index 97e80e2d4..46de57893 100644 --- a/source/Makefile.mk +++ b/source/Makefile.mk @@ -84,23 +84,23 @@ ifneq ($(shell pkg-config --exists liblo && echo true),true) $(error liblo missing, cannot continue) endif -ifeq ($(LINUX),true) -ifneq ($(shell pkg-config --exists x11 && echo true),true) -$(error X11 missing, cannot continue) -endif -ifneq ($(shell pkg-config --exists xinerama && echo true),true) -$(error Xinerama missing, cannot continue) -endif -ifneq ($(shell pkg-config --exists xext && echo true),true) -$(error Xext missing, cannot continue) -endif -ifneq ($(shell pkg-config --exists xcursor && echo true),true) -$(error Xcursor missing, cannot continue) -endif -ifneq ($(shell pkg-config --exists freetype2 && echo true),true) -$(error FreeType2 missing, cannot continue) -endif -endif +# ifeq ($(LINUX),true) +# ifneq ($(shell pkg-config --exists x11 && echo true),true) +# $(error X11 missing, cannot continue) +# endif +# ifneq ($(shell pkg-config --exists xinerama && echo true),true) +# $(error Xinerama missing, cannot continue) +# endif +# ifneq ($(shell pkg-config --exists xext && echo true),true) +# $(error Xext missing, cannot continue) +# endif +# ifneq ($(shell pkg-config --exists xcursor && echo true),true) +# $(error Xcursor missing, cannot continue) +# endif +# ifneq ($(shell pkg-config --exists freetype2 && echo true),true) +# $(error FreeType2 missing, cannot continue) +# endif +# endif # -------------------------------------------------------------- # Check for optional libs (required by backend or bridges) @@ -150,13 +150,13 @@ DGL_FLAGS = $(shell pkg-config --cflags gl x11) DGL_LIBS = $(shell pkg-config --libs gl x11) endif JACKBRIDGE_LIBS = -ldl -lpthread -lrt -JUCE_CORE_LIBS = -ldl -lpthread -lrt -JUCE_EVENTS_FLAGS = $(shell pkg-config --cflags x11) -JUCE_EVENTS_LIBS = $(shell pkg-config --libs x11) -JUCE_GRAPHICS_FLAGS = $(shell pkg-config --cflags x11 xinerama xext freetype2) -JUCE_GRAPHICS_LIBS = $(shell pkg-config --libs x11 xinerama xext freetype2) -JUCE_GUI_BASICS_FLAGS = $(shell pkg-config --cflags x11 xinerama xext xcursor) -JUCE_GUI_BASICS_LIBS = $(shell pkg-config --libs x11 xinerama xext xcursor) -ldl +# JUCE_CORE_LIBS = -ldl -lpthread -lrt +# JUCE_EVENTS_FLAGS = $(shell pkg-config --cflags x11) +# JUCE_EVENTS_LIBS = $(shell pkg-config --libs x11) +# JUCE_GRAPHICS_FLAGS = $(shell pkg-config --cflags x11 xinerama xext freetype2) +# JUCE_GRAPHICS_LIBS = $(shell pkg-config --libs x11 xinerama xext freetype2) +# JUCE_GUI_BASICS_FLAGS = $(shell pkg-config --cflags x11 xinerama xext xcursor) +# JUCE_GUI_BASICS_LIBS = $(shell pkg-config --libs x11 xinerama xext xcursor) -ldl LILV_LIBS = -ldl -lm -lrt ifeq ($(HAVE_ALSA),true) RTAUDIO_FLAGS += $(shell pkg-config --cflags alsa) -D__LINUX_ALSA__ @@ -173,12 +173,12 @@ endif ifeq ($(MACOS),true) DGL_LIBS = -framework OpenGL -framework Cocoa JACKBRIDGE_LIBS = -ldl -lpthread -JUCE_AUDIO_BASICS_LIBS = -framework Accelerate -JUCE_AUDIO_DEVICES_LIBS = -framework CoreAudio -framework CoreMIDI -framework DiscRecording -JUCE_AUDIO_FORMATS_LIBS = -framework CoreAudio -framework CoreMIDI -framework QuartzCore -framework AudioToolbox -JUCE_CORE_LIBS = -framework Cocoa -framework IOKit -JUCE_GRAPHICS_LIBS = -framework Cocoa -framework QuartzCore -JUCE_GUI_BASICS_LIBS = -framework Cocoa -framework Carbon -framework QuartzCore +# JUCE_AUDIO_BASICS_LIBS = -framework Accelerate +# JUCE_AUDIO_DEVICES_LIBS = -framework CoreAudio -framework CoreMIDI -framework DiscRecording +# JUCE_AUDIO_FORMATS_LIBS = -framework CoreAudio -framework CoreMIDI -framework QuartzCore -framework AudioToolbox +# JUCE_CORE_LIBS = -framework Cocoa -framework IOKit +# JUCE_GRAPHICS_LIBS = -framework Cocoa -framework QuartzCore +# JUCE_GUI_BASICS_LIBS = -framework Cocoa -framework Carbon -framework QuartzCore LILV_LIBS = -ldl -lm RTAUDIO_FLAGS += -D__MACOSX_CORE__ RTAUDIO_LIBS += -lpthread @@ -188,11 +188,11 @@ endif ifeq ($(WIN32),true) DGL_LIBS = -lopengl32 -lgdi32 JACKBRIDGE_LIBS = -lpthread -JUCE_AUDIO_DEVICES_LIBS = -lwinmm -lole32 -JUCE_CORE_LIBS = -luuid -lwsock32 -lwininet -lversion -lole32 -lws2_32 -loleaut32 -limm32 -lcomdlg32 -lshlwapi -lrpcrt4 -lwinmm -JUCE_EVENTS_LIBS = -lole32 -JUCE_GRAPHICS_LIBS = -lgdi32 -JUCE_GUI_BASICS_LIBS = -lgdi32 -limm32 -lcomdlg32 -lole32 +# JUCE_AUDIO_DEVICES_LIBS = -lwinmm -lole32 +# JUCE_CORE_LIBS = -luuid -lwsock32 -lwininet -lversion -lole32 -lws2_32 -loleaut32 -limm32 -lcomdlg32 -lshlwapi -lrpcrt4 -lwinmm +# JUCE_EVENTS_LIBS = -lole32 +# JUCE_GRAPHICS_LIBS = -lgdi32 +# JUCE_GUI_BASICS_LIBS = -lgdi32 -limm32 -lcomdlg32 -lole32 LILV_LIBS = -lm RTAUDIO_FLAGS += -D__WINDOWS_ASIO__ -D__WINDOWS_DS__ RTAUDIO_LIBS += -lpthread diff --git a/source/backend/CarlaBackend.hpp b/source/backend/CarlaBackend.hpp index 731d76fc3..395654b97 100644 --- a/source/backend/CarlaBackend.hpp +++ b/source/backend/CarlaBackend.hpp @@ -47,7 +47,18 @@ CARLA_BACKEND_START_NAMESPACE const unsigned int MAX_DEFAULT_PLUGINS = 99; //!< Maximum default number of loadable plugins. const unsigned int MAX_RACK_PLUGINS = 16; //!< Maximum number of loadable plugins in rack mode. const unsigned int MAX_PATCHBAY_PLUGINS = 255; //!< Maximum number of loadable plugins in patchbay mode. -const unsigned int MAX_DEFAULT_PARAMETERS = 200; //!< Maximum default number of parameters allowed.\see OPTION_MAX_PARAMETERS +const unsigned int MAX_DEFAULT_PARAMETERS = 200; //!< Maximum default number of parameters allowed.\see ENGINE_OPTION_MAX_PARAMETERS + +/*! + * @defgroup EngineDriverHints Engine Driver Hints + * + * Various engine driver hints. + * @{ + */ +const unsigned int ENGINE_DRIVER_HAS_CONTROL_PANEL = 0x1; //!< Engine driver has custom control-panel. +const unsigned int ENGINE_DRIVER_VARIABLE_BUFFER_SIZE = 0x2; //!< Engine driver can change buffer-size on the fly. +const unsigned int ENGINE_DRIVER_VARIABLE_SAMPLE_RATE = 0x4; //!< Engine driver can change sample-rate on the fly. +/**@}*/ /*! * @defgroup PluginHints Plugin Hints @@ -105,20 +116,29 @@ const unsigned int PARAMETER_USES_CUSTOM_TEXT = 0x400; //!< Parameter uses custo /**@}*/ /*! - * @defgroup CustomDataTypes Custom Data types + * @defgroup CustomDataTypes Custom Data Types * * The type defines how the \param value in the CustomData struct is stored.\n * Types are valid URIs. Any non-string or non-simple type (not integral) is saved in a base64 encoded format. * \see CustomData * @{ */ -const char* const CUSTOM_DATA_TYPE_CHUNK = "http://kxstudio.sf.net/ns/carla/chunk"; //!< Chunk type URI. -const char* const CUSTOM_DATA_TYPE_STRING = "http://kxstudio.sf.net/ns/carla/string"; //!< String type URI. -const char* const CUSTOM_DATA_KEY_UI_X = "http://kxstudio.sf.net/carla/ui#x"; //!< UI X URI. -const char* const CUSTOM_DATA_KEY_UI_Y = "http://kxstudio.sf.net/carla/ui#y"; //!< UI Y URI. -const char* const CUSTOM_DATA_KEY_UI_WIDTH = "http://kxstudio.sf.net/carla/ui#width"; //!< UI width URI. -const char* const CUSTOM_DATA_KEY_UI_HEIGHT = "http://kxstudio.sf.net/carla/ui#height"; //!< UI height URI. -const char* const CUSTOM_DATA_KEY_UI_VISIBLE = "http://kxstudio.sf.net/carla/ui#visible"; //!< UI visible URI. +const char* const CUSTOM_DATA_TYPE_CHUNK = "http://kxstudio.sf.net/ns/carla/chunk"; //!< Chunk type URI. +const char* const CUSTOM_DATA_TYPE_STRING = "http://kxstudio.sf.net/ns/carla/string"; //!< String type URI. +/**@}*/ + +/*! + * @defgroup CustomDataKeys Custom Data Keys + * + * \see CustomData + * @{ + */ +const char* const CUSTOM_DATA_KEY_OPTIONS = "CarlaOptions"; //!< Options URI. +const char* const CUSTOM_DATA_KEY_UI_X = "CarlaUI:X"; //!< UI X URI. +const char* const CUSTOM_DATA_KEY_UI_Y = "CarlaUI:Y"; //!< UI Y URI. +const char* const CUSTOM_DATA_KEY_UI_WIDTH = "CarlaUI:Width"; //!< UI width URI. +const char* const CUSTOM_DATA_KEY_UI_HEIGHT = "CarlaUI:Height"; //!< UI height URI. +const char* const CUSTOM_DATA_KEY_UI_VISIBLE = "CarlaUI:Visible"; //!< UI visible URI. /**@}*/ /*! @@ -207,87 +227,109 @@ enum InternalParametersIndex SIZE_INT { PARAMETER_MAX = -9 //!< Max value, defined for convenience. }; +/*! + * Engine process mode. + * \see ENGINE_OPTION_PROCESS_MODE + */ +enum ProcessMode SIZE_INT { + PROCESS_MODE_SINGLE_CLIENT = 0, //!< Single client mode (dynamic input/outputs as needed by plugins). + PROCESS_MODE_MULTIPLE_CLIENTS = 1, //!< Multiple client mode (1 master client + 1 client per plugin). + PROCESS_MODE_CONTINUOUS_RACK = 2, //!< Single client, 'rack' mode. Processes plugins in order of Id, with forced stereo. + PROCESS_MODE_PATCHBAY = 3, //!< Single client, 'patchbay' mode. + PROCESS_MODE_BRIDGE = 4 //!< Special mode, used in plugin-bridges only. +}; + +/*! + * All the available transport modes + */ +enum TransportMode SIZE_INT { + TRANSPORT_MODE_INTERNAL = 0, //!< Internal transport mode. + TRANSPORT_MODE_JACK = 1, //!< Transport from JACK, only available if driver name is "JACK". + TRANSPORT_MODE_PLUGIN = 2, //!< Transport from host, used when Carla is a plugin. + TRANSPORT_MODE_BRIDGE = 3 //!< Special mode, used in plugin-bridges only. +}; + /*! * Options used in the CarlaEngine::setOption() calls.\n * All options except paths must be set before initiliazing or after closing the engine. */ -enum OptionsType SIZE_INT { +enum EngineOptionsType SIZE_INT { /*! * Set the current process name.\n * This is a convenience option, as Python lacks this functionality. */ - OPTION_PROCESS_NAME = 0, + ENGINE_OPTION_PROCESS_NAME = 0, /*! * Set the engine processing mode.\n * Default is PROCESS_MODE_MULTIPLE_CLIENTS on Linux and PROCESS_MODE_CONTINUOUS_RACK for all other OSes. * \see ProcessMode */ - OPTION_PROCESS_MODE = 1, + ENGINE_OPTION_PROCESS_MODE = 1, /*! * Set the engine transport mode.\n * Default is TRANSPORT_MODE_INTERNAL. * \see TransportMode */ - OPTION_TRANSPORT_MODE = 2, + ENGINE_OPTION_TRANSPORT_MODE = 2, /*! * Force mono plugins as stereo, by running 2 instances at the same time. * \note Not supported by all plugins. * \see PLUGIN_OPTION_FORCE_STEREO */ - OPTION_FORCE_STEREO = 3, + ENGINE_OPTION_FORCE_STEREO = 3, /*! * Use plugin bridges whenever possible.\n * Default is no, EXPERIMENTAL. */ - OPTION_PREFER_PLUGIN_BRIDGES = 4, + ENGINE_OPTION_PREFER_PLUGIN_BRIDGES = 4, /*! * Use UI bridges whenever possible, otherwise UIs will be handled in the main thread.\n * Default is yes. */ - OPTION_PREFER_UI_BRIDGES = 5, + ENGINE_OPTION_PREFER_UI_BRIDGES = 5, /*! * Make plugin UIs always-on-top.\n * Default is yes. */ - OPTION_UIS_ALWAYS_ON_TOP = 6, + ENGINE_OPTION_UIS_ALWAYS_ON_TOP = 6, /*! * Maximum number of parameters allowed.\n * Default is MAX_DEFAULT_PARAMETERS. */ - OPTION_MAX_PARAMETERS = 7, + ENGINE_OPTION_MAX_PARAMETERS = 7, /*! * Timeout value in ms for how much to wait for UI-Bridges to respond.\n * Default is 4000 (4 secs). */ - OPTION_UI_BRIDGES_TIMEOUT = 8, + ENGINE_OPTION_UI_BRIDGES_TIMEOUT = 8, /*! * Audio number of periods. */ - OPTION_AUDIO_NUM_PERIODS = 9, + ENGINE_OPTION_AUDIO_NUM_PERIODS = 9, /*! * Audio buffer size. */ - OPTION_AUDIO_BUFFER_SIZE = 10, + ENGINE_OPTION_AUDIO_BUFFER_SIZE = 10, /*! * Audio sample rate. */ - OPTION_AUDIO_SAMPLE_RATE = 11, + ENGINE_OPTION_AUDIO_SAMPLE_RATE = 11, /*! * Audio device. */ - OPTION_AUDIO_DEVICE = 12, + ENGINE_OPTION_AUDIO_DEVICE = 12, /*! * Set path to the resource files.\n @@ -295,38 +337,38 @@ enum OptionsType SIZE_INT { * * \note Must be set for some internal plugins to work! */ - OPTION_PATH_RESOURCES = 13, + ENGINE_OPTION_PATH_RESOURCES = 13, #ifndef BUILD_BRIDGE /*! * Set path to the native plugin bridge executable.\n * Default unset. */ - OPTION_PATH_BRIDGE_NATIVE = 14, + ENGINE_OPTION_PATH_BRIDGE_NATIVE = 14, /*! * Set path to the POSIX 32bit plugin bridge executable.\n * Default unset. */ - OPTION_PATH_BRIDGE_POSIX32 = 15, + ENGINE_OPTION_PATH_BRIDGE_POSIX32 = 15, /*! * Set path to the POSIX 64bit plugin bridge executable.\n * Default unset. */ - OPTION_PATH_BRIDGE_POSIX64 = 16, + ENGINE_OPTION_PATH_BRIDGE_POSIX64 = 16, /*! * Set path to the Windows 32bit plugin bridge executable.\n * Default unset. */ - OPTION_PATH_BRIDGE_WIN32 = 17, + ENGINE_OPTION_PATH_BRIDGE_WIN32 = 17, /*! * Set path to the Windows 64bit plugin bridge executable.\n * Default unset. */ - OPTION_PATH_BRIDGE_WIN64 = 18, + ENGINE_OPTION_PATH_BRIDGE_WIN64 = 18, #endif #ifdef WANT_LV2 @@ -334,55 +376,55 @@ enum OptionsType SIZE_INT { * Set path to the LV2 External UI bridge executable.\n * Default unset. */ - OPTION_PATH_BRIDGE_LV2_EXTERNAL = 19, + ENGINE_OPTION_PATH_BRIDGE_LV2_EXTERNAL = 19, /*! * Set path to the LV2 Gtk2 UI bridge executable.\n * Default unset. */ - OPTION_PATH_BRIDGE_LV2_GTK2 = 20, + ENGINE_OPTION_PATH_BRIDGE_LV2_GTK2 = 20, /*! * Set path to the LV2 Gtk3 UI bridge executable.\n * Default unset. */ - OPTION_PATH_BRIDGE_LV2_GTK3 = 21, + ENGINE_OPTION_PATH_BRIDGE_LV2_GTK3 = 21, /*! * Set path to the LV2 Ntk UI bridge executable.\n * Default unset. */ - OPTION_PATH_BRIDGE_LV2_NTK = 22, + ENGINE_OPTION_PATH_BRIDGE_LV2_NTK = 22, /*! * Set path to the LV2 Qt4 UI bridge executable.\n * Default unset. */ - OPTION_PATH_BRIDGE_LV2_QT4 = 23, + ENGINE_OPTION_PATH_BRIDGE_LV2_QT4 = 23, /*! * Set path to the LV2 Qt5 UI bridge executable.\n * Default unset. */ - OPTION_PATH_BRIDGE_LV2_QT5 = 24, + ENGINE_OPTION_PATH_BRIDGE_LV2_QT5 = 24, /*! * Set path to the LV2 Cocoa UI bridge executable.\n * Default unset. */ - OPTION_PATH_BRIDGE_LV2_COCOA = 25, + ENGINE_OPTION_PATH_BRIDGE_LV2_COCOA = 25, /*! * Set path to the LV2 Windows UI bridge executable.\n * Default unset. */ - OPTION_PATH_BRIDGE_LV2_WINDOWS = 26, + ENGINE_OPTION_PATH_BRIDGE_LV2_WINDOWS = 26, /*! * Set path to the LV2 X11 UI bridge executable.\n * Default unset. */ - OPTION_PATH_BRIDGE_LV2_X11 = 27, + ENGINE_OPTION_PATH_BRIDGE_LV2_X11 = 27, #endif #ifdef WANT_VST @@ -390,19 +432,19 @@ enum OptionsType SIZE_INT { * Set path to the VST Mac UI bridge executable.\n * Default unset. */ - OPTION_PATH_BRIDGE_VST_MAC = 28, + ENGINE_OPTION_PATH_BRIDGE_VST_MAC = 28, /*! * Set path to the VST HWND UI bridge executable.\n * Default unset. */ - OPTION_PATH_BRIDGE_VST_HWND = 29, + ENGINE_OPTION_PATH_BRIDGE_VST_HWND = 29, /*! * Set path to the VST X11 UI bridge executable.\n * Default unset. */ - OPTION_PATH_BRIDGE_VST_X11 = 30 + ENGINE_OPTION_PATH_BRIDGE_VST_X11 = 30 #endif }; @@ -677,28 +719,6 @@ enum FileCallbackType SIZE_INT { FILE_CALLBACK_SAVE = 2 }; -/*! - * Engine process mode. - * \see OPTION_PROCESS_MODE - */ -enum ProcessMode SIZE_INT { - PROCESS_MODE_SINGLE_CLIENT = 0, //!< Single client mode (dynamic input/outputs as needed by plugins). - PROCESS_MODE_MULTIPLE_CLIENTS = 1, //!< Multiple client mode (1 master client + 1 client per plugin). - PROCESS_MODE_CONTINUOUS_RACK = 2, //!< Single client, 'rack' mode. Processes plugins in order of Id, with forced stereo. - PROCESS_MODE_PATCHBAY = 3, //!< Single client, 'patchbay' mode. - PROCESS_MODE_BRIDGE = 4 //!< Special mode, used in plugin-bridges only. -}; - -/*! - * All the available transport modes - */ -enum TransportMode SIZE_INT { - TRANSPORT_MODE_INTERNAL = 0, //!< Internal transport mode. - TRANSPORT_MODE_JACK = 1, //!< Transport from JACK, only available if driver name is "JACK". - TRANSPORT_MODE_PLUGIN = 2, //!< Transport from host, used when Carla is a plugin. - TRANSPORT_MODE_BRIDGE = 3 //!< Special mode, used in plugin-bridges only. -}; - /*! * Engine callback function. * \see EngineCallbackType @@ -709,7 +729,7 @@ typedef void (*EngineCallbackFunc)(void* ptr, EngineCallbackType action, unsigne * File callback function. * \see FileCallbackType */ -typedef const char* (*FileCallbackFunc)(void* ptr, FileCallbackType action, bool isDir, const char* title, const char* filter); +typedef char* (*FileCallbackFunc)(void* ptr, FileCallbackType action, bool isDir, const char* title, const char* filter); /*! * Parameter data. diff --git a/source/backend/CarlaHost.hpp b/source/backend/CarlaHost.hpp index 2f01f62a6..41a036421 100644 --- a/source/backend/CarlaHost.hpp +++ b/source/backend/CarlaHost.hpp @@ -242,6 +242,7 @@ struct CarlaTransportInfo { frame(0), bar(0), beat(0), + tick(0), bpm(0.0) {} #endif }; @@ -282,9 +283,9 @@ CARLA_EXPORT const char* carla_get_supported_file_types(); CARLA_EXPORT unsigned int carla_get_engine_driver_count(); /*! - * Get the engine driver name \a index. + * Get the engine driver info for \a index. */ -CARLA_EXPORT const char* carla_get_engine_driver_name(unsigned int index); +CARLA_EXPORT const CarlaEngineDriverInfo* carla_get_engine_driver_info(unsigned int index); /*! * Get the device names of the engine driver at \a index (for use in non-JACK drivers).\n diff --git a/source/backend/standalone/CarlaStandalone.cpp b/source/backend/standalone/CarlaStandalone.cpp index 0ea0c4578..6ed77b88c 100644 --- a/source/backend/standalone/CarlaStandalone.cpp +++ b/source/backend/standalone/CarlaStandalone.cpp @@ -26,7 +26,9 @@ #include "CarlaOscUtils.hpp" #include "CarlaNative.h" -#include "juce_gui_basics.h" +#ifdef USE_JUCE +# include "juce_gui_basics.h" +#endif //#include "CarlaLogThread.hpp" //#if ! (defined(DEBUG) || defined(WANT_LOGS) || defined(BUILD_ANSI_TEST)) @@ -37,12 +39,11 @@ namespace CB = CarlaBackend; using CB::CarlaEngine; using CB::CarlaPlugin; -using CB::CallbackFunc; +using CB::EngineCallbackFunc; using CB::EngineOptions; using CB::EngineTimeInfo; -//using juce::MessageManager; - +#ifdef USE_JUCE using namespace juce; // ----------------------------------------------------------------------- @@ -87,13 +88,15 @@ private: }; juce_ImplementSingleton(JuceMessageThread) +#endif // ------------------------------------------------------------------------------------------------------------------- // Single, standalone engine struct CarlaBackendStandalone { - CallbackFunc callback; - void* callbackPtr; + EngineCallbackFunc callback; + void* callbackPtr; + CarlaEngine* engine; CarlaString lastError; EngineOptions options; @@ -106,50 +109,32 @@ struct CarlaBackendStandalone { ~CarlaBackendStandalone() { CARLA_ASSERT(engine == nullptr); - //CARLA_ASSERT(MessageManager::getInstanceWithoutCreating() == nullptr); +#ifdef USE_JUCE + CARLA_ASSERT(MessageManager::getInstanceWithoutCreating() == nullptr); +#endif } -#if 1 void init() { +#ifdef USE_JUCE JUCE_AUTORELEASEPOOL initialiseJuce_GUI(); JuceMessageThread::getInstance(); +#endif } void idle() {} void close() { +#ifdef USE_JUCE JUCE_AUTORELEASEPOOL JuceMessageThread::deleteInstance(); shutdownJuce_GUI(); - } -#else - void init() - { - juce::initialiseJuce_GUI(); - - if (MessageManager* const mgr = MessageManager::getInstance()) - mgr->setCurrentThreadAsMessageThread(); - } - - void idle() - { - if (MessageManager* const mgr = MessageManager::getInstanceWithoutCreating()) - mgr->runDispatchLoopUntil(5); - } - - void close() - { - if (MessageManager* const mgr = MessageManager::getInstanceWithoutCreating()) - mgr->stopDispatchLoop(); - - juce::shutdownJuce_GUI(); - } #endif + } CARLA_DECLARE_NON_COPY_STRUCT(CarlaBackendStandalone) }; @@ -597,7 +582,9 @@ void carla_set_engine_option(CarlaOptionsType option, int value, const char* val { case CB::OPTION_PROCESS_NAME: CARLA_SAFE_ASSERT_RETURN(valueStr != nullptr && valueStr[0] != '\0',); +#ifdef USE_JUCE juce::Thread::setCurrentThreadName(valueStr); +#endif break; case CB::OPTION_PROCESS_MODE: diff --git a/source/carla_backend.py b/source/carla_backend.py index fa5ebf7d0..303e81e84 100644 --- a/source/carla_backend.py +++ b/source/carla_backend.py @@ -92,6 +92,11 @@ MAX_RACK_PLUGINS = 16 MAX_PATCHBAY_PLUGINS = 255 MAX_DEFAULT_PARAMETERS = 200 +# Engine Driver Hints +ENGINE_DRIVER_HAS_CONTROL_PANEL = 0x1 +ENGINE_DRIVER_VARIABLE_BUFFER_SIZE = 0x2 +ENGINE_DRIVER_VARIABLE_SAMPLE_RATE = 0x4 + # Plugin Hints PLUGIN_IS_BRIDGE = 0x001 PLUGIN_IS_RTSAFE = 0x002 @@ -126,21 +131,24 @@ PARAMETER_USES_SAMPLERATE = 0x100 PARAMETER_USES_SCALEPOINTS = 0x200 PARAMETER_USES_CUSTOM_TEXT = 0x400 -# Custom Data types +# Custom Data Types CUSTOM_DATA_TYPE_CHUNK = "http://kxstudio.sf.net/ns/carla/chunk" CUSTOM_DATA_TYPE_STRING = "http://kxstudio.sf.net/ns/carla/string" -CUSTOM_DATA_KEY_UI_X = "http://kxstudio.sf.net/carla/ui#x" -CUSTOM_DATA_KEY_UI_Y = "http://kxstudio.sf.net/carla/ui#y" -CUSTOM_DATA_KEY_UI_WIDTH = "http://kxstudio.sf.net/carla/ui#width" -CUSTOM_DATA_KEY_UI_HEIGHT = "http://kxstudio.sf.net/carla/ui#height" -CUSTOM_DATA_KEY_UI_VISIBLE = "http://kxstudio.sf.net/carla/ui#visible" + +# Custom Data Keys +CUSTOM_DATA_KEY_OPTIONS = "CarlaOptions" +CUSTOM_DATA_KEY_UI_X = "CarlaUI:X" +CUSTOM_DATA_KEY_UI_Y = "CarlaUI:Y" +CUSTOM_DATA_KEY_UI_WIDTH = "CarlaUI:Width" +CUSTOM_DATA_KEY_UI_HEIGHT = "CarlaUI:Height" +CUSTOM_DATA_KEY_UI_VISIBLE = "CarlaUI:Visible" # Patchbay Port Hints -PATCHBAY_PORT_IS_INPUT = 0x01 -PATCHBAY_PORT_IS_OUTPUT = 0x02 -PATCHBAY_PORT_IS_AUDIO = 0x10 -PATCHBAY_PORT_IS_CV = 0x20 -PATCHBAY_PORT_IS_MIDI = 0x40 +PATCHBAY_PORT_IS_INPUT = 0x01 +PATCHBAY_PORT_IS_OUTPUT = 0x02 +PATCHBAY_PORT_IS_AUDIO = 0x10 +PATCHBAY_PORT_IS_CV = 0x20 +PATCHBAY_PORT_IS_MIDI = 0x40 # Binary Type BINARY_NONE = 0 @@ -192,40 +200,53 @@ PARAMETER_PANNING = -7 PARAMETER_CTRL_CHANNEL = -8 PARAMETER_MAX = -9 -# Options Type -OPTION_PROCESS_NAME = 0 -OPTION_PROCESS_MODE = 1 -OPTION_TRANSPORT_MODE = 2 -OPTION_FORCE_STEREO = 3 -OPTION_PREFER_PLUGIN_BRIDGES = 4 -OPTION_PREFER_UI_BRIDGES = 5 -OPTION_UIS_ALWAYS_ON_TOP = 6 -OPTION_MAX_PARAMETERS = 7 -OPTION_UI_BRIDGES_TIMEOUT = 8 -OPTION_AUDIO_NUM_PERIODS = 9 -OPTION_AUDIO_BUFFER_SIZE = 10 -OPTION_AUDIO_SAMPLE_RATE = 11 -OPTION_AUDIO_DEVICE = 12 -OPTION_PATH_RESOURCES = 13 -OPTION_PATH_BRIDGE_NATIVE = 14 -OPTION_PATH_BRIDGE_POSIX32 = 15 -OPTION_PATH_BRIDGE_POSIX64 = 16 -OPTION_PATH_BRIDGE_WIN32 = 17 -OPTION_PATH_BRIDGE_WIN64 = 18 -OPTION_PATH_BRIDGE_LV2_EXTERNAL = 19 -OPTION_PATH_BRIDGE_LV2_GTK2 = 20 -OPTION_PATH_BRIDGE_LV2_GTK3 = 21 -OPTION_PATH_BRIDGE_LV2_NTK = 22 -OPTION_PATH_BRIDGE_LV2_QT4 = 23 -OPTION_PATH_BRIDGE_LV2_QT5 = 24 -OPTION_PATH_BRIDGE_LV2_COCOA = 25 -OPTION_PATH_BRIDGE_LV2_WINDOWS = 26 -OPTION_PATH_BRIDGE_LV2_X11 = 27 -OPTION_PATH_BRIDGE_VST_MAC = 28 -OPTION_PATH_BRIDGE_VST_HWND = 29 -OPTION_PATH_BRIDGE_VST_X11 = 30 - -# EngineCallback Type +# Process Mode +PROCESS_MODE_SINGLE_CLIENT = 0 +PROCESS_MODE_MULTIPLE_CLIENTS = 1 +PROCESS_MODE_CONTINUOUS_RACK = 2 +PROCESS_MODE_PATCHBAY = 3 +PROCESS_MODE_BRIDGE = 4 + +# Transport Mode +TRANSPORT_MODE_INTERNAL = 0 +TRANSPORT_MODE_JACK = 1 +TRANSPORT_MODE_PLUGIN = 2 +TRANSPORT_MODE_BRIDGE = 3 + +# Engine Options Type +ENGINE_OPTION_PROCESS_NAME = 0 +ENGINE_OPTION_PROCESS_MODE = 1 +ENGINE_OPTION_TRANSPORT_MODE = 2 +ENGINE_OPTION_FORCE_STEREO = 3 +ENGINE_OPTION_PREFER_PLUGIN_BRIDGES = 4 +ENGINE_OPTION_PREFER_UI_BRIDGES = 5 +ENGINE_OPTION_UIS_ALWAYS_ON_TOP = 6 +ENGINE_OPTION_MAX_PARAMETERS = 7 +ENGINE_OPTION_UI_BRIDGES_TIMEOUT = 8 +ENGINE_OPTION_AUDIO_NUM_PERIODS = 9 +ENGINE_OPTION_AUDIO_BUFFER_SIZE = 10 +ENGINE_OPTION_AUDIO_SAMPLE_RATE = 11 +ENGINE_OPTION_AUDIO_DEVICE = 12 +ENGINE_OPTION_PATH_RESOURCES = 13 +ENGINE_OPTION_PATH_BRIDGE_NATIVE = 14 +ENGINE_OPTION_PATH_BRIDGE_POSIX32 = 15 +ENGINE_OPTION_PATH_BRIDGE_POSIX64 = 16 +ENGINE_OPTION_PATH_BRIDGE_WIN32 = 17 +ENGINE_OPTION_PATH_BRIDGE_WIN64 = 18 +ENGINE_OPTION_PATH_BRIDGE_LV2_EXTERNAL = 19 +ENGINE_OPTION_PATH_BRIDGE_LV2_GTK2 = 20 +ENGINE_OPTION_PATH_BRIDGE_LV2_GTK3 = 21 +ENGINE_OPTION_PATH_BRIDGE_LV2_NTK = 22 +ENGINE_OPTION_PATH_BRIDGE_LV2_QT4 = 23 +ENGINE_OPTION_PATH_BRIDGE_LV2_QT5 = 24 +ENGINE_OPTION_PATH_BRIDGE_LV2_COCOA = 25 +ENGINE_OPTION_PATH_BRIDGE_LV2_WINDOWS = 26 +ENGINE_OPTION_PATH_BRIDGE_LV2_X11 = 27 +ENGINE_OPTION_PATH_BRIDGE_VST_MAC = 28 +ENGINE_OPTION_PATH_BRIDGE_VST_HWND = 29 +ENGINE_OPTION_PATH_BRIDGE_VST_X11 = 30 + +# Engine Callback Type ENGINE_CALLBACK_DEBUG = 0 ENGINE_CALLBACK_PLUGIN_ADDED = 1 ENGINE_CALLBACK_PLUGIN_REMOVED = 2 @@ -266,24 +287,11 @@ ENGINE_CALLBACK_INFO = 36 ENGINE_CALLBACK_ERROR = 37 ENGINE_CALLBACK_QUIT = 38 -# FileCallback Type +# File Callback Type FILE_CALLBACK_DEBUG = 0 FILE_CALLBACK_OPEN = 1 FILE_CALLBACK_SAVE = 2 -# Process Mode -PROCESS_MODE_SINGLE_CLIENT = 0 -PROCESS_MODE_MULTIPLE_CLIENTS = 1 -PROCESS_MODE_CONTINUOUS_RACK = 2 -PROCESS_MODE_PATCHBAY = 3 -PROCESS_MODE_BRIDGE = 4 - -# Transport Mode -TRANSPORT_MODE_INTERNAL = 0 -TRANSPORT_MODE_JACK = 1 -TRANSPORT_MODE_PLUGIN = 2 -TRANSPORT_MODE_BRIDGE = 3 - # Set BINARY_NATIVE if HAIKU or LINUX or MACOS: BINARY_NATIVE = BINARY_POSIX64 if kIs64bit else BINARY_POSIX32 @@ -402,12 +410,18 @@ class CarlaTransportInfo(Structure): ("bpm", c_double) ] +class CarlaEngineDriverInfo(Structure): + _fields_ = [ + ("name", c_char_p), + ("hints", c_uint) + ] + # ------------------------------------------------------------------------------------------------------------ # Python object dicts compatible with ctypes struct PyParameterData = { 'type': PARAMETER_NULL, - 'index': 0, + 'index': PARAMETER_NULL, 'rindex': -1, 'hints': 0x0, 'midiChannel': 0, @@ -418,9 +432,9 @@ PyParameterRanges = { 'def': 0.0, 'min': 0.0, 'max': 1.0, - 'step': 0.0, - 'stepSmall': 0.0, - 'stepLarge': 0.0 + 'step': 0.01, + 'stepSmall': 0.0001, + 'stepLarge': 0.1 } PyMidiProgramData = { @@ -447,8 +461,8 @@ PyCarlaPluginInfo = { 'maker': None, 'copyright': None, 'iconName': None, - 'uniqueId': 0, - 'latency': 0 + 'patchbayClientId': 0, + 'uniqueId': 0 } PyCarlaPortCountInfo = { @@ -469,6 +483,20 @@ PyCarlaScalePointInfo = { 'label': None } +PyCarlaTransportInfo = { + "playing": False, + "frame": 0, + "bar": 0, + "beat": 0, + "tick": 0, + "bpm": 0.0 +} + +PyCarlaEngineDriverInfo = { + "name": None, + "hints": 0x0 +} + # ------------------------------------------------------------------------------------------------------------ # Host Python object (Control/Standalone) @@ -487,8 +515,8 @@ class Host(object): self.lib.carla_get_engine_driver_count.argtypes = None self.lib.carla_get_engine_driver_count.restype = c_uint - self.lib.carla_get_engine_driver_name.argtypes = [c_uint] - self.lib.carla_get_engine_driver_name.restype = c_char_p + self.lib.carla_get_engine_driver_info.argtypes = [c_uint] + self.lib.carla_get_engine_driver_info.restype = POINTER(CarlaEngineDriverInfo) self.lib.carla_get_engine_driver_device_names.argtypes = [c_uint] self.lib.carla_get_engine_driver_device_names.restype = POINTER(c_char_p) @@ -745,8 +773,8 @@ class Host(object): def get_engine_driver_count(self): return self.lib.carla_get_engine_driver_count() - def get_engine_driver_name(self, index): - return self.lib.carla_get_engine_driver_name(index) + def get_engine_driver_info(self, index): + return structToDict(self.lib.carla_get_engine_driver_info(index)) def get_engine_driver_device_names(self, index): return charStringList(self.lib.carla_get_engine_driver_device_names(index))