| @@ -83,13 +83,14 @@ const unsigned int PARAMETER_USES_CUSTOM_TEXT = 0x80; //!< Parameter uses custom | |||||
| /*! | /*! | ||||
| * @defgroup CustomDataTypes Custom Data types | * @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 | * 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; | const char* value; | ||||
| CustomData() | CustomData() | ||||
| : type(CUSTOM_DATA_INVALID), | |||||
| : type(nullptr), | |||||
| key(nullptr), | key(nullptr), | ||||
| value(nullptr) {} | value(nullptr) {} | ||||
| }; | }; | ||||
| /**@}*/ | /**@}*/ | ||||
| // forward declarations of commonly used Carla classes | |||||
| class CarlaEngine; | |||||
| class CarlaPlugin; | |||||
| CARLA_BACKEND_END_NAMESPACE | CARLA_BACKEND_END_NAMESPACE | ||||
| #endif // CARLA_BACKEND_HPP | #endif // CARLA_BACKEND_HPP | ||||
| @@ -1,5 +1,5 @@ | |||||
| /* | /* | ||||
| * Carla Backend | |||||
| * Carla Plugin Engine | |||||
| * Copyright (C) 2012 Filipe Coelho <falktx@falktx.com> | * Copyright (C) 2012 Filipe Coelho <falktx@falktx.com> | ||||
| * | * | ||||
| * This program is free software; you can redistribute it and/or modify | * 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 | // 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 | #ifndef BUILD_BRIDGE | ||||
| void CarlaEngine::osc_send_control_add_plugin_start(const int32_t pluginId, const char* const pluginName) | 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); | void setOscBridgeData(const CarlaOscData* const oscData); | ||||
| #endif | #endif | ||||
| void osc_send_peaks(CarlaPlugin* const plugin, const unsigned short& id); | |||||
| #ifdef BUILD_BRIDGE | #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_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); | 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 = DEBUG | ||||
| DEFINES += QTCREATOR_TEST | DEFINES += QTCREATOR_TEST | ||||
| # JACK | |||||
| DEFINES += CARLA_ENGINE_JACK | DEFINES += CARLA_ENGINE_JACK | ||||
| # RtAudio/RtMidi | |||||
| DEFINES += CARLA_ENGINE_RTAUDIO HAVE_GETTIMEOFDAY _FORTIFY_SOURCE=2 | 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 += __LINUX_ALSA__ __LINUX_ALSASEQ__ __LINUX_PULSE__ __UNIX_JACK__ | ||||
| DEFINES += __RTAUDIO_DEBUG__ __RTMIDI_DEBUG__ | DEFINES += __RTAUDIO_DEBUG__ __RTMIDI_DEBUG__ | ||||
| # DISTRHO Plugin | |||||
| DEFINES += CARLA_ENGINE_PLUGIN | |||||
| DEFINES += DISTRHO_PLUGIN_TARGET_DSSI | |||||
| # Misc | |||||
| DEFINES += WANT_LV2 | DEFINES += WANT_LV2 | ||||
| PKGCONFIG = liblo jack alsa libpulse-simple | PKGCONFIG = liblo jack alsa libpulse-simple | ||||
| @@ -22,7 +30,7 @@ TARGET = carla_engine | |||||
| TEMPLATE = lib | TEMPLATE = lib | ||||
| VERSION = 0.5.0 | VERSION = 0.5.0 | ||||
| SOURCES = \ | |||||
| SOURCES = \ | |||||
| carla_engine.cpp \ | carla_engine.cpp \ | ||||
| carla_engine_osc.cpp \ | carla_engine_osc.cpp \ | ||||
| carla_engine_thread.cpp \ | carla_engine_thread.cpp \ | ||||
| @@ -30,18 +38,21 @@ SOURCES = \ | |||||
| rtaudio.cpp \ | rtaudio.cpp \ | ||||
| plugin.cpp | plugin.cpp | ||||
| HEADERS = \ | |||||
| HEADERS = \ | |||||
| carla_engine.hpp \ | carla_engine.hpp \ | ||||
| carla_engine_osc.hpp \ | carla_engine_osc.hpp \ | ||||
| carla_engine_thread.hpp | carla_engine_thread.hpp | ||||
| HEADERS += \ | |||||
| DistrhoPluginInfo.h | |||||
| INCLUDEPATH = . \ | INCLUDEPATH = . \ | ||||
| ../carla-backend \ | ../carla-backend \ | ||||
| ../carla-includes \ | ../carla-includes \ | ||||
| ../carla-plugin \ | ../carla-plugin \ | ||||
| ../carla-utils | ../carla-utils | ||||
| # Jack | |||||
| # JACK | |||||
| INCLUDEPATH += ../carla-jackbridge | INCLUDEPATH += ../carla-jackbridge | ||||
| # RtAudio/RtMidi | # RtAudio/RtMidi | ||||
| @@ -51,6 +62,6 @@ SOURCES += rtaudio-4.0.11/RtAudio.cpp | |||||
| SOURCES += rtmidi-2.0.1/RtMidi.cpp | SOURCES += rtmidi-2.0.1/RtMidi.cpp | ||||
| # Plugin | # Plugin | ||||
| INCLUDEPATH += distrho-plugin-toolkit | |||||
| INCLUDEPATH += ../distrho-plugin-toolkit | |||||
| QMAKE_CXXFLAGS *= -std=c++0x | QMAKE_CXXFLAGS *= -std=c++0x | ||||
| @@ -483,7 +483,7 @@ int CarlaEngineOsc::handleMsgExiting(CARLA_ENGINE_OSC_HANDLE_ARGS1) | |||||
| qDebug("CarlaEngineOsc::handleMsgExiting()"); | qDebug("CarlaEngineOsc::handleMsgExiting()"); | ||||
| // TODO - check for non-UIs (dssi-vst) and set to -1 instead | // 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(); | plugin->freeOscData(); | ||||
| return 0; | return 0; | ||||
| @@ -49,8 +49,9 @@ | |||||
| CARLA_BACKEND_START_NAMESPACE | CARLA_BACKEND_START_NAMESPACE | ||||
| class CarlaEngine; | |||||
| class CarlaPlugin; | |||||
| #if 0 | |||||
| } // Fix editor indentation | |||||
| #endif | |||||
| class CarlaEngineOsc | class CarlaEngineOsc | ||||
| { | { | ||||
| @@ -84,74 +84,52 @@ void CarlaEngineThread::run() | |||||
| { | { | ||||
| CarlaPlugin* const plugin = engine->getPluginUnchecked(i); | CarlaPlugin* const plugin = engine->getPluginUnchecked(i); | ||||
| if (plugin && plugin->enabled()) | |||||
| { | |||||
| if (! (plugin && plugin->enabled())) | |||||
| continue; | |||||
| #ifndef BUILD_BRIDGE | #ifndef BUILD_BRIDGE | ||||
| const unsigned short id = plugin->id(); | |||||
| const unsigned short id = plugin->id(); | |||||
| #endif | #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 | // 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 | #ifdef BUILD_BRIDGE | ||||
| engine->osc_send_bridge_set_parameter_value(i, value); | |||||
| engine->osc_send_bridge_set_parameter_value(j, value); | |||||
| #else | #else | ||||
| engine->osc_send_control_set_parameter_value(id, i, value); | |||||
| engine->osc_send_control_set_parameter_value(id, j, value); | |||||
| #endif | #endif | ||||
| } | |||||
| } | } | ||||
| } | } | ||||
| // ------------------------------------------------------- | |||||
| // Update OSC control client (peaks) | |||||
| // --------------------------------------------------- | |||||
| // Update OSC control client peaks | |||||
| if (oscControlRegisted) | 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 | CARLA_BACKEND_START_NAMESPACE | ||||
| class CarlaEngine; | |||||
| #if 0 | |||||
| } // Fix editor indentation | |||||
| #endif | |||||
| class CarlaEngineThread : public QThread | class CarlaEngineThread : public QThread | ||||
| { | { | ||||
| @@ -1,5 +1,5 @@ | |||||
| /* | /* | ||||
| * Carla Engine | |||||
| * Carla JACK Engine | |||||
| * Copyright (C) 2011-2012 Filipe Coelho <falktx@falktx.com> | * Copyright (C) 2011-2012 Filipe Coelho <falktx@falktx.com> | ||||
| * | * | ||||
| * This program is free software; you can redistribute it and/or modify | * 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> | * Copyright (C) 2012 Filipe Coelho <falktx@falktx.com> | ||||
| * | * | ||||
| * This program is free software; you can redistribute it and/or modify | * This program is free software; you can redistribute it and/or modify | ||||
| @@ -454,7 +454,7 @@ protected: | |||||
| //#endif | //#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) | if (maxPluginNumber() == 0) | ||||
| return; | return; | ||||
| @@ -1,5 +1,5 @@ | |||||
| /* | /* | ||||
| * Carla Engine | |||||
| * Carla RtAudio Engine | |||||
| * Copyright (C) 2012 Filipe Coelho <falktx@falktx.com> | * Copyright (C) 2012 Filipe Coelho <falktx@falktx.com> | ||||
| * | * | ||||
| * This program is free software; you can redistribute it and/or modify | * This program is free software; you can redistribute it and/or modify | ||||
| @@ -34,7 +34,6 @@ | |||||
| #include <vector> | #include <vector> | ||||
| typedef LADSPA_Data* LADSPA_DataPtr; | typedef LADSPA_Data* LADSPA_DataPtr; | ||||
| typedef const LADSPA_Data* LADSPA_DataConstPtr; | |||||
| typedef std::vector<LADSPA_Data> LADSPA_DataVector; | typedef std::vector<LADSPA_Data> LADSPA_DataVector; | ||||
| typedef std::vector<LADSPA_DataPtr> LADSPA_DataPtrVector; | typedef std::vector<LADSPA_DataPtr> LADSPA_DataPtrVector; | ||||
| @@ -296,7 +295,7 @@ private: | |||||
| PluginInternal plugin; | PluginInternal plugin; | ||||
| // LADSPA ports | // LADSPA ports | ||||
| LADSPA_DataConstPtr portAudioIns[DISTRHO_PLUGIN_NUM_INPUTS]; | |||||
| LADSPA_DataPtr portAudioIns[DISTRHO_PLUGIN_NUM_INPUTS]; | |||||
| LADSPA_DataPtr portAudioOuts[DISTRHO_PLUGIN_NUM_INPUTS]; | LADSPA_DataPtr portAudioOuts[DISTRHO_PLUGIN_NUM_INPUTS]; | ||||
| LADSPA_DataPtrVector portControls; | LADSPA_DataPtrVector portControls; | ||||
| #if DISTRHO_PLUGIN_WANT_LATENCY | #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_HEIGHT = "http://ladish.org/ns/canvas/height" | ||||
| URI_CANVAS_X = "http://ladish.org/ns/canvas/x" | URI_CANVAS_X = "http://ladish.org/ns/canvas/x" | ||||
| URI_CANVAS_Y = "http://ladish.org/ns/canvas/y" | 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_WIDTH = 3100 | ||||
| DEFAULT_CANVAS_HEIGHT = 2400 | DEFAULT_CANVAS_HEIGHT = 2400 | ||||
| @@ -71,7 +71,8 @@ PARAMETER_USES_CUSTOM_TEXT = 0x80 | |||||
| # group custom data types | # group custom data types | ||||
| CUSTOM_DATA_INVALID = None | 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 | # enum BinaryType | ||||
| BINARY_NONE = 0 | BINARY_NONE = 0 | ||||