@@ -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 | |||