| @@ -83,13 +83,14 @@ const unsigned int PARAMETER_USES_CUSTOM_TEXT = 0x80; //!< Parameter uses custom | |||
| /*! | |||
| * @defgroup CustomDataTypes Custom Data types | |||
| * | |||
| * The type defines how the value in CustomData is stored. | |||
| * The type defines how the \param value in CustomData is stored. | |||
| * | |||
| * Types are valid URIs.\n | |||
| * Any non-string type is saved in a base64 format. | |||
| * Any non-string type is saved in a base64 encoded format. | |||
| */ | |||
| const char* const CUSTOM_DATA_INVALID = nullptr; //!< Null/Invalid data. | |||
| const char* const CUSTOM_DATA_STRING = "urn:carla:string"; //!< Internal String (s) | |||
| const char* const CUSTOM_DATA_INVALID = nullptr; //!< Null/Invalid data. | |||
| const char* const CUSTOM_DATA_CHUNK = "http://kxstudio.sf.net/ns/carla/chunk"; //!< Carla Chunk | |||
| const char* const CUSTOM_DATA_STRING = "http://kxstudio.sf.net/ns/carla/string"; //!< Carla String | |||
| /**@}*/ | |||
| /*! | |||
| @@ -562,13 +563,17 @@ struct CustomData { | |||
| const char* value; | |||
| CustomData() | |||
| : type(CUSTOM_DATA_INVALID), | |||
| : type(nullptr), | |||
| key(nullptr), | |||
| value(nullptr) {} | |||
| }; | |||
| /**@}*/ | |||
| // forward declarations of commonly used Carla classes | |||
| class CarlaEngine; | |||
| class CarlaPlugin; | |||
| CARLA_BACKEND_END_NAMESPACE | |||
| #endif // CARLA_BACKEND_HPP | |||
| @@ -1,5 +1,5 @@ | |||
| /* | |||
| * Carla Backend | |||
| * Carla Plugin Engine | |||
| * Copyright (C) 2012 Filipe Coelho <falktx@falktx.com> | |||
| * | |||
| * This program is free software; you can redistribute it and/or modify | |||
| @@ -1248,6 +1248,31 @@ void CarlaEngine::bufferSizeChanged(const uint32_t newBufferSize) | |||
| // ------------------------------------------------------------------------------------------------------------------- | |||
| // Carla Engine OSC stuff | |||
| void CarlaEngine::osc_send_peaks(CarlaPlugin* const plugin, const unsigned short& id) | |||
| { | |||
| // Peak values | |||
| if (plugin->audioInCount() > 0) | |||
| { | |||
| #ifdef BUILD_BRIDGE | |||
| osc_send_bridge_set_inpeak(1); | |||
| osc_send_bridge_set_inpeak(2); | |||
| #else | |||
| osc_send_control_set_input_peak_value(id, 1); | |||
| osc_send_control_set_input_peak_value(id, 2); | |||
| #endif | |||
| } | |||
| if (plugin->audioOutCount() > 0) | |||
| { | |||
| #ifdef BUILD_BRIDGE | |||
| osc_send_bridge_set_outpeak(1); | |||
| osc_send_bridge_set_outpeak(2); | |||
| #else | |||
| osc_send_control_set_output_peak_value(id, 1); | |||
| osc_send_control_set_output_peak_value(id, 2); | |||
| #endif | |||
| } | |||
| } | |||
| #ifndef BUILD_BRIDGE | |||
| void CarlaEngine::osc_send_control_add_plugin_start(const int32_t pluginId, const char* const pluginName) | |||
| { | |||
| @@ -695,6 +695,8 @@ public: | |||
| void setOscBridgeData(const CarlaOscData* const oscData); | |||
| #endif | |||
| void osc_send_peaks(CarlaPlugin* const plugin, const unsigned short& id); | |||
| #ifdef BUILD_BRIDGE | |||
| void osc_send_bridge_audio_count(const int32_t ins, const int32_t outs, const int32_t total); | |||
| void osc_send_bridge_midi_count(const int32_t ins, const int32_t outs, const int32_t total); | |||
| @@ -9,11 +9,19 @@ CONFIG += link_pkgconfig qt warn_on | |||
| DEFINES = DEBUG | |||
| DEFINES += QTCREATOR_TEST | |||
| # JACK | |||
| DEFINES += CARLA_ENGINE_JACK | |||
| # RtAudio/RtMidi | |||
| DEFINES += CARLA_ENGINE_RTAUDIO HAVE_GETTIMEOFDAY _FORTIFY_SOURCE=2 | |||
| DEFINES += CARLA_ENGINE_PLUGIN DISTRHO_PLUGIN_TARGET_DSSI | |||
| DEFINES += __LINUX_ALSA__ __LINUX_ALSASEQ__ __LINUX_PULSE__ __UNIX_JACK__ | |||
| DEFINES += __RTAUDIO_DEBUG__ __RTMIDI_DEBUG__ | |||
| # DISTRHO Plugin | |||
| DEFINES += CARLA_ENGINE_PLUGIN | |||
| DEFINES += DISTRHO_PLUGIN_TARGET_DSSI | |||
| # Misc | |||
| DEFINES += WANT_LV2 | |||
| PKGCONFIG = liblo jack alsa libpulse-simple | |||
| @@ -22,7 +30,7 @@ TARGET = carla_engine | |||
| TEMPLATE = lib | |||
| VERSION = 0.5.0 | |||
| SOURCES = \ | |||
| SOURCES = \ | |||
| carla_engine.cpp \ | |||
| carla_engine_osc.cpp \ | |||
| carla_engine_thread.cpp \ | |||
| @@ -30,18 +38,21 @@ SOURCES = \ | |||
| rtaudio.cpp \ | |||
| plugin.cpp | |||
| HEADERS = \ | |||
| HEADERS = \ | |||
| carla_engine.hpp \ | |||
| carla_engine_osc.hpp \ | |||
| carla_engine_thread.hpp | |||
| HEADERS += \ | |||
| DistrhoPluginInfo.h | |||
| INCLUDEPATH = . \ | |||
| ../carla-backend \ | |||
| ../carla-includes \ | |||
| ../carla-plugin \ | |||
| ../carla-utils | |||
| # Jack | |||
| # JACK | |||
| INCLUDEPATH += ../carla-jackbridge | |||
| # RtAudio/RtMidi | |||
| @@ -51,6 +62,6 @@ SOURCES += rtaudio-4.0.11/RtAudio.cpp | |||
| SOURCES += rtmidi-2.0.1/RtMidi.cpp | |||
| # Plugin | |||
| INCLUDEPATH += distrho-plugin-toolkit | |||
| INCLUDEPATH += ../distrho-plugin-toolkit | |||
| QMAKE_CXXFLAGS *= -std=c++0x | |||
| @@ -483,7 +483,7 @@ int CarlaEngineOsc::handleMsgExiting(CARLA_ENGINE_OSC_HANDLE_ARGS1) | |||
| qDebug("CarlaEngineOsc::handleMsgExiting()"); | |||
| // TODO - check for non-UIs (dssi-vst) and set to -1 instead | |||
| engine->callback(CALLBACK_SHOW_GUI, plugin->id(), 0, 0, 0.0); | |||
| engine->callback(CALLBACK_SHOW_GUI, plugin->id(), 0, 0, 0.0, nullptr); | |||
| plugin->freeOscData(); | |||
| return 0; | |||
| @@ -49,8 +49,9 @@ | |||
| CARLA_BACKEND_START_NAMESPACE | |||
| class CarlaEngine; | |||
| class CarlaPlugin; | |||
| #if 0 | |||
| } // Fix editor indentation | |||
| #endif | |||
| class CarlaEngineOsc | |||
| { | |||
| @@ -84,74 +84,52 @@ void CarlaEngineThread::run() | |||
| { | |||
| CarlaPlugin* const plugin = engine->getPluginUnchecked(i); | |||
| if (plugin && plugin->enabled()) | |||
| { | |||
| if (! (plugin && plugin->enabled())) | |||
| continue; | |||
| #ifndef BUILD_BRIDGE | |||
| const unsigned short id = plugin->id(); | |||
| const unsigned short id = plugin->id(); | |||
| #endif | |||
| usesSingleThread = (plugin->hints() & PLUGIN_USES_SINGLE_THREAD); | |||
| usesSingleThread = (plugin->hints() & PLUGIN_USES_SINGLE_THREAD); | |||
| // ------------------------------------------------------- | |||
| // Process postponed events | |||
| // ------------------------------------------------------- | |||
| // Process postponed events | |||
| if (! usesSingleThread) | |||
| plugin->postEventsRun(); | |||
| if (! usesSingleThread) | |||
| plugin->postEventsRun(); | |||
| // ------------------------------------------------------- | |||
| if (oscControlRegisted || ! usesSingleThread) | |||
| { | |||
| // --------------------------------------------------- | |||
| // Update parameter outputs | |||
| if (oscControlRegisted || ! usesSingleThread) | |||
| for (uint32_t j=0; j < plugin->parameterCount(); j++) | |||
| { | |||
| for (uint32_t i=0; i < plugin->parameterCount(); i++) | |||
| { | |||
| if (! plugin->parameterIsOutput(i)) | |||
| continue; | |||
| if (! plugin->parameterIsOutput(j)) | |||
| continue; | |||
| value = plugin->getParameterValue(i); | |||
| value = plugin->getParameterValue(j); | |||
| // Update UI | |||
| if (! usesSingleThread) | |||
| plugin->uiParameterChange(i, value); | |||
| // Update UI | |||
| if (! usesSingleThread) | |||
| plugin->uiParameterChange(j, value); | |||
| // Update OSC control client | |||
| if (oscControlRegisted) | |||
| { | |||
| // Update OSC control client | |||
| if (oscControlRegisted) | |||
| { | |||
| #ifdef BUILD_BRIDGE | |||
| engine->osc_send_bridge_set_parameter_value(i, value); | |||
| engine->osc_send_bridge_set_parameter_value(j, value); | |||
| #else | |||
| engine->osc_send_control_set_parameter_value(id, i, value); | |||
| engine->osc_send_control_set_parameter_value(id, j, value); | |||
| #endif | |||
| } | |||
| } | |||
| } | |||
| // ------------------------------------------------------- | |||
| // Update OSC control client (peaks) | |||
| // --------------------------------------------------- | |||
| // Update OSC control client peaks | |||
| if (oscControlRegisted) | |||
| { | |||
| // Peak values | |||
| if (plugin->audioInCount() > 0) | |||
| { | |||
| #ifdef BUILD_BRIDGE | |||
| engine->osc_send_bridge_set_inpeak(1); | |||
| engine->osc_send_bridge_set_inpeak(2); | |||
| #else | |||
| engine->osc_send_control_set_input_peak_value(id, 1); | |||
| engine->osc_send_control_set_input_peak_value(id, 2); | |||
| #endif | |||
| } | |||
| if (plugin->audioOutCount() > 0) | |||
| { | |||
| #ifdef BUILD_BRIDGE | |||
| engine->osc_send_bridge_set_outpeak(1); | |||
| engine->osc_send_bridge_set_outpeak(2); | |||
| #else | |||
| engine->osc_send_control_set_output_peak_value(id, 1); | |||
| engine->osc_send_control_set_output_peak_value(id, 2); | |||
| #endif | |||
| } | |||
| } | |||
| engine->osc_send_peaks(plugin, id); | |||
| } | |||
| } | |||
| @@ -25,7 +25,9 @@ | |||
| CARLA_BACKEND_START_NAMESPACE | |||
| class CarlaEngine; | |||
| #if 0 | |||
| } // Fix editor indentation | |||
| #endif | |||
| class CarlaEngineThread : public QThread | |||
| { | |||
| @@ -1,5 +1,5 @@ | |||
| /* | |||
| * Carla Engine | |||
| * Carla JACK Engine | |||
| * Copyright (C) 2011-2012 Filipe Coelho <falktx@falktx.com> | |||
| * | |||
| * This program is free software; you can redistribute it and/or modify | |||
| @@ -1,5 +1,5 @@ | |||
| /* | |||
| * Carla Backend | |||
| * Carla Plugin Engine | |||
| * Copyright (C) 2012 Filipe Coelho <falktx@falktx.com> | |||
| * | |||
| * This program is free software; you can redistribute it and/or modify | |||
| @@ -454,7 +454,7 @@ protected: | |||
| //#endif | |||
| } | |||
| void d_run(const float** inputs, float** outputs, uint32_t frames, uint32_t midiEventCount, const DISTRHO::MidiEvent* midiEvents) | |||
| void d_run(float** inputs, float** outputs, uint32_t frames, uint32_t midiEventCount, const DISTRHO::MidiEvent* midiEvents) | |||
| { | |||
| if (maxPluginNumber() == 0) | |||
| return; | |||
| @@ -1,5 +1,5 @@ | |||
| /* | |||
| * Carla Engine | |||
| * Carla RtAudio Engine | |||
| * Copyright (C) 2012 Filipe Coelho <falktx@falktx.com> | |||
| * | |||
| * This program is free software; you can redistribute it and/or modify | |||
| @@ -34,7 +34,6 @@ | |||
| #include <vector> | |||
| typedef LADSPA_Data* LADSPA_DataPtr; | |||
| typedef const LADSPA_Data* LADSPA_DataConstPtr; | |||
| typedef std::vector<LADSPA_Data> LADSPA_DataVector; | |||
| typedef std::vector<LADSPA_DataPtr> LADSPA_DataPtrVector; | |||
| @@ -296,7 +295,7 @@ private: | |||
| PluginInternal plugin; | |||
| // LADSPA ports | |||
| LADSPA_DataConstPtr portAudioIns[DISTRHO_PLUGIN_NUM_INPUTS]; | |||
| LADSPA_DataPtr portAudioIns[DISTRHO_PLUGIN_NUM_INPUTS]; | |||
| LADSPA_DataPtr portAudioOuts[DISTRHO_PLUGIN_NUM_INPUTS]; | |||
| LADSPA_DataPtrVector portControls; | |||
| #if DISTRHO_PLUGIN_WANT_LATENCY | |||
| @@ -153,9 +153,9 @@ URI_CANVAS_WIDTH = "http://ladish.org/ns/canvas/width" | |||
| URI_CANVAS_HEIGHT = "http://ladish.org/ns/canvas/height" | |||
| URI_CANVAS_X = "http://ladish.org/ns/canvas/x" | |||
| URI_CANVAS_Y = "http://ladish.org/ns/canvas/y" | |||
| URI_CANVAS_SPLIT = "http://kxstudio.sourceforge.net/ns/canvas/split" | |||
| URI_CANVAS_X_SPLIT = "http://kxstudio.sourceforge.net/ns/canvas/x_split" | |||
| URI_CANVAS_Y_SPLIT = "http://kxstudio.sourceforge.net/ns/canvas/y_split" | |||
| URI_CANVAS_SPLIT = "http://kxstudio.sf.net/ns/canvas/split" | |||
| URI_CANVAS_X_SPLIT = "http://kxstudio.sf.net/ns/canvas/x_split" | |||
| URI_CANVAS_Y_SPLIT = "http://kxstudio.sf.net/ns/canvas/y_split" | |||
| DEFAULT_CANVAS_WIDTH = 3100 | |||
| DEFAULT_CANVAS_HEIGHT = 2400 | |||
| @@ -71,7 +71,8 @@ PARAMETER_USES_CUSTOM_TEXT = 0x80 | |||
| # group custom data types | |||
| CUSTOM_DATA_INVALID = None | |||
| CUSTOM_DATA_STRING = "urn:carla:string" | |||
| CUSTOM_DATA_CHUNK = "http://kxstudio.sf.net/ns/carla/chunk" | |||
| CUSTOM_DATA_STRING = "http://kxstudio.sf.net/ns/carla/string" | |||
| # enum BinaryType | |||
| BINARY_NONE = 0 | |||