| @@ -32,7 +32,6 @@ | |||||
| #ifdef USE_JUCE | #ifdef USE_JUCE | ||||
| #include "juce_audio_basics.h" | #include "juce_audio_basics.h" | ||||
| using juce::FloatVectorOperations; | using juce::FloatVectorOperations; | ||||
| #endif | #endif | ||||
| @@ -366,7 +365,9 @@ unsigned int CarlaEngine::getDriverCount() | |||||
| #ifndef BUILD_BRIDGE | #ifndef BUILD_BRIDGE | ||||
| count += getRtAudioApiCount(); | count += getRtAudioApiCount(); | ||||
| # ifdef USE_JUCE | |||||
| count += getJuceApiCount(); | count += getJuceApiCount(); | ||||
| # endif | |||||
| #endif | #endif | ||||
| return count; | return count; | ||||
| @@ -385,10 +386,12 @@ const char* CarlaEngine::getDriverName(const unsigned int index) | |||||
| if (rtAudioIndex < getRtAudioApiCount()) | if (rtAudioIndex < getRtAudioApiCount()) | ||||
| return getRtAudioApiName(rtAudioIndex); | return getRtAudioApiName(rtAudioIndex); | ||||
| # ifdef USE_JUCE | |||||
| const unsigned int juceIndex(index-rtAudioIndex-1); | const unsigned int juceIndex(index-rtAudioIndex-1); | ||||
| if (juceIndex < getJuceApiCount()) | if (juceIndex < getJuceApiCount()) | ||||
| return getJuceApiName(juceIndex); | return getJuceApiName(juceIndex); | ||||
| # endif | |||||
| #endif | #endif | ||||
| carla_stderr("CarlaEngine::getDriverName(%i) - invalid index", index); | carla_stderr("CarlaEngine::getDriverName(%i) - invalid index", index); | ||||
| @@ -411,10 +414,12 @@ const char** CarlaEngine::getDriverDeviceNames(const unsigned int index) | |||||
| if (rtAudioIndex < getRtAudioApiCount()) | if (rtAudioIndex < getRtAudioApiCount()) | ||||
| return getRtAudioApiDeviceNames(rtAudioIndex); | return getRtAudioApiDeviceNames(rtAudioIndex); | ||||
| # ifdef USE_JUCE | |||||
| const unsigned int juceIndex(index-rtAudioIndex-1); | const unsigned int juceIndex(index-rtAudioIndex-1); | ||||
| if (juceIndex < getJuceApiCount()) | if (juceIndex < getJuceApiCount()) | ||||
| return getJuceApiDeviceNames(juceIndex); | return getJuceApiDeviceNames(juceIndex); | ||||
| # endif | |||||
| #endif | #endif | ||||
| carla_stderr("CarlaEngine::getDriverDeviceNames(%i) - invalid index", index); | carla_stderr("CarlaEngine::getDriverDeviceNames(%i) - invalid index", index); | ||||
| @@ -277,7 +277,7 @@ public: | |||||
| pData->active = false; | pData->active = false; | ||||
| } | } | ||||
| if (pData->osc.thread.isThreadRunning()) | |||||
| if (pData->osc.thread.isRunning()) | |||||
| { | { | ||||
| fShmControl.writeOpcode(kPluginBridgeOpcodeQuit); | fShmControl.writeOpcode(kPluginBridgeOpcodeQuit); | ||||
| fShmControl.commitWrite(); | fShmControl.commitWrite(); | ||||
| @@ -291,7 +291,7 @@ public: | |||||
| } | } | ||||
| pData->osc.data.free(); | pData->osc.data.free(); | ||||
| pData->osc.thread.stopThread(6000); | |||||
| pData->osc.thread.stop(6000); | |||||
| if (fNeedsSemDestroy) | if (fNeedsSemDestroy) | ||||
| { | { | ||||
| @@ -588,7 +588,7 @@ public: | |||||
| void idleGui() override | void idleGui() override | ||||
| { | { | ||||
| if (! pData->osc.thread.isThreadRunning()) | |||||
| if (! pData->osc.thread.isRunning()) | |||||
| carla_stderr2("TESTING: Bridge has closed!"); | carla_stderr2("TESTING: Bridge has closed!"); | ||||
| CarlaPlugin::idleGui(); | CarlaPlugin::idleGui(); | ||||
| @@ -602,7 +602,7 @@ public: | |||||
| CARLA_SAFE_ASSERT_RETURN(pData->engine != nullptr,); | CARLA_SAFE_ASSERT_RETURN(pData->engine != nullptr,); | ||||
| carla_debug("BridgePlugin::reload() - start"); | carla_debug("BridgePlugin::reload() - start"); | ||||
| const ProcessMode processMode(pData->engine->getProccessMode()); | |||||
| const EngineProcessMode processMode(pData->engine->getProccessMode()); | |||||
| // Safely disable plugin for reload | // Safely disable plugin for reload | ||||
| const ScopedDisabler sd(this); | const ScopedDisabler sd(this); | ||||
| @@ -635,7 +635,7 @@ public: | |||||
| { | { | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -659,7 +659,7 @@ public: | |||||
| { | { | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -682,7 +682,7 @@ public: | |||||
| { | { | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -698,7 +698,7 @@ public: | |||||
| { | { | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -750,7 +750,13 @@ public: | |||||
| { | { | ||||
| // disable any output sound | // disable any output sound | ||||
| for (i=0; i < pData->audioOut.count; ++i) | for (i=0; i < pData->audioOut.count; ++i) | ||||
| { | |||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(outBuffer[i], frames); | FloatVectorOperations::clear(outBuffer[i], frames); | ||||
| #else | |||||
| carla_zeroFloat(outBuffer[i], frames); | |||||
| #endif | |||||
| } | |||||
| return; | return; | ||||
| } | } | ||||
| @@ -1055,7 +1061,12 @@ public: | |||||
| else if (! pData->singleMutex.tryLock()) | else if (! pData->singleMutex.tryLock()) | ||||
| { | { | ||||
| for (i=0; i < pData->audioOut.count; ++i) | for (i=0; i < pData->audioOut.count; ++i) | ||||
| { | |||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(outBuffer[i], frames); | FloatVectorOperations::clear(outBuffer[i], frames); | ||||
| #else | |||||
| #endif | |||||
| } | |||||
| return false; | return false; | ||||
| } | } | ||||
| @@ -1064,7 +1075,12 @@ public: | |||||
| // Reset audio buffers | // Reset audio buffers | ||||
| for (i=0; i < fInfo.aIns; ++i) | for (i=0; i < fInfo.aIns; ++i) | ||||
| { | |||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::copy(fShmAudioPool.data + (i * frames), inBuffer[i], frames); | FloatVectorOperations::copy(fShmAudioPool.data + (i * frames), inBuffer[i], frames); | ||||
| #else | |||||
| #endif | |||||
| } | |||||
| // -------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------- | ||||
| // Run plugin | // Run plugin | ||||
| @@ -1079,7 +1095,12 @@ public: | |||||
| } | } | ||||
| for (i=0; i < fInfo.aOuts; ++i) | for (i=0; i < fInfo.aOuts; ++i) | ||||
| { | |||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::copy(outBuffer[i], fShmAudioPool.data + ((i + fInfo.aIns) * frames), frames); | FloatVectorOperations::copy(outBuffer[i], fShmAudioPool.data + ((i + fInfo.aIns) * frames), frames); | ||||
| #else | |||||
| #endif | |||||
| } | |||||
| // -------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------- | ||||
| // Post-processing (dry/wet, volume and balance) | // Post-processing (dry/wet, volume and balance) | ||||
| @@ -1112,7 +1133,10 @@ public: | |||||
| if (isPair) | if (isPair) | ||||
| { | { | ||||
| CARLA_ASSERT(i+1 < pData->audioOut.count); | CARLA_ASSERT(i+1 < pData->audioOut.count); | ||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::copy(oldBufLeft, outBuffer[i], frames); | FloatVectorOperations::copy(oldBufLeft, outBuffer[i], frames); | ||||
| #else | |||||
| #endif | |||||
| } | } | ||||
| float balRangeL = (pData->postProc.balanceLeft + 1.0f)/2.0f; | float balRangeL = (pData->postProc.balanceLeft + 1.0f)/2.0f; | ||||
| @@ -1486,7 +1510,7 @@ public: | |||||
| break; | break; | ||||
| if (std::strcmp(key, CARLA_BRIDGE_MSG_HIDE_GUI) == 0) | if (std::strcmp(key, CARLA_BRIDGE_MSG_HIDE_GUI) == 0) | ||||
| pData->engine->callback(CALLBACK_SHOW_GUI, fId, 0, 0, 0.0f, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_UI_STATE_CHANGED, fId, 0, 0, 0.0f, nullptr); | |||||
| else if (std::strcmp(key, CARLA_BRIDGE_MSG_SAVED) == 0) | else if (std::strcmp(key, CARLA_BRIDGE_MSG_SAVED) == 0) | ||||
| fSaved = true; | fSaved = true; | ||||
| @@ -1775,12 +1799,12 @@ public: | |||||
| std::strncat(shmIdStr, &fShmControl.filename[fShmControl.filename.length()-6], 6); | std::strncat(shmIdStr, &fShmControl.filename[fShmControl.filename.length()-6], 6); | ||||
| pData->osc.thread.setOscData(bridgeBinary, label, getPluginTypeAsString(fPluginType), shmIdStr); | pData->osc.thread.setOscData(bridgeBinary, label, getPluginTypeAsString(fPluginType), shmIdStr); | ||||
| pData->osc.thread.startThread(7); | |||||
| pData->osc.thread.start(); | |||||
| } | } | ||||
| for (int i=0; i < 200; ++i) | for (int i=0; i < 200; ++i) | ||||
| { | { | ||||
| if (fInitiated || ! pData->osc.thread.isThreadRunning()) | |||||
| if (fInitiated || ! pData->osc.thread.isRunning()) | |||||
| break; | break; | ||||
| carla_msleep(50); | carla_msleep(50); | ||||
| } | } | ||||
| @@ -1790,7 +1814,7 @@ public: | |||||
| // unregister so it gets handled properly | // unregister so it gets handled properly | ||||
| pData->engine->registerEnginePlugin(fId, nullptr); | pData->engine->registerEnginePlugin(fId, nullptr); | ||||
| pData->osc.thread.stopThread(6000); | |||||
| pData->osc.thread.stop(6000); | |||||
| if (! fInitError) | if (! fInitError) | ||||
| pData->engine->setLastError("Timeout while waiting for a response from plugin-bridge\n(or the plugin crashed on initialization?)"); | pData->engine->setLastError("Timeout while waiting for a response from plugin-bridge\n(or the plugin crashed on initialization?)"); | ||||
| @@ -1911,7 +1935,7 @@ CarlaPlugin* CarlaPlugin::newBridge(const Initializer& init, BinaryType btype, P | |||||
| plugin->reload(); | plugin->reload(); | ||||
| if (init.engine->getProccessMode() == PROCESS_MODE_CONTINUOUS_RACK && ! plugin->canRunInRack()) | |||||
| if (init.engine->getProccessMode() == ENGINE_PROCESS_MODE_CONTINUOUS_RACK && ! plugin->canRunInRack()) | |||||
| { | { | ||||
| init.engine->setLastError("Carla's rack mode can only work with Stereo Bridged plugins, sorry!"); | init.engine->setLastError("Carla's rack mode can only work with Stereo Bridged plugins, sorry!"); | ||||
| delete plugin; | delete plugin; | ||||
| @@ -18,9 +18,11 @@ | |||||
| #include "CarlaPluginInternal.hpp" | #include "CarlaPluginInternal.hpp" | ||||
| #include "CarlaLibCounter.hpp" | #include "CarlaLibCounter.hpp" | ||||
| #ifdef USE_JUCE | |||||
| #include "juce_data_structures.h" | #include "juce_data_structures.h" | ||||
| using namespace juce; | using namespace juce; | ||||
| #endif | |||||
| CARLA_BACKEND_START_NAMESPACE | CARLA_BACKEND_START_NAMESPACE | ||||
| @@ -107,6 +109,7 @@ void* CarlaPluginProtectedData::uiLibSymbol(const char* const symbol) | |||||
| void CarlaPluginProtectedData::saveSetting(const unsigned int option, const bool yesNo) | void CarlaPluginProtectedData::saveSetting(const unsigned int option, const bool yesNo) | ||||
| { | { | ||||
| #ifdef USE_JUCE | |||||
| PropertiesFile::Options opts; | PropertiesFile::Options opts; | ||||
| opts.applicationName = "common"; // TODO, (const char*)idStr | opts.applicationName = "common"; // TODO, (const char*)idStr | ||||
| opts.filenameSuffix = ".cfg"; | opts.filenameSuffix = ".cfg"; | ||||
| @@ -160,10 +163,12 @@ void CarlaPluginProtectedData::saveSetting(const unsigned int option, const bool | |||||
| appProps.saveIfNeeded(); | appProps.saveIfNeeded(); | ||||
| appProps.closeFiles(); | appProps.closeFiles(); | ||||
| #endif | |||||
| } | } | ||||
| unsigned int CarlaPluginProtectedData::loadSettings(const unsigned int options, const unsigned int availOptions) | unsigned int CarlaPluginProtectedData::loadSettings(const unsigned int options, const unsigned int availOptions) | ||||
| { | { | ||||
| #ifdef USE_JUCE | |||||
| PropertiesFile::Options opts; | PropertiesFile::Options opts; | ||||
| opts.applicationName = "common"; // TODO, (const char*)idStr | opts.applicationName = "common"; // TODO, (const char*)idStr | ||||
| opts.filenameSuffix = ".cfg"; | opts.filenameSuffix = ".cfg"; | ||||
| @@ -209,6 +214,8 @@ unsigned int CarlaPluginProtectedData::loadSettings(const unsigned int options, | |||||
| #undef CHECK_AND_SET_OPTION | #undef CHECK_AND_SET_OPTION | ||||
| return newOptions; | return newOptions; | ||||
| #endif | |||||
| return 0x0; | |||||
| } | } | ||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| @@ -229,20 +236,20 @@ CarlaPlugin::CarlaPlugin(CarlaEngine* const engine, const unsigned int id) | |||||
| switch (engine->getProccessMode()) | switch (engine->getProccessMode()) | ||||
| { | { | ||||
| case PROCESS_MODE_SINGLE_CLIENT: | |||||
| case PROCESS_MODE_MULTIPLE_CLIENTS: | |||||
| case ENGINE_PROCESS_MODE_SINGLE_CLIENT: | |||||
| case ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS: | |||||
| CARLA_ASSERT(id < MAX_DEFAULT_PLUGINS); | CARLA_ASSERT(id < MAX_DEFAULT_PLUGINS); | ||||
| break; | break; | ||||
| case PROCESS_MODE_CONTINUOUS_RACK: | |||||
| case ENGINE_PROCESS_MODE_CONTINUOUS_RACK: | |||||
| CARLA_ASSERT(id < MAX_RACK_PLUGINS); | CARLA_ASSERT(id < MAX_RACK_PLUGINS); | ||||
| break; | break; | ||||
| case PROCESS_MODE_PATCHBAY: | |||||
| case ENGINE_PROCESS_MODE_PATCHBAY: | |||||
| CARLA_ASSERT(id < MAX_PATCHBAY_PLUGINS); | CARLA_ASSERT(id < MAX_PATCHBAY_PLUGINS); | ||||
| break; | break; | ||||
| case PROCESS_MODE_BRIDGE: | |||||
| case ENGINE_PROCESS_MODE_BRIDGE: | |||||
| CARLA_ASSERT(id == 0); | CARLA_ASSERT(id == 0); | ||||
| break; | break; | ||||
| } | } | ||||
| @@ -509,6 +516,7 @@ const SaveState& CarlaPlugin::getSaveState() | |||||
| pData->saveState.ctrlChannel = pData->ctrlChannel; | pData->saveState.ctrlChannel = pData->ctrlChannel; | ||||
| #endif | #endif | ||||
| #ifdef USE_JUCE | |||||
| // --------------------------------------------------------------- | // --------------------------------------------------------------- | ||||
| // Chunk | // Chunk | ||||
| @@ -526,6 +534,7 @@ const SaveState& CarlaPlugin::getSaveState() | |||||
| return pData->saveState; | return pData->saveState; | ||||
| } | } | ||||
| } | } | ||||
| #endif | |||||
| // --------------------------------------------------------------- | // --------------------------------------------------------------- | ||||
| // Current Program | // Current Program | ||||
| @@ -582,7 +591,7 @@ const SaveState& CarlaPlugin::getSaveState() | |||||
| // --------------------------------------------------------------- | // --------------------------------------------------------------- | ||||
| // Custom Data | // Custom Data | ||||
| for (NonRtList<CustomData>::Itenerator it = pData->custom.begin(); it.valid(); it.next()) | |||||
| for (List<CustomData>::Itenerator it = pData->custom.begin(); it.valid(); it.next()) | |||||
| { | { | ||||
| const CustomData& cData(*it); | const CustomData& cData(*it); | ||||
| @@ -609,7 +618,7 @@ void CarlaPlugin::loadSaveState(const SaveState& saveState) | |||||
| // --------------------------------------------------------------- | // --------------------------------------------------------------- | ||||
| // Part 1 - PRE-set custom data (only that which reload programs) | // Part 1 - PRE-set custom data (only that which reload programs) | ||||
| for (NonRtList<StateCustomData*>::Itenerator it = saveState.customData.begin(); it.valid(); it.next()) | |||||
| for (List<StateCustomData*>::Itenerator it = saveState.customData.begin(); it.valid(); it.next()) | |||||
| { | { | ||||
| const StateCustomData* const stateCustomData(*it); | const StateCustomData* const stateCustomData(*it); | ||||
| const char* const key(stateCustomData->key); | const char* const key(stateCustomData->key); | ||||
| @@ -667,7 +676,7 @@ void CarlaPlugin::loadSaveState(const SaveState& saveState) | |||||
| // --------------------------------------------------------------- | // --------------------------------------------------------------- | ||||
| // Part 4a - get plugin parameter symbols | // Part 4a - get plugin parameter symbols | ||||
| NonRtList<ParamSymbol*> paramSymbols; | |||||
| List<ParamSymbol*> paramSymbols; | |||||
| if (getType() == PLUGIN_LADSPA || getType() == PLUGIN_LV2) | if (getType() == PLUGIN_LADSPA || getType() == PLUGIN_LV2) | ||||
| { | { | ||||
| @@ -689,7 +698,7 @@ void CarlaPlugin::loadSaveState(const SaveState& saveState) | |||||
| const float sampleRate(pData->engine->getSampleRate()); | const float sampleRate(pData->engine->getSampleRate()); | ||||
| for (NonRtList<StateParameter*>::Itenerator it = saveState.parameters.begin(); it.valid(); it.next()) | |||||
| for (List<StateParameter*>::Itenerator it = saveState.parameters.begin(); it.valid(); it.next()) | |||||
| { | { | ||||
| StateParameter* const stateParameter(*it); | StateParameter* const stateParameter(*it); | ||||
| @@ -700,7 +709,7 @@ void CarlaPlugin::loadSaveState(const SaveState& saveState) | |||||
| // Try to set by symbol, otherwise use index | // Try to set by symbol, otherwise use index | ||||
| if (stateParameter->symbol != nullptr && stateParameter->symbol[0] != '\0') | if (stateParameter->symbol != nullptr && stateParameter->symbol[0] != '\0') | ||||
| { | { | ||||
| for (NonRtList<ParamSymbol*>::Itenerator it = paramSymbols.begin(); it.valid(); it.next()) | |||||
| for (List<ParamSymbol*>::Itenerator it = paramSymbols.begin(); it.valid(); it.next()) | |||||
| { | { | ||||
| ParamSymbol* const paramSymbol(*it); | ParamSymbol* const paramSymbol(*it); | ||||
| @@ -721,7 +730,7 @@ void CarlaPlugin::loadSaveState(const SaveState& saveState) | |||||
| // Symbol only | // Symbol only | ||||
| if (stateParameter->symbol != nullptr && stateParameter->symbol[0] != '\0') | if (stateParameter->symbol != nullptr && stateParameter->symbol[0] != '\0') | ||||
| { | { | ||||
| for (NonRtList<ParamSymbol*>::Itenerator it = paramSymbols.begin(); it.valid(); it.next()) | |||||
| for (List<ParamSymbol*>::Itenerator it = paramSymbols.begin(); it.valid(); it.next()) | |||||
| { | { | ||||
| ParamSymbol* const paramSymbol(*it); | ParamSymbol* const paramSymbol(*it); | ||||
| @@ -762,7 +771,7 @@ void CarlaPlugin::loadSaveState(const SaveState& saveState) | |||||
| // --------------------------------------------------------------- | // --------------------------------------------------------------- | ||||
| // Part 4c - clear | // Part 4c - clear | ||||
| for (NonRtList<ParamSymbol*>::Itenerator it = paramSymbols.begin(); it.valid(); it.next()) | |||||
| for (List<ParamSymbol*>::Itenerator it = paramSymbols.begin(); it.valid(); it.next()) | |||||
| { | { | ||||
| ParamSymbol* const paramSymbol(*it); | ParamSymbol* const paramSymbol(*it); | ||||
| delete paramSymbol; | delete paramSymbol; | ||||
| @@ -773,7 +782,7 @@ void CarlaPlugin::loadSaveState(const SaveState& saveState) | |||||
| // --------------------------------------------------------------- | // --------------------------------------------------------------- | ||||
| // Part 5 - set custom data | // Part 5 - set custom data | ||||
| for (NonRtList<StateCustomData*>::Itenerator it = saveState.customData.begin(); it.valid(); it.next()) | |||||
| for (List<StateCustomData*>::Itenerator it = saveState.customData.begin(); it.valid(); it.next()) | |||||
| { | { | ||||
| const StateCustomData* const stateCustomData(*it); | const StateCustomData* const stateCustomData(*it); | ||||
| const char* const key(stateCustomData->key); | const char* const key(stateCustomData->key); | ||||
| @@ -812,6 +821,7 @@ bool CarlaPlugin::saveStateToFile(const char* const filename) | |||||
| CARLA_SAFE_ASSERT_RETURN(filename != nullptr && filename[0] != '\0', false); | CARLA_SAFE_ASSERT_RETURN(filename != nullptr && filename[0] != '\0', false); | ||||
| carla_debug("CarlaPlugin::saveStateToFile(\"%s\")", filename); | carla_debug("CarlaPlugin::saveStateToFile(\"%s\")", filename); | ||||
| #ifdef USE_JUCE | |||||
| File file(filename); | File file(filename); | ||||
| String content; | String content; | ||||
| @@ -825,6 +835,9 @@ bool CarlaPlugin::saveStateToFile(const char* const filename) | |||||
| out << "</CARLA-PRESET>\n"; | out << "</CARLA-PRESET>\n"; | ||||
| return file.replaceWithData(out.getData(), out.getDataSize()); | return file.replaceWithData(out.getData(), out.getDataSize()); | ||||
| #else | |||||
| return false; | |||||
| #endif | |||||
| } | } | ||||
| bool CarlaPlugin::loadStateFromFile(const char* const filename) | bool CarlaPlugin::loadStateFromFile(const char* const filename) | ||||
| @@ -832,6 +845,7 @@ bool CarlaPlugin::loadStateFromFile(const char* const filename) | |||||
| CARLA_SAFE_ASSERT_RETURN(filename != nullptr && filename[0] != '\0', false); | CARLA_SAFE_ASSERT_RETURN(filename != nullptr && filename[0] != '\0', false); | ||||
| carla_debug("CarlaPlugin::loadStateFromFile(\"%s\")", filename); | carla_debug("CarlaPlugin::loadStateFromFile(\"%s\")", filename); | ||||
| #ifdef USE_JUCE | |||||
| File file(filename); | File file(filename); | ||||
| XmlDocument xml(file); | XmlDocument xml(file); | ||||
| @@ -859,6 +873,7 @@ bool CarlaPlugin::loadStateFromFile(const char* const filename) | |||||
| delete xmlCheck; | delete xmlCheck; | ||||
| return false; | return false; | ||||
| } | } | ||||
| #endif | |||||
| pData->engine->setLastError("Not a valid file"); | pData->engine->setLastError("Not a valid file"); | ||||
| return false; | return false; | ||||
| @@ -932,7 +947,7 @@ void CarlaPlugin::setActive(const bool active, const bool sendOsc, const bool se | |||||
| pData->engine->oscSend_control_set_parameter_value(fId, PARAMETER_ACTIVE, value); | pData->engine->oscSend_control_set_parameter_value(fId, PARAMETER_ACTIVE, value); | ||||
| if (sendCallback) | if (sendCallback) | ||||
| pData->engine->callback(CALLBACK_PARAMETER_VALUE_CHANGED, fId, PARAMETER_ACTIVE, 0, value, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, fId, PARAMETER_ACTIVE, 0, value, nullptr); | |||||
| #else | #else | ||||
| return; | return; | ||||
| @@ -958,7 +973,7 @@ void CarlaPlugin::setDryWet(const float value, const bool sendOsc, const bool se | |||||
| pData->engine->oscSend_control_set_parameter_value(fId, PARAMETER_DRYWET, fixedValue); | pData->engine->oscSend_control_set_parameter_value(fId, PARAMETER_DRYWET, fixedValue); | ||||
| if (sendCallback) | if (sendCallback) | ||||
| pData->engine->callback(CALLBACK_PARAMETER_VALUE_CHANGED, fId, PARAMETER_DRYWET, 0, fixedValue, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, fId, PARAMETER_DRYWET, 0, fixedValue, nullptr); | |||||
| } | } | ||||
| void CarlaPlugin::setVolume(const float value, const bool sendOsc, const bool sendCallback) | void CarlaPlugin::setVolume(const float value, const bool sendOsc, const bool sendCallback) | ||||
| @@ -976,7 +991,7 @@ void CarlaPlugin::setVolume(const float value, const bool sendOsc, const bool se | |||||
| pData->engine->oscSend_control_set_parameter_value(fId, PARAMETER_VOLUME, fixedValue); | pData->engine->oscSend_control_set_parameter_value(fId, PARAMETER_VOLUME, fixedValue); | ||||
| if (sendCallback) | if (sendCallback) | ||||
| pData->engine->callback(CALLBACK_PARAMETER_VALUE_CHANGED, fId, PARAMETER_VOLUME, 0, fixedValue, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, fId, PARAMETER_VOLUME, 0, fixedValue, nullptr); | |||||
| } | } | ||||
| void CarlaPlugin::setBalanceLeft(const float value, const bool sendOsc, const bool sendCallback) | void CarlaPlugin::setBalanceLeft(const float value, const bool sendOsc, const bool sendCallback) | ||||
| @@ -994,7 +1009,7 @@ void CarlaPlugin::setBalanceLeft(const float value, const bool sendOsc, const bo | |||||
| pData->engine->oscSend_control_set_parameter_value(fId, PARAMETER_BALANCE_LEFT, fixedValue); | pData->engine->oscSend_control_set_parameter_value(fId, PARAMETER_BALANCE_LEFT, fixedValue); | ||||
| if (sendCallback) | if (sendCallback) | ||||
| pData->engine->callback(CALLBACK_PARAMETER_VALUE_CHANGED, fId, PARAMETER_BALANCE_LEFT, 0, fixedValue, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, fId, PARAMETER_BALANCE_LEFT, 0, fixedValue, nullptr); | |||||
| } | } | ||||
| void CarlaPlugin::setBalanceRight(const float value, const bool sendOsc, const bool sendCallback) | void CarlaPlugin::setBalanceRight(const float value, const bool sendOsc, const bool sendCallback) | ||||
| @@ -1012,7 +1027,7 @@ void CarlaPlugin::setBalanceRight(const float value, const bool sendOsc, const b | |||||
| pData->engine->oscSend_control_set_parameter_value(fId, PARAMETER_BALANCE_RIGHT, fixedValue); | pData->engine->oscSend_control_set_parameter_value(fId, PARAMETER_BALANCE_RIGHT, fixedValue); | ||||
| if (sendCallback) | if (sendCallback) | ||||
| pData->engine->callback(CALLBACK_PARAMETER_VALUE_CHANGED, fId, PARAMETER_BALANCE_RIGHT, 0, fixedValue, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, fId, PARAMETER_BALANCE_RIGHT, 0, fixedValue, nullptr); | |||||
| } | } | ||||
| void CarlaPlugin::setPanning(const float value, const bool sendOsc, const bool sendCallback) | void CarlaPlugin::setPanning(const float value, const bool sendOsc, const bool sendCallback) | ||||
| @@ -1030,7 +1045,7 @@ void CarlaPlugin::setPanning(const float value, const bool sendOsc, const bool s | |||||
| pData->engine->oscSend_control_set_parameter_value(fId, PARAMETER_PANNING, fixedValue); | pData->engine->oscSend_control_set_parameter_value(fId, PARAMETER_PANNING, fixedValue); | ||||
| if (sendCallback) | if (sendCallback) | ||||
| pData->engine->callback(CALLBACK_PARAMETER_VALUE_CHANGED, fId, PARAMETER_PANNING, 0, fixedValue, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, fId, PARAMETER_PANNING, 0, fixedValue, nullptr); | |||||
| } | } | ||||
| #endif | #endif | ||||
| @@ -1053,7 +1068,7 @@ void CarlaPlugin::setCtrlChannel(const int8_t channel, const bool sendOsc, const | |||||
| pData->engine->oscSend_control_set_parameter_value(fId, PARAMETER_CTRL_CHANNEL, ctrlf); | pData->engine->oscSend_control_set_parameter_value(fId, PARAMETER_CTRL_CHANNEL, ctrlf); | ||||
| if (sendCallback) | if (sendCallback) | ||||
| pData->engine->callback(CALLBACK_PARAMETER_VALUE_CHANGED, fId, PARAMETER_CTRL_CHANNEL, 0, ctrlf, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, fId, PARAMETER_CTRL_CHANNEL, 0, ctrlf, nullptr); | |||||
| if (fHints & PLUGIN_IS_BRIDGE) | if (fHints & PLUGIN_IS_BRIDGE) | ||||
| osc_send_control(pData->osc.data, PARAMETER_CTRL_CHANNEL, ctrlf); | osc_send_control(pData->osc.data, PARAMETER_CTRL_CHANNEL, ctrlf); | ||||
| @@ -1088,7 +1103,7 @@ void CarlaPlugin::setParameterValue(const uint32_t parameterId, const float valu | |||||
| #endif | #endif | ||||
| if (sendCallback) | if (sendCallback) | ||||
| pData->engine->callback(CALLBACK_PARAMETER_VALUE_CHANGED, fId, parameterId, 0, value, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, fId, parameterId, 0, value, nullptr); | |||||
| #ifdef BUILD_BRIDGE | #ifdef BUILD_BRIDGE | ||||
| return; | return; | ||||
| @@ -1152,7 +1167,7 @@ void CarlaPlugin::setParameterMidiChannel(const uint32_t parameterId, uint8_t ch | |||||
| pData->engine->oscSend_control_set_parameter_midi_channel(fId, parameterId, channel); | pData->engine->oscSend_control_set_parameter_midi_channel(fId, parameterId, channel); | ||||
| if (sendCallback) | if (sendCallback) | ||||
| pData->engine->callback(CALLBACK_PARAMETER_MIDI_CHANNEL_CHANGED, fId, parameterId, channel, 0.0f, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_PARAMETER_MIDI_CHANNEL_CHANGED, fId, parameterId, channel, 0.0f, nullptr); | |||||
| if (fHints & PLUGIN_IS_BRIDGE) | if (fHints & PLUGIN_IS_BRIDGE) | ||||
| {} // TODO | {} // TODO | ||||
| @@ -1181,7 +1196,7 @@ void CarlaPlugin::setParameterMidiCC(const uint32_t parameterId, int16_t cc, con | |||||
| pData->engine->oscSend_control_set_parameter_midi_cc(fId, parameterId, cc); | pData->engine->oscSend_control_set_parameter_midi_cc(fId, parameterId, cc); | ||||
| if (sendCallback) | if (sendCallback) | ||||
| pData->engine->callback(CALLBACK_PARAMETER_MIDI_CC_CHANGED, fId, parameterId, cc, 0.0f, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_PARAMETER_MIDI_CC_CHANGED, fId, parameterId, cc, 0.0f, nullptr); | |||||
| if (fHints & PLUGIN_IS_BRIDGE) | if (fHints & PLUGIN_IS_BRIDGE) | ||||
| {} // TODO | {} // TODO | ||||
| @@ -1217,7 +1232,7 @@ void CarlaPlugin::setCustomData(const char* const type, const char* const key, c | |||||
| bool saveData = true; | bool saveData = true; | ||||
| if (std::strcmp(type, CUSTOM_DATA_STRING) == 0) | |||||
| if (std::strcmp(type, CUSTOM_DATA_TYPE_STRING) == 0) | |||||
| { | { | ||||
| // Ignore some keys | // Ignore some keys | ||||
| if (std::strncmp(key, "OSC:", 4) == 0 || std::strncmp(key, "CarlaAlternateFile", 18) == 0 || std::strcmp(key, "guiVisible") == 0) | if (std::strncmp(key, "OSC:", 4) == 0 || std::strncmp(key, "CarlaAlternateFile", 18) == 0 || std::strcmp(key, "guiVisible") == 0) | ||||
| @@ -1230,7 +1245,7 @@ void CarlaPlugin::setCustomData(const char* const type, const char* const key, c | |||||
| return; | return; | ||||
| // Check if we already have this key | // Check if we already have this key | ||||
| for (NonRtList<CustomData>::Itenerator it = pData->custom.begin(); it.valid(); it.next()) | |||||
| for (List<CustomData>::Itenerator it = pData->custom.begin(); it.valid(); it.next()) | |||||
| { | { | ||||
| CustomData& cData(*it); | CustomData& cData(*it); | ||||
| @@ -1294,7 +1309,7 @@ void CarlaPlugin::setProgram(int32_t index, const bool sendGui, const bool sendO | |||||
| #endif | #endif | ||||
| if (sendCallback) | if (sendCallback) | ||||
| pData->engine->callback(CALLBACK_PROGRAM_CHANGED, fId, fixedIndex, 0, 0.0f, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_PROGRAM_CHANGED, fId, fixedIndex, 0, 0.0f, nullptr); | |||||
| // Change default parameter values | // Change default parameter values | ||||
| if (fixedIndex >= 0) | if (fixedIndex >= 0) | ||||
| @@ -1320,8 +1335,8 @@ void CarlaPlugin::setProgram(int32_t index, const bool sendGui, const bool sendO | |||||
| pData->engine->oscSend_control_set_parameter_value(fId, i, value); | pData->engine->oscSend_control_set_parameter_value(fId, i, value); | ||||
| #endif | #endif | ||||
| pData->engine->callback(CALLBACK_PARAMETER_VALUE_CHANGED, fId, i, 0, value, nullptr); | |||||
| pData->engine->callback(CALLBACK_PARAMETER_DEFAULT_CHANGED, fId, i, 0, value, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, fId, i, 0, value, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_PARAMETER_DEFAULT_CHANGED, fId, i, 0, value, nullptr); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -1357,7 +1372,7 @@ void CarlaPlugin::setMidiProgram(int32_t index, const bool sendGui, const bool s | |||||
| #endif | #endif | ||||
| if (sendCallback) | if (sendCallback) | ||||
| pData->engine->callback(CALLBACK_MIDI_PROGRAM_CHANGED, fId, fixedIndex, 0, 0.0f, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_MIDI_PROGRAM_CHANGED, fId, fixedIndex, 0, 0.0f, nullptr); | |||||
| if (fixedIndex >= 0) | if (fixedIndex >= 0) | ||||
| { | { | ||||
| @@ -1382,8 +1397,8 @@ void CarlaPlugin::setMidiProgram(int32_t index, const bool sendGui, const bool s | |||||
| pData->engine->oscSend_control_set_parameter_value(fId, i, value); | pData->engine->oscSend_control_set_parameter_value(fId, i, value); | ||||
| #endif | #endif | ||||
| pData->engine->callback(CALLBACK_PARAMETER_VALUE_CHANGED, fId, i, 0, value, nullptr); | |||||
| pData->engine->callback(CALLBACK_PARAMETER_DEFAULT_CHANGED, fId, i, 0, value, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, fId, i, 0, value, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_PARAMETER_DEFAULT_CHANGED, fId, i, 0, value, nullptr); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -1671,7 +1686,7 @@ void CarlaPlugin::updateOscData(const lo_address& source, const char* const url) | |||||
| osc_send_sample_rate(pData->osc.data, pData->engine->getSampleRate()); | osc_send_sample_rate(pData->osc.data, pData->engine->getSampleRate()); | ||||
| for (NonRtList<CustomData>::Itenerator it = pData->custom.begin(); it.valid(); it.next()) | |||||
| for (List<CustomData>::Itenerator it = pData->custom.begin(); it.valid(); it.next()) | |||||
| { | { | ||||
| const CustomData& cData(*it); | const CustomData& cData(*it); | ||||
| @@ -1679,7 +1694,7 @@ void CarlaPlugin::updateOscData(const lo_address& source, const char* const url) | |||||
| CARLA_ASSERT(cData.key != nullptr); | CARLA_ASSERT(cData.key != nullptr); | ||||
| CARLA_ASSERT(cData.value != nullptr); | CARLA_ASSERT(cData.value != nullptr); | ||||
| if (std::strcmp(cData.type, CUSTOM_DATA_STRING) == 0) | |||||
| if (std::strcmp(cData.type, CUSTOM_DATA_TYPE_STRING) == 0) | |||||
| osc_send_configure(pData->osc.data, cData.key, cData.value); | osc_send_configure(pData->osc.data, cData.key, cData.value); | ||||
| } | } | ||||
| @@ -1766,7 +1781,7 @@ void CarlaPlugin::sendMidiSingleNote(const uint8_t channel, const uint8_t note, | |||||
| } | } | ||||
| if (sendCallback) | if (sendCallback) | ||||
| pData->engine->callback((velo > 0) ? CALLBACK_NOTE_ON : CALLBACK_NOTE_OFF, fId, channel, note, velo, nullptr); | |||||
| pData->engine->callback((velo > 0) ? ENGINE_CALLBACK_NOTE_ON : ENGINE_CALLBACK_NOTE_OFF, fId, channel, note, velo, nullptr); | |||||
| } | } | ||||
| #endif | #endif | ||||
| @@ -1806,7 +1821,7 @@ void CarlaPlugin::postRtEventsRun() | |||||
| case kPluginPostRtEventDebug: | case kPluginPostRtEventDebug: | ||||
| #ifndef BUILD_BRIDGE | #ifndef BUILD_BRIDGE | ||||
| pData->engine->callback(CALLBACK_DEBUG, fId, event.value1, event.value2, event.value3, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_DEBUG, fId, event.value1, event.value2, event.value3, nullptr); | |||||
| #endif | #endif | ||||
| break; | break; | ||||
| @@ -1823,7 +1838,7 @@ void CarlaPlugin::postRtEventsRun() | |||||
| pData->engine->oscSend_control_set_parameter_value(fId, event.value1, event.value3); | pData->engine->oscSend_control_set_parameter_value(fId, event.value1, event.value3); | ||||
| // Update Host | // Update Host | ||||
| pData->engine->callback(CALLBACK_PARAMETER_VALUE_CHANGED, fId, event.value1, 0, event.value3, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, fId, event.value1, 0, event.value3, nullptr); | |||||
| } | } | ||||
| #endif | #endif | ||||
| break; | break; | ||||
| @@ -1839,7 +1854,7 @@ void CarlaPlugin::postRtEventsRun() | |||||
| pData->engine->oscSend_control_set_program(fId, event.value1); | pData->engine->oscSend_control_set_program(fId, event.value1); | ||||
| // Update Host | // Update Host | ||||
| pData->engine->callback(CALLBACK_PROGRAM_CHANGED, fId, event.value1, 0, 0.0f, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_PROGRAM_CHANGED, fId, event.value1, 0, 0.0f, nullptr); | |||||
| // Update param values | // Update param values | ||||
| { | { | ||||
| @@ -1855,8 +1870,8 @@ void CarlaPlugin::postRtEventsRun() | |||||
| pData->engine->oscSend_control_set_default_value(fId, j, pData->param.ranges[j].def); | pData->engine->oscSend_control_set_default_value(fId, j, pData->param.ranges[j].def); | ||||
| } | } | ||||
| pData->engine->callback(CALLBACK_PARAMETER_VALUE_CHANGED, fId, j, 0, value, nullptr); | |||||
| pData->engine->callback(CALLBACK_PARAMETER_DEFAULT_CHANGED, fId, j, 0, pData->param.ranges[j].def, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, fId, j, 0, value, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_PARAMETER_DEFAULT_CHANGED, fId, j, 0, pData->param.ranges[j].def, nullptr); | |||||
| } | } | ||||
| } | } | ||||
| #endif | #endif | ||||
| @@ -1873,7 +1888,7 @@ void CarlaPlugin::postRtEventsRun() | |||||
| pData->engine->oscSend_control_set_midi_program(fId, event.value1); | pData->engine->oscSend_control_set_midi_program(fId, event.value1); | ||||
| // Update Host | // Update Host | ||||
| pData->engine->callback(CALLBACK_MIDI_PROGRAM_CHANGED, fId, event.value1, 0, 0.0f, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_MIDI_PROGRAM_CHANGED, fId, event.value1, 0, 0.0f, nullptr); | |||||
| // Update param values | // Update param values | ||||
| { | { | ||||
| @@ -1889,8 +1904,8 @@ void CarlaPlugin::postRtEventsRun() | |||||
| pData->engine->oscSend_control_set_default_value(fId, j, pData->param.ranges[j].def); | pData->engine->oscSend_control_set_default_value(fId, j, pData->param.ranges[j].def); | ||||
| } | } | ||||
| pData->engine->callback(CALLBACK_PARAMETER_VALUE_CHANGED, fId, j, 0, value, nullptr); | |||||
| pData->engine->callback(CALLBACK_PARAMETER_DEFAULT_CHANGED, fId, j, 0, pData->param.ranges[j].def, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, fId, j, 0, value, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_PARAMETER_DEFAULT_CHANGED, fId, j, 0, pData->param.ranges[j].def, nullptr); | |||||
| } | } | ||||
| } | } | ||||
| #endif | #endif | ||||
| @@ -1906,7 +1921,7 @@ void CarlaPlugin::postRtEventsRun() | |||||
| pData->engine->oscSend_control_note_on(fId, event.value1, event.value2, int(event.value3)); | pData->engine->oscSend_control_note_on(fId, event.value1, event.value2, int(event.value3)); | ||||
| // Update Host | // Update Host | ||||
| pData->engine->callback(CALLBACK_NOTE_ON, fId, event.value1, event.value2, int(event.value3), nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_NOTE_ON, fId, event.value1, event.value2, int(event.value3), nullptr); | |||||
| #endif | #endif | ||||
| break; | break; | ||||
| @@ -1920,7 +1935,7 @@ void CarlaPlugin::postRtEventsRun() | |||||
| pData->engine->oscSend_control_note_off(fId, event.value1, event.value2); | pData->engine->oscSend_control_note_off(fId, event.value1, event.value2); | ||||
| // Update Host | // Update Host | ||||
| pData->engine->callback(CALLBACK_NOTE_OFF, fId, event.value1, event.value2, 0.0f, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_NOTE_OFF, fId, event.value1, event.value2, 0.0f, nullptr); | |||||
| #endif | #endif | ||||
| break; | break; | ||||
| } | } | ||||
| @@ -29,11 +29,14 @@ | |||||
| #include "CarlaMIDI.h" | #include "CarlaMIDI.h" | ||||
| #include "RtList.hpp" | #include "RtList.hpp" | ||||
| #include "juce_audio_basics.h" | |||||
| #include <cmath> | |||||
| #define CARLA_PROCESS_CONTINUE_CHECK if (! fEnabled) { pData->engine->callback(CALLBACK_DEBUG, fId, 0, 0, 0.0f, "Processing while plugin is disabled!!"); return; } | |||||
| #define CARLA_PROCESS_CONTINUE_CHECK if (! fEnabled) { pData->engine->callback(ENGINE_CALLBACK_DEBUG, fId, 0, 0, 0.0f, "Processing while plugin is disabled!!"); return; } | |||||
| #ifdef USE_JUCE | |||||
| #include "juce_audio_basics.h" | |||||
| using juce::FloatVectorOperations; | using juce::FloatVectorOperations; | ||||
| #endif | |||||
| CARLA_BACKEND_START_NAMESPACE | CARLA_BACKEND_START_NAMESPACE | ||||
| @@ -509,7 +512,7 @@ struct CarlaPluginProtectedData { | |||||
| PluginParameterData param; | PluginParameterData param; | ||||
| PluginProgramData prog; | PluginProgramData prog; | ||||
| PluginMidiProgramData midiprog; | PluginMidiProgramData midiprog; | ||||
| NonRtList<CustomData> custom; | |||||
| List<CustomData> custom; | |||||
| SaveState saveState; | SaveState saveState; | ||||
| @@ -665,7 +668,7 @@ struct CarlaPluginProtectedData { | |||||
| if (client->isActive()) | if (client->isActive()) | ||||
| { | { | ||||
| // must not happen | // must not happen | ||||
| carla_assert("client->isActive()", __FILE__, __LINE__); | |||||
| carla_safe_assert("client->isActive()", __FILE__, __LINE__); | |||||
| client->deactivate(); | client->deactivate(); | ||||
| } | } | ||||
| @@ -675,7 +678,7 @@ struct CarlaPluginProtectedData { | |||||
| client = nullptr; | client = nullptr; | ||||
| } | } | ||||
| for (NonRtList<CustomData>::Itenerator it = custom.begin(); it.valid(); it.next()) | |||||
| for (List<CustomData>::Itenerator it = custom.begin(); it.valid(); it.next()) | |||||
| { | { | ||||
| CustomData& cData(*it); | CustomData& cData(*it); | ||||
| @@ -685,7 +688,7 @@ struct CarlaPluginProtectedData { | |||||
| cData.type = nullptr; | cData.type = nullptr; | ||||
| } | } | ||||
| else | else | ||||
| carla_assert("cData.type != nullptr", __FILE__, __LINE__); | |||||
| carla_safe_assert("cData.type != nullptr", __FILE__, __LINE__); | |||||
| if (cData.key != nullptr) | if (cData.key != nullptr) | ||||
| { | { | ||||
| @@ -693,7 +696,7 @@ struct CarlaPluginProtectedData { | |||||
| cData.key = nullptr; | cData.key = nullptr; | ||||
| } | } | ||||
| else | else | ||||
| carla_assert("cData.key != nullptr", __FILE__, __LINE__); | |||||
| carla_safe_assert("cData.key != nullptr", __FILE__, __LINE__); | |||||
| if (cData.value != nullptr) | if (cData.value != nullptr) | ||||
| { | { | ||||
| @@ -701,7 +704,7 @@ struct CarlaPluginProtectedData { | |||||
| cData.value = nullptr; | cData.value = nullptr; | ||||
| } | } | ||||
| else | else | ||||
| carla_assert("cData.value != nullptr", __FILE__, __LINE__); | |||||
| carla_safe_assert("cData.value != nullptr", __FILE__, __LINE__); | |||||
| } | } | ||||
| prog.clear(); | prog.clear(); | ||||
| @@ -773,7 +776,11 @@ struct CarlaPluginProtectedData { | |||||
| for (uint32_t i=0; i < audioIn.count; ++i) | for (uint32_t i=0; i < audioIn.count; ++i) | ||||
| { | { | ||||
| latencyBuffers[i] = new float[latency]; | latencyBuffers[i] = new float[latency]; | ||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(latencyBuffers[i], latency); | FloatVectorOperations::clear(latencyBuffers[i], latency); | ||||
| #else | |||||
| carla_zeroFloat(latencyBuffers[i], latency); | |||||
| #endif | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -20,9 +20,11 @@ | |||||
| #include "CarlaPlugin.hpp" | #include "CarlaPlugin.hpp" | ||||
| #include "CarlaEngine.hpp" | #include "CarlaEngine.hpp" | ||||
| #ifdef USE_JUCE | |||||
| using juce::ChildProcess; | using juce::ChildProcess; | ||||
| using juce::String; | using juce::String; | ||||
| using juce::StringArray; | using juce::StringArray; | ||||
| #endif | |||||
| CARLA_BACKEND_START_NAMESPACE | CARLA_BACKEND_START_NAMESPACE | ||||
| @@ -47,19 +49,19 @@ const char* PluginThreadMode2str(const CarlaPluginThread::Mode mode) | |||||
| } | } | ||||
| CarlaPluginThread::CarlaPluginThread(CarlaBackend::CarlaEngine* const engine, CarlaBackend::CarlaPlugin* const plugin, const Mode mode) | CarlaPluginThread::CarlaPluginThread(CarlaBackend::CarlaEngine* const engine, CarlaBackend::CarlaPlugin* const plugin, const Mode mode) | ||||
| : juce::Thread("CarlaPluginThread"), | |||||
| : CarlaThread("CarlaPluginThread"), | |||||
| fEngine(engine), | fEngine(engine), | ||||
| fPlugin(plugin), | fPlugin(plugin), | ||||
| fMode(mode) | fMode(mode) | ||||
| { | { | ||||
| carla_debug("CarlaPluginThread::CarlaPluginThread(plugin:\"%s\", engine:\"%s\", %s)", plugin->getName(), engine->getName(), PluginThreadMode2str(mode)); | carla_debug("CarlaPluginThread::CarlaPluginThread(plugin:\"%s\", engine:\"%s\", %s)", plugin->getName(), engine->getName(), PluginThreadMode2str(mode)); | ||||
| setPriority(5); | |||||
| //setPriority(5); | |||||
| } | } | ||||
| void CarlaPluginThread::setMode(const CarlaPluginThread::Mode mode) | void CarlaPluginThread::setMode(const CarlaPluginThread::Mode mode) | ||||
| { | { | ||||
| CARLA_ASSERT(! isThreadRunning()); | |||||
| CARLA_ASSERT(! isRunning()); | |||||
| carla_debug("CarlaPluginThread::setMode(%s)", PluginThreadMode2str(mode)); | carla_debug("CarlaPluginThread::setMode(%s)", PluginThreadMode2str(mode)); | ||||
| fMode = mode; | fMode = mode; | ||||
| @@ -67,7 +69,7 @@ void CarlaPluginThread::setMode(const CarlaPluginThread::Mode mode) | |||||
| void CarlaPluginThread::setOscData(const char* const binary, const char* const label, const char* const extra1, const char* const extra2) | void CarlaPluginThread::setOscData(const char* const binary, const char* const label, const char* const extra1, const char* const extra2) | ||||
| { | { | ||||
| CARLA_ASSERT(! isThreadRunning()); | |||||
| CARLA_ASSERT(! isRunning()); | |||||
| carla_debug("CarlaPluginThread::setOscData(\"%s\", \"%s\", \"%s\", \"%s\")", binary, label, extra1, extra2); | carla_debug("CarlaPluginThread::setOscData(\"%s\", \"%s\", \"%s\", \"%s\")", binary, label, extra1, extra2); | ||||
| fBinary = binary; | fBinary = binary; | ||||
| @@ -80,6 +82,7 @@ void CarlaPluginThread::run() | |||||
| { | { | ||||
| carla_debug("CarlaPluginThread::run()"); | carla_debug("CarlaPluginThread::run()"); | ||||
| #ifdef USE_JUCE | |||||
| ChildProcess process; | ChildProcess process; | ||||
| StringArray arguments; | StringArray arguments; | ||||
| @@ -180,6 +183,7 @@ void CarlaPluginThread::run() | |||||
| } | } | ||||
| break; | break; | ||||
| } | } | ||||
| #endif | |||||
| } | } | ||||
| CARLA_BACKEND_END_NAMESPACE | CARLA_BACKEND_END_NAMESPACE | ||||
| @@ -19,9 +19,7 @@ | |||||
| #define CARLA_PLUGIN_THREAD_HPP_INCLUDED | #define CARLA_PLUGIN_THREAD_HPP_INCLUDED | ||||
| #include "CarlaBackend.hpp" | #include "CarlaBackend.hpp" | ||||
| #include "CarlaString.hpp" | |||||
| #include "juce_core.h" | |||||
| #include "CarlaThread.hpp" | |||||
| CARLA_BACKEND_START_NAMESPACE | CARLA_BACKEND_START_NAMESPACE | ||||
| @@ -31,7 +29,7 @@ CARLA_BACKEND_START_NAMESPACE | |||||
| // ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
| class CarlaPluginThread : public juce::Thread | |||||
| class CarlaPluginThread : public CarlaThread | |||||
| { | { | ||||
| public: | public: | ||||
| enum Mode { | enum Mode { | ||||
| @@ -60,7 +58,7 @@ private: | |||||
| CarlaString fExtra1; | CarlaString fExtra1; | ||||
| CarlaString fExtra2; | CarlaString fExtra2; | ||||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaPluginThread) | |||||
| CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaPluginThread) | |||||
| }; | }; | ||||
| // ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
| @@ -96,7 +96,7 @@ CarlaPlugin* CarlaPlugin::newCSOUND(const Initializer& init) | |||||
| plugin->reload(); | plugin->reload(); | ||||
| if (init.engine->getProccessMode() == PROCESS_MODE_CONTINUOUS_RACK && ! plugin->canRunInRack()) | |||||
| if (init.engine->getProccessMode() == ENGINE_PROCESS_MODE_CONTINUOUS_RACK && ! plugin->canRunInRack()) | |||||
| { | { | ||||
| init.engine->setLastError("Carla's rack mode can only work with Stereo VST3 plugins, sorry!"); | init.engine->setLastError("Carla's rack mode can only work with Stereo VST3 plugins, sorry!"); | ||||
| delete plugin; | delete plugin; | ||||
| @@ -57,7 +57,7 @@ public: | |||||
| { | { | ||||
| showGui(false); | showGui(false); | ||||
| pData->osc.thread.stopThread(pData->engine->getOptions().uiBridgesTimeout * 2); | |||||
| pData->osc.thread.stop(pData->engine->getOptions().uiBridgesTimeout * 2); | |||||
| } | } | ||||
| pData->singleMutex.lock(); | pData->singleMutex.lock(); | ||||
| @@ -167,7 +167,7 @@ public: | |||||
| { | { | ||||
| options |= PLUGIN_OPTION_FIXED_BUFFERS; | options |= PLUGIN_OPTION_FIXED_BUFFERS; | ||||
| if (pData->engine->getProccessMode() != PROCESS_MODE_CONTINUOUS_RACK) | |||||
| if (pData->engine->getProccessMode() != ENGINE_PROCESS_MODE_CONTINUOUS_RACK) | |||||
| { | { | ||||
| if (fOptions & PLUGIN_OPTION_FORCE_STEREO) | if (fOptions & PLUGIN_OPTION_FORCE_STEREO) | ||||
| options |= PLUGIN_OPTION_FORCE_STEREO; | options |= PLUGIN_OPTION_FORCE_STEREO; | ||||
| @@ -285,7 +285,7 @@ public: | |||||
| CARLA_SAFE_ASSERT_RETURN(value != nullptr,); | CARLA_SAFE_ASSERT_RETURN(value != nullptr,); | ||||
| carla_debug("DssiPlugin::setCustomData(%s, %s, %s, %s)", type, key, value, bool2str(sendGui)); | carla_debug("DssiPlugin::setCustomData(%s, %s, %s, %s)", type, key, value, bool2str(sendGui)); | ||||
| if (std::strcmp(type, CUSTOM_DATA_STRING) != 0) | |||||
| if (std::strcmp(type, CUSTOM_DATA_TYPE_STRING) != 0) | |||||
| return carla_stderr2("DssiPlugin::setCustomData(\"%s\", \"%s\", \"%s\", %s) - type is not string", type, key, value, bool2str(sendGui)); | return carla_stderr2("DssiPlugin::setCustomData(\"%s\", \"%s\", \"%s\", %s) - type is not string", type, key, value, bool2str(sendGui)); | ||||
| if (fDssiDescriptor->configure != nullptr) | if (fDssiDescriptor->configure != nullptr) | ||||
| @@ -362,7 +362,7 @@ public: | |||||
| { | { | ||||
| if (yesNo) | if (yesNo) | ||||
| { | { | ||||
| pData->osc.thread.startThread(); | |||||
| pData->osc.thread.start(); | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| @@ -373,7 +373,7 @@ public: | |||||
| pData->osc.data.free(); | pData->osc.data.free(); | ||||
| } | } | ||||
| pData->osc.thread.stopThread(pData->engine->getOptions().uiBridgesTimeout); | |||||
| pData->osc.thread.stop(pData->engine->getOptions().uiBridgesTimeout); | |||||
| } | } | ||||
| } | } | ||||
| @@ -388,7 +388,7 @@ public: | |||||
| CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); | CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); | ||||
| carla_debug("DssiPlugin::reload() - start"); | carla_debug("DssiPlugin::reload() - start"); | ||||
| const ProcessMode processMode(pData->engine->getProccessMode()); | |||||
| const EngineProcessMode processMode(pData->engine->getProccessMode()); | |||||
| // Safely disable plugin for reload | // Safely disable plugin for reload | ||||
| const ScopedDisabler sd(this); | const ScopedDisabler sd(this); | ||||
| @@ -483,7 +483,10 @@ public: | |||||
| pData->param.createNew(params); | pData->param.createNew(params); | ||||
| fParamBuffers = new float[params]; | fParamBuffers = new float[params]; | ||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(fParamBuffers, params); | FloatVectorOperations::clear(fParamBuffers, params); | ||||
| #else | |||||
| #endif | |||||
| } | } | ||||
| const uint portNameSize(pData->engine->getMaxPortNameSize()); | const uint portNameSize(pData->engine->getMaxPortNameSize()); | ||||
| @@ -500,7 +503,7 @@ public: | |||||
| { | { | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -640,7 +643,7 @@ public: | |||||
| stepSmall = 1.0f; | stepSmall = 1.0f; | ||||
| stepLarge = 1.0f; | stepLarge = 1.0f; | ||||
| pData->param.data[j].type = PARAMETER_LATENCY; | |||||
| //pData->param.data[j].type = PARAMETER_LATENCY; | |||||
| pData->param.data[j].hints = 0; | pData->param.data[j].hints = 0; | ||||
| } | } | ||||
| else if (std::strcmp(fDescriptor->PortNames[i], "_sample-rate") == 0) | else if (std::strcmp(fDescriptor->PortNames[i], "_sample-rate") == 0) | ||||
| @@ -650,7 +653,7 @@ public: | |||||
| stepSmall = 1.0f; | stepSmall = 1.0f; | ||||
| stepLarge = 1.0f; | stepLarge = 1.0f; | ||||
| pData->param.data[j].type = PARAMETER_SAMPLE_RATE; | |||||
| //pData->param.data[j].type = PARAMETER_SAMPLE_RATE; | |||||
| pData->param.data[j].hints = 0; | pData->param.data[j].hints = 0; | ||||
| } | } | ||||
| else | else | ||||
| @@ -702,7 +705,7 @@ public: | |||||
| { | { | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -718,7 +721,7 @@ public: | |||||
| { | { | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -767,8 +770,8 @@ public: | |||||
| { | { | ||||
| for (uint32_t i=0; i < pData->param.count; ++i) | for (uint32_t i=0; i < pData->param.count; ++i) | ||||
| { | { | ||||
| if (pData->param.data[i].type != PARAMETER_LATENCY) | |||||
| continue; | |||||
| //if (pData->param.data[i].type != PARAMETER_LATENCY) | |||||
| // continue; | |||||
| // we need to pre-run the plugin so it can update its latency control-port | // we need to pre-run the plugin so it can update its latency control-port | ||||
| @@ -909,7 +912,7 @@ public: | |||||
| if (programChanged) | if (programChanged) | ||||
| setMidiProgram(pData->midiprog.current, true, true, true); | setMidiProgram(pData->midiprog.current, true, true, true); | ||||
| pData->engine->callback(CALLBACK_RELOAD_PROGRAMS, fId, 0, 0, 0.0f, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_RELOAD_PROGRAMS, fId, 0, 0, 0.0f, nullptr); | |||||
| } | } | ||||
| } | } | ||||
| @@ -953,7 +956,12 @@ public: | |||||
| { | { | ||||
| // disable any output sound | // disable any output sound | ||||
| for (uint32_t i=0; i < pData->audioOut.count; ++i) | for (uint32_t i=0; i < pData->audioOut.count; ++i) | ||||
| { | |||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(outBuffer[i], frames); | FloatVectorOperations::clear(outBuffer[i], frames); | ||||
| #else | |||||
| #endif | |||||
| } | |||||
| return; | return; | ||||
| } | } | ||||
| @@ -997,7 +1005,12 @@ public: | |||||
| if (pData->latency > 0) | if (pData->latency > 0) | ||||
| { | { | ||||
| for (uint32_t i=0; i < pData->audioIn.count; ++i) | for (uint32_t i=0; i < pData->audioIn.count; ++i) | ||||
| { | |||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(pData->latencyBuffers[i], pData->latency); | FloatVectorOperations::clear(pData->latencyBuffers[i], pData->latency); | ||||
| #else | |||||
| #endif | |||||
| } | |||||
| } | } | ||||
| pData->needsReset = false; | pData->needsReset = false; | ||||
| @@ -1448,9 +1461,20 @@ public: | |||||
| // Reset audio buffers | // Reset audio buffers | ||||
| for (uint32_t i=0; i < pData->audioIn.count; ++i) | for (uint32_t i=0; i < pData->audioIn.count; ++i) | ||||
| { | |||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::copy(fAudioInBuffers[i], inBuffer[i]+timeOffset, frames); | FloatVectorOperations::copy(fAudioInBuffers[i], inBuffer[i]+timeOffset, frames); | ||||
| #else | |||||
| #endif | |||||
| } | |||||
| for (uint32_t i=0; i < pData->audioOut.count; ++i) | for (uint32_t i=0; i < pData->audioOut.count; ++i) | ||||
| { | |||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(fAudioOutBuffers[i], frames); | FloatVectorOperations::clear(fAudioOutBuffers[i], frames); | ||||
| #else | |||||
| #endif | |||||
| } | |||||
| // -------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------- | ||||
| // Run plugin | // Run plugin | ||||
| @@ -1515,7 +1539,10 @@ public: | |||||
| if (isPair) | if (isPair) | ||||
| { | { | ||||
| CARLA_ASSERT(i+1 < pData->audioOut.count); | CARLA_ASSERT(i+1 < pData->audioOut.count); | ||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::copy(oldBufLeft, fAudioOutBuffers[i], frames); | FloatVectorOperations::copy(oldBufLeft, fAudioOutBuffers[i], frames); | ||||
| #else | |||||
| #endif | |||||
| } | } | ||||
| float balRangeL = (pData->postProc.balanceLeft + 1.0f)/2.0f; | float balRangeL = (pData->postProc.balanceLeft + 1.0f)/2.0f; | ||||
| @@ -1884,10 +1911,10 @@ public: | |||||
| // --------------------------------------------------------------- | // --------------------------------------------------------------- | ||||
| // gui stuff | // gui stuff | ||||
| if (const char* const guiFilename = find_dssi_ui(filename, fDescriptor->Label)) | |||||
| //if (const char* const guiFilename = find_dssi_ui(filename, fDescriptor->Label)) | |||||
| { | { | ||||
| pData->osc.thread.setOscData(guiFilename, fDescriptor->Label); | |||||
| fGuiFilename = guiFilename; | |||||
| //pData->osc.thread.setOscData(guiFilename, fDescriptor->Label); | |||||
| //fGuiFilename = guiFilename; | |||||
| } | } | ||||
| // --------------------------------------------------------------- | // --------------------------------------------------------------- | ||||
| @@ -1951,13 +1978,13 @@ private: | |||||
| float* fParamBuffers; | float* fParamBuffers; | ||||
| snd_seq_event_t fMidiEvents[kPluginMaxMidiEvents]; | snd_seq_event_t fMidiEvents[kPluginMaxMidiEvents]; | ||||
| static NonRtList<const char*> sMultiSynthList; | |||||
| static List<const char*> sMultiSynthList; | |||||
| static bool addUniqueMultiSynth(const char* const label) | static bool addUniqueMultiSynth(const char* const label) | ||||
| { | { | ||||
| CARLA_SAFE_ASSERT_RETURN(label != nullptr, true); | CARLA_SAFE_ASSERT_RETURN(label != nullptr, true); | ||||
| for (NonRtList<const char*>::Itenerator it = sMultiSynthList.begin(); it.valid(); it.next()) | |||||
| for (List<const char*>::Itenerator it = sMultiSynthList.begin(); it.valid(); it.next()) | |||||
| { | { | ||||
| const char*& itLabel(*it); | const char*& itLabel(*it); | ||||
| @@ -1973,7 +2000,7 @@ private: | |||||
| { | { | ||||
| CARLA_SAFE_ASSERT_RETURN(label != nullptr,); | CARLA_SAFE_ASSERT_RETURN(label != nullptr,); | ||||
| for (NonRtList<const char*>::Itenerator it = sMultiSynthList.begin(); it.valid(); it.next()) | |||||
| for (List<const char*>::Itenerator it = sMultiSynthList.begin(); it.valid(); it.next()) | |||||
| { | { | ||||
| const char*& itLabel(*it); | const char*& itLabel(*it); | ||||
| @@ -1989,7 +2016,7 @@ private: | |||||
| CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(DssiPlugin) | CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(DssiPlugin) | ||||
| }; | }; | ||||
| NonRtList<const char*> DssiPlugin::sMultiSynthList; | |||||
| List<const char*> DssiPlugin::sMultiSynthList; | |||||
| CARLA_BACKEND_END_NAMESPACE | CARLA_BACKEND_END_NAMESPACE | ||||
| @@ -2014,7 +2041,7 @@ CarlaPlugin* CarlaPlugin::newDSSI(const Initializer& init) | |||||
| plugin->reload(); | plugin->reload(); | ||||
| if (init.engine->getProccessMode() == PROCESS_MODE_CONTINUOUS_RACK && ! plugin->canRunInRack()) | |||||
| if (init.engine->getProccessMode() == ENGINE_PROCESS_MODE_CONTINUOUS_RACK && ! plugin->canRunInRack()) | |||||
| { | { | ||||
| init.engine->setLastError("Carla's rack mode can only work with Mono or Stereo DSSI plugins, sorry!"); | init.engine->setLastError("Carla's rack mode can only work with Mono or Stereo DSSI plugins, sorry!"); | ||||
| delete plugin; | delete plugin; | ||||
| @@ -46,7 +46,10 @@ public: | |||||
| { | { | ||||
| carla_debug("FluidSynthPlugin::FluidSynthPlugin(%p, %i, %s)", engine, id, bool2str(use16Outs)); | carla_debug("FluidSynthPlugin::FluidSynthPlugin(%p, %i, %s)", engine, id, bool2str(use16Outs)); | ||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(fParamBuffers, FluidSynthParametersMax); | FloatVectorOperations::clear(fParamBuffers, FluidSynthParametersMax); | ||||
| #else | |||||
| #endif | |||||
| carla_fill<int32_t>(fCurMidiProgs, MAX_MIDI_CHANNELS, 0); | carla_fill<int32_t>(fCurMidiProgs, MAX_MIDI_CHANNELS, 0); | ||||
| // create settings | // create settings | ||||
| @@ -355,7 +358,7 @@ public: | |||||
| fCurMidiProgs[8], fCurMidiProgs[9], fCurMidiProgs[10], fCurMidiProgs[11], | fCurMidiProgs[8], fCurMidiProgs[9], fCurMidiProgs[10], fCurMidiProgs[11], | ||||
| fCurMidiProgs[12], fCurMidiProgs[13], fCurMidiProgs[14], fCurMidiProgs[15]); | fCurMidiProgs[12], fCurMidiProgs[13], fCurMidiProgs[14], fCurMidiProgs[15]); | ||||
| CarlaPlugin::setCustomData(CUSTOM_DATA_STRING, "midiPrograms", strBuf, false); | |||||
| CarlaPlugin::setCustomData(CUSTOM_DATA_TYPE_STRING, "midiPrograms", strBuf, false); | |||||
| } | } | ||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| @@ -432,7 +435,7 @@ public: | |||||
| CARLA_SAFE_ASSERT_RETURN(value != nullptr,); | CARLA_SAFE_ASSERT_RETURN(value != nullptr,); | ||||
| carla_debug("DssiPlugin::setCustomData(%s, %s, %s, %s)", type, key, value, bool2str(sendGui)); | carla_debug("DssiPlugin::setCustomData(%s, %s, %s, %s)", type, key, value, bool2str(sendGui)); | ||||
| if (std::strcmp(type, CUSTOM_DATA_STRING) != 0) | |||||
| if (std::strcmp(type, CUSTOM_DATA_TYPE_STRING) != 0) | |||||
| return carla_stderr2("DssiPlugin::setCustomData(\"%s\", \"%s\", \"%s\", %s) - type is not string", type, key, value, bool2str(sendGui)); | return carla_stderr2("DssiPlugin::setCustomData(\"%s\", \"%s\", \"%s\", %s) - type is not string", type, key, value, bool2str(sendGui)); | ||||
| if (std::strcmp(key, "midiPrograms") != 0) | if (std::strcmp(key, "midiPrograms") != 0) | ||||
| @@ -510,7 +513,7 @@ public: | |||||
| CARLA_SAFE_ASSERT_RETURN(fSynth != nullptr,); | CARLA_SAFE_ASSERT_RETURN(fSynth != nullptr,); | ||||
| carla_debug("FluidSynthPlugin::reload() - start"); | carla_debug("FluidSynthPlugin::reload() - start"); | ||||
| const ProcessMode processMode(pData->engine->getProccessMode()); | |||||
| const EngineProcessMode processMode(pData->engine->getProccessMode()); | |||||
| // Safely disable plugin for reload | // Safely disable plugin for reload | ||||
| const ScopedDisabler sd(this); | const ScopedDisabler sd(this); | ||||
| @@ -539,7 +542,7 @@ public: | |||||
| { | { | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -573,7 +576,7 @@ public: | |||||
| // out-left | // out-left | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -588,7 +591,7 @@ public: | |||||
| // out-right | // out-right | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -607,7 +610,7 @@ public: | |||||
| { | { | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -625,7 +628,7 @@ public: | |||||
| { | { | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -985,7 +988,7 @@ public: | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| pData->engine->callback(CALLBACK_RELOAD_PROGRAMS, fId, 0, 0, 0.0f, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_RELOAD_PROGRAMS, fId, 0, 0, 0.0f, nullptr); | |||||
| } | } | ||||
| } | } | ||||
| @@ -1003,7 +1006,12 @@ public: | |||||
| { | { | ||||
| // disable any output sound | // disable any output sound | ||||
| for (i=0; i < pData->audioOut.count; ++i) | for (i=0; i < pData->audioOut.count; ++i) | ||||
| { | |||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(outBuffer[i], frames); | FloatVectorOperations::clear(outBuffer[i], frames); | ||||
| #else | |||||
| #endif | |||||
| } | |||||
| return; | return; | ||||
| } | } | ||||
| @@ -1376,7 +1384,12 @@ public: | |||||
| if (kUses16Outs) | if (kUses16Outs) | ||||
| { | { | ||||
| for (i=0; i < pData->audioOut.count; ++i) | for (i=0; i < pData->audioOut.count; ++i) | ||||
| { | |||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(fAudio16Buffers[i], frames); | FloatVectorOperations::clear(fAudio16Buffers[i], frames); | ||||
| #else | |||||
| #endif | |||||
| } | |||||
| fluid_synth_process(fSynth, frames, 0, nullptr, pData->audioOut.count, fAudio16Buffers); | fluid_synth_process(fSynth, frames, 0, nullptr, pData->audioOut.count, fAudio16Buffers); | ||||
| } | } | ||||
| @@ -1400,7 +1413,12 @@ public: | |||||
| if (doBalance) | if (doBalance) | ||||
| { | { | ||||
| if (i % 2 == 0) | if (i % 2 == 0) | ||||
| { | |||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::copy(oldBufLeft, outBuffer[i]+timeOffset, frames); | FloatVectorOperations::copy(oldBufLeft, outBuffer[i]+timeOffset, frames); | ||||
| #else | |||||
| #endif | |||||
| } | |||||
| float balRangeL = (pData->postProc.balanceLeft + 1.0f)/2.0f; | float balRangeL = (pData->postProc.balanceLeft + 1.0f)/2.0f; | ||||
| float balRangeR = (pData->postProc.balanceRight + 1.0f)/2.0f; | float balRangeR = (pData->postProc.balanceRight + 1.0f)/2.0f; | ||||
| @@ -1650,7 +1668,7 @@ CarlaPlugin* CarlaPlugin::newSF2(const Initializer& init, const bool use16Outs) | |||||
| return nullptr; | return nullptr; | ||||
| } | } | ||||
| if (init.engine->getProccessMode() == PROCESS_MODE_CONTINUOUS_RACK && use16Outs) | |||||
| if (init.engine->getProccessMode() == ENGINE_PROCESS_MODE_CONTINUOUS_RACK && use16Outs) | |||||
| { | { | ||||
| init.engine->setLastError("Carla's rack mode can only work with Stereo modules, please choose the 2-channel only SoundFont version"); | init.engine->setLastError("Carla's rack mode can only work with Stereo modules, please choose the 2-channel only SoundFont version"); | ||||
| return nullptr; | return nullptr; | ||||
| @@ -73,7 +73,7 @@ CarlaPlugin* CarlaPlugin::newCsound(const Initializer& init) | |||||
| plugin->reload(); | plugin->reload(); | ||||
| if (init.engine->getProccessMode() == PROCESS_MODE_CONTINUOUS_RACK && ! plugin->canRunInRack()) | |||||
| if (init.engine->getProccessMode() == ENGINE_PROCESS_MODE_CONTINUOUS_RACK && ! plugin->canRunInRack()) | |||||
| { | { | ||||
| init.engine->setLastError("Carla's rack mode can only work with Stereo VST3 plugins, sorry!"); | init.engine->setLastError("Carla's rack mode can only work with Stereo VST3 plugins, sorry!"); | ||||
| delete plugin; | delete plugin; | ||||
| @@ -173,7 +173,7 @@ public: | |||||
| { | { | ||||
| options |= PLUGIN_OPTION_FIXED_BUFFERS; | options |= PLUGIN_OPTION_FIXED_BUFFERS; | ||||
| if (pData->engine->getProccessMode() != PROCESS_MODE_CONTINUOUS_RACK) | |||||
| if (pData->engine->getProccessMode() != ENGINE_PROCESS_MODE_CONTINUOUS_RACK) | |||||
| { | { | ||||
| if (fOptions & PLUGIN_OPTION_FORCE_STEREO) | if (fOptions & PLUGIN_OPTION_FORCE_STEREO) | ||||
| options |= PLUGIN_OPTION_FORCE_STEREO; | options |= PLUGIN_OPTION_FORCE_STEREO; | ||||
| @@ -397,7 +397,7 @@ public: | |||||
| CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); | CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); | ||||
| carla_debug("LadspaPlugin::reload() - start"); | carla_debug("LadspaPlugin::reload() - start"); | ||||
| const ProcessMode processMode(pData->engine->getProccessMode()); | |||||
| const EngineProcessMode processMode(pData->engine->getProccessMode()); | |||||
| // Safely disable plugin for reload | // Safely disable plugin for reload | ||||
| const ScopedDisabler sd(this); | const ScopedDisabler sd(this); | ||||
| @@ -486,7 +486,10 @@ public: | |||||
| pData->param.createNew(params); | pData->param.createNew(params); | ||||
| fParamBuffers = new float[params]; | fParamBuffers = new float[params]; | ||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(fParamBuffers, params); | FloatVectorOperations::clear(fParamBuffers, params); | ||||
| #else | |||||
| #endif | |||||
| } | } | ||||
| const uint portNameSize(pData->engine->getMaxPortNameSize()); | const uint portNameSize(pData->engine->getMaxPortNameSize()); | ||||
| @@ -504,7 +507,7 @@ public: | |||||
| { | { | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -635,7 +638,7 @@ public: | |||||
| stepSmall = 1.0f; | stepSmall = 1.0f; | ||||
| stepLarge = 1.0f; | stepLarge = 1.0f; | ||||
| pData->param.data[j].type = PARAMETER_LATENCY; | |||||
| //pData->param.data[j].type = PARAMETER_LATENCY; | |||||
| pData->param.data[j].hints = 0; | pData->param.data[j].hints = 0; | ||||
| } | } | ||||
| else if (std::strcmp(fDescriptor->PortNames[i], "_sample-rate") == 0) | else if (std::strcmp(fDescriptor->PortNames[i], "_sample-rate") == 0) | ||||
| @@ -645,7 +648,7 @@ public: | |||||
| stepSmall = 1.0f; | stepSmall = 1.0f; | ||||
| stepLarge = 1.0f; | stepLarge = 1.0f; | ||||
| pData->param.data[j].type = PARAMETER_SAMPLE_RATE; | |||||
| //pData->param.data[j].type = PARAMETER_SAMPLE_RATE; | |||||
| pData->param.data[j].hints = 0; | pData->param.data[j].hints = 0; | ||||
| } | } | ||||
| else | else | ||||
| @@ -701,7 +704,7 @@ public: | |||||
| { | { | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -717,7 +720,7 @@ public: | |||||
| { | { | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -760,8 +763,8 @@ public: | |||||
| { | { | ||||
| for (uint32_t i=0; i < pData->param.count; ++i) | for (uint32_t i=0; i < pData->param.count; ++i) | ||||
| { | { | ||||
| if (pData->param.data[i].type != PARAMETER_LATENCY) | |||||
| continue; | |||||
| //if (pData->param.data[i].type != PARAMETER_LATENCY) | |||||
| // continue; | |||||
| // we need to pre-run the plugin so it can update its latency control-port | // we need to pre-run the plugin so it can update its latency control-port | ||||
| @@ -853,7 +856,12 @@ public: | |||||
| { | { | ||||
| // disable any output sound | // disable any output sound | ||||
| for (uint32_t i=0; i < pData->audioOut.count; ++i) | for (uint32_t i=0; i < pData->audioOut.count; ++i) | ||||
| { | |||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(outBuffer[i], frames); | FloatVectorOperations::clear(outBuffer[i], frames); | ||||
| #else | |||||
| #endif | |||||
| } | |||||
| return; | return; | ||||
| } | } | ||||
| @@ -866,7 +874,12 @@ public: | |||||
| if (pData->latency > 0) | if (pData->latency > 0) | ||||
| { | { | ||||
| for (uint32_t i=0; i < pData->audioIn.count; ++i) | for (uint32_t i=0; i < pData->audioIn.count; ++i) | ||||
| { | |||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(pData->latencyBuffers[i], pData->latency); | FloatVectorOperations::clear(pData->latencyBuffers[i], pData->latency); | ||||
| #else | |||||
| #endif | |||||
| } | |||||
| } | } | ||||
| pData->needsReset = false; | pData->needsReset = false; | ||||
| @@ -1098,9 +1111,20 @@ public: | |||||
| // Reset audio buffers | // Reset audio buffers | ||||
| for (uint32_t i=0; i < pData->audioIn.count; ++i) | for (uint32_t i=0; i < pData->audioIn.count; ++i) | ||||
| { | |||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::copy(fAudioInBuffers[i], inBuffer[i]+timeOffset, frames); | FloatVectorOperations::copy(fAudioInBuffers[i], inBuffer[i]+timeOffset, frames); | ||||
| #else | |||||
| #endif | |||||
| } | |||||
| for (uint32_t i=0; i < pData->audioOut.count; ++i) | for (uint32_t i=0; i < pData->audioOut.count; ++i) | ||||
| { | |||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(fAudioOutBuffers[i], frames); | FloatVectorOperations::clear(fAudioOutBuffers[i], frames); | ||||
| #else | |||||
| #endif | |||||
| } | |||||
| // -------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------- | ||||
| // Run plugin | // Run plugin | ||||
| @@ -1147,7 +1171,10 @@ public: | |||||
| if (isPair) | if (isPair) | ||||
| { | { | ||||
| CARLA_ASSERT(i+1 < pData->audioOut.count); | CARLA_ASSERT(i+1 < pData->audioOut.count); | ||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::copy(oldBufLeft, fAudioOutBuffers[i], frames); | FloatVectorOperations::copy(oldBufLeft, fAudioOutBuffers[i], frames); | ||||
| #else | |||||
| #endif | |||||
| } | } | ||||
| float balRangeL = (pData->postProc.balanceLeft + 1.0f)/2.0f; | float balRangeL = (pData->postProc.balanceLeft + 1.0f)/2.0f; | ||||
| @@ -1500,7 +1527,7 @@ CarlaPlugin* CarlaPlugin::newLADSPA(const Initializer& init, const LADSPA_RDF_De | |||||
| plugin->reload(); | plugin->reload(); | ||||
| if (init.engine->getProccessMode() == PROCESS_MODE_CONTINUOUS_RACK && ! plugin->canRunInRack()) | |||||
| if (init.engine->getProccessMode() == ENGINE_PROCESS_MODE_CONTINUOUS_RACK && ! plugin->canRunInRack()) | |||||
| { | { | ||||
| init.engine->setLastError("Carla's rack mode can only work with Mono or Stereo LADSPA plugins, sorry!"); | init.engine->setLastError("Carla's rack mode can only work with Mono or Stereo LADSPA plugins, sorry!"); | ||||
| delete plugin; | delete plugin; | ||||
| @@ -333,7 +333,7 @@ public: | |||||
| CARLA_SAFE_ASSERT_RETURN(fInstrument != nullptr,); | CARLA_SAFE_ASSERT_RETURN(fInstrument != nullptr,); | ||||
| carla_debug("LinuxSamplerPlugin::reload() - start"); | carla_debug("LinuxSamplerPlugin::reload() - start"); | ||||
| const ProcessMode processMode(pData->engine->getProccessMode()); | |||||
| const EngineProcessMode processMode(pData->engine->getProccessMode()); | |||||
| // Safely disable plugin for reload | // Safely disable plugin for reload | ||||
| const ScopedDisabler sd(this); | const ScopedDisabler sd(this); | ||||
| @@ -358,7 +358,7 @@ public: | |||||
| // out-left | // out-left | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -373,7 +373,7 @@ public: | |||||
| // out-right | // out-right | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -392,7 +392,7 @@ public: | |||||
| { | { | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -479,7 +479,7 @@ public: | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| pData->engine->callback(CALLBACK_RELOAD_PROGRAMS, fId, 0, 0, 0.0f, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_RELOAD_PROGRAMS, fId, 0, 0, 0.0f, nullptr); | |||||
| } | } | ||||
| } | } | ||||
| @@ -511,7 +511,12 @@ public: | |||||
| { | { | ||||
| // disable any output sound | // disable any output sound | ||||
| for (i=0; i < pData->audioOut.count; ++i) | for (i=0; i < pData->audioOut.count; ++i) | ||||
| { | |||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(outBuffer[i], frames); | FloatVectorOperations::clear(outBuffer[i], frames); | ||||
| #else | |||||
| #endif | |||||
| } | |||||
| return; | return; | ||||
| } | } | ||||
| @@ -879,7 +884,12 @@ public: | |||||
| if (doBalance) | if (doBalance) | ||||
| { | { | ||||
| if (i % 2 == 0) | if (i % 2 == 0) | ||||
| { | |||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::copy(oldBufLeft, outBuffer[i], frames); | FloatVectorOperations::copy(oldBufLeft, outBuffer[i], frames); | ||||
| #else | |||||
| #endif | |||||
| } | |||||
| float balRangeL = (pData->postProc.balanceLeft + 1.0f)/2.0f; | float balRangeL = (pData->postProc.balanceLeft + 1.0f)/2.0f; | ||||
| float balRangeR = (pData->postProc.balanceRight + 1.0f)/2.0f; | float balRangeR = (pData->postProc.balanceRight + 1.0f)/2.0f; | ||||
| @@ -1132,7 +1142,7 @@ CarlaPlugin* LinuxSamplerPlugin::newLinuxSampler(const Initializer& init, const | |||||
| { | { | ||||
| carla_debug("LinuxSamplerPlugin::newLinuxSampler({%p, \"%s\", \"%s\", \"%s\"}, %s, %s)", init.engine, init.filename, init.name, init.label, bool2str(isGIG), bool2str(use16Outs)); | carla_debug("LinuxSamplerPlugin::newLinuxSampler({%p, \"%s\", \"%s\", \"%s\"}, %s, %s)", init.engine, init.filename, init.name, init.label, bool2str(isGIG), bool2str(use16Outs)); | ||||
| if (init.engine->getProccessMode() == PROCESS_MODE_CONTINUOUS_RACK && use16Outs) | |||||
| if (init.engine->getProccessMode() == ENGINE_PROCESS_MODE_CONTINUOUS_RACK && use16Outs) | |||||
| { | { | ||||
| init.engine->setLastError("Carla's rack mode can only work with Stereo modules, please choose the 2-channel only sample-library version"); | init.engine->setLastError("Carla's rack mode can only work with Stereo modules, please choose the 2-channel only sample-library version"); | ||||
| return nullptr; | return nullptr; | ||||
| @@ -401,7 +401,7 @@ public: | |||||
| if (fUi.type == PLUGIN_UI_OSC) | if (fUi.type == PLUGIN_UI_OSC) | ||||
| { | { | ||||
| pData->osc.thread.stopThread(pData->engine->getOptions().uiBridgesTimeout); | |||||
| pData->osc.thread.stop(pData->engine->getOptions().uiBridgesTimeout); | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| @@ -503,7 +503,7 @@ public: | |||||
| } | } | ||||
| } | } | ||||
| for (NonRtList<const char*>::Itenerator it = fCustomURIDs.begin(); it.valid(); it.next()) | |||||
| for (List<const char*>::Itenerator it = fCustomURIDs.begin(); it.valid(); it.next()) | |||||
| { | { | ||||
| const char*& uri(*it); | const char*& uri(*it); | ||||
| @@ -641,7 +641,7 @@ public: | |||||
| if (! (hasMidiIn || needsFixedBuffer())) | if (! (hasMidiIn || needsFixedBuffer())) | ||||
| options |= PLUGIN_OPTION_FIXED_BUFFERS; | options |= PLUGIN_OPTION_FIXED_BUFFERS; | ||||
| if (pData->engine->getProccessMode() != PROCESS_MODE_CONTINUOUS_RACK) | |||||
| if (pData->engine->getProccessMode() != ENGINE_PROCESS_MODE_CONTINUOUS_RACK) | |||||
| { | { | ||||
| if (fOptions & PLUGIN_OPTION_FORCE_STEREO) | if (fOptions & PLUGIN_OPTION_FORCE_STEREO) | ||||
| options |= PLUGIN_OPTION_FORCE_STEREO; | options |= PLUGIN_OPTION_FORCE_STEREO; | ||||
| @@ -1075,7 +1075,7 @@ public: | |||||
| { | { | ||||
| if (yesNo) | if (yesNo) | ||||
| { | { | ||||
| pData->osc.thread.startThread(); | |||||
| pData->osc.thread.start(); | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| @@ -1086,7 +1086,7 @@ public: | |||||
| pData->osc.data.free(); | pData->osc.data.free(); | ||||
| } | } | ||||
| pData->osc.thread.stopThread(pData->engine->getOptions().uiBridgesTimeout); | |||||
| pData->osc.thread.stop(pData->engine->getOptions().uiBridgesTimeout); | |||||
| } | } | ||||
| return; | return; | ||||
| @@ -1136,8 +1136,8 @@ public: | |||||
| { | { | ||||
| fUi.handle = nullptr; | fUi.handle = nullptr; | ||||
| fUi.widget = nullptr; | fUi.widget = nullptr; | ||||
| pData->engine->callback(CALLBACK_ERROR, fId, 0, 0, 0.0f, "Plugin refused to open its own UI"); | |||||
| pData->engine->callback(CALLBACK_SHOW_GUI, fId, 0, 0, 0.0f, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_ERROR, fId, 0, 0, 0.0f, "Plugin refused to open its own UI"); | |||||
| pData->engine->callback(ENGINE_CALLBACK_UI_STATE_CHANGED, fId, 0, 0, 0.0f, nullptr); | |||||
| return; | return; | ||||
| } | } | ||||
| @@ -1237,7 +1237,7 @@ public: | |||||
| //if (! fAtomQueueOut.isEmpty()) | //if (! fAtomQueueOut.isEmpty()) | ||||
| { | { | ||||
| Lv2AtomQueue tmpQueue; | Lv2AtomQueue tmpQueue; | ||||
| tmpQueue.copyDataFrom(fAtomQueueOut); | |||||
| tmpQueue.copyDataFromQueue(fAtomQueueOut); | |||||
| uint32_t portIndex; | uint32_t portIndex; | ||||
| const LV2_Atom* atom; | const LV2_Atom* atom; | ||||
| @@ -1271,7 +1271,7 @@ public: | |||||
| if (fExt.uiidle != nullptr && fExt.uiidle->idle(fUi.handle) != 0) | if (fExt.uiidle != nullptr && fExt.uiidle->idle(fUi.handle) != 0) | ||||
| { | { | ||||
| showGui(false); | showGui(false); | ||||
| pData->engine->callback(CALLBACK_SHOW_GUI, fId, 0, 0, 0.0f, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_UI_STATE_CHANGED, fId, 0, 0, 0.0f, nullptr); | |||||
| } | } | ||||
| } | } | ||||
| @@ -1289,7 +1289,7 @@ public: | |||||
| CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr,); | CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr,); | ||||
| carla_debug("Lv2Plugin::reload() - start"); | carla_debug("Lv2Plugin::reload() - start"); | ||||
| const ProcessMode processMode(pData->engine->getProccessMode()); | |||||
| const EngineProcessMode processMode(pData->engine->getProccessMode()); | |||||
| // Safely disable plugin for reload | // Safely disable plugin for reload | ||||
| const ScopedDisabler sd(this); | const ScopedDisabler sd(this); | ||||
| @@ -1304,7 +1304,7 @@ public: | |||||
| uint32_t aIns, aOuts, cvIns, cvOuts, params, j; | uint32_t aIns, aOuts, cvIns, cvOuts, params, j; | ||||
| aIns = aOuts = cvIns = cvOuts = params = 0; | aIns = aOuts = cvIns = cvOuts = params = 0; | ||||
| NonRtList<unsigned int> evIns, evOuts; | |||||
| List<unsigned int> evIns, evOuts; | |||||
| bool forcedStereoIn, forcedStereoOut; | bool forcedStereoIn, forcedStereoOut; | ||||
| forcedStereoIn = forcedStereoOut = false; | forcedStereoIn = forcedStereoOut = false; | ||||
| @@ -1433,7 +1433,10 @@ public: | |||||
| pData->param.createNew(params+cvIns+cvOuts); | pData->param.createNew(params+cvIns+cvOuts); | ||||
| fParamBuffers = new float[params+cvIns+cvOuts]; | fParamBuffers = new float[params+cvIns+cvOuts]; | ||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(fParamBuffers, params+cvIns+cvOuts); | FloatVectorOperations::clear(fParamBuffers, params+cvIns+cvOuts); | ||||
| #else | |||||
| #endif | |||||
| } | } | ||||
| if (evIns.count() > 0) | if (evIns.count() > 0) | ||||
| @@ -1511,7 +1514,7 @@ public: | |||||
| if (LV2_IS_PORT_AUDIO(portTypes) || LV2_IS_PORT_ATOM_SEQUENCE(portTypes) || LV2_IS_PORT_CV(portTypes) || LV2_IS_PORT_EVENT(portTypes) || LV2_IS_PORT_MIDI_LL(portTypes)) | if (LV2_IS_PORT_AUDIO(portTypes) || LV2_IS_PORT_ATOM_SEQUENCE(portTypes) || LV2_IS_PORT_CV(portTypes) || LV2_IS_PORT_EVENT(portTypes) || LV2_IS_PORT_MIDI_LL(portTypes)) | ||||
| { | { | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -1944,16 +1947,16 @@ public: | |||||
| stepSmall = 1.0f; | stepSmall = 1.0f; | ||||
| stepLarge = 1.0f; | stepLarge = 1.0f; | ||||
| pData->param.data[j].type = PARAMETER_SAMPLE_RATE; | |||||
| //pData->param.data[j].type = PARAMETER_SAMPLE_RATE; | |||||
| pData->param.data[j].hints = 0x0; | pData->param.data[j].hints = 0x0; | ||||
| } | } | ||||
| else if (LV2_IS_PORT_DESIGNATION_FREEWHEELING(portDesignation)) | else if (LV2_IS_PORT_DESIGNATION_FREEWHEELING(portDesignation)) | ||||
| { | { | ||||
| pData->param.data[j].type = PARAMETER_LV2_FREEWHEEL; | |||||
| //pData->param.data[j].type = PARAMETER_LV2_FREEWHEEL; | |||||
| } | } | ||||
| else if (LV2_IS_PORT_DESIGNATION_TIME(portDesignation)) | else if (LV2_IS_PORT_DESIGNATION_TIME(portDesignation)) | ||||
| { | { | ||||
| pData->param.data[j].type = PARAMETER_LV2_TIME; | |||||
| //pData->param.data[j].type = PARAMETER_LV2_TIME; | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| @@ -1983,7 +1986,7 @@ public: | |||||
| stepSmall = 1.0f; | stepSmall = 1.0f; | ||||
| stepLarge = 1.0f; | stepLarge = 1.0f; | ||||
| pData->param.data[j].type = PARAMETER_LATENCY; | |||||
| //pData->param.data[j].type = PARAMETER_LATENCY; | |||||
| pData->param.data[j].hints = 0x0; | pData->param.data[j].hints = 0x0; | ||||
| } | } | ||||
| else if (LV2_IS_PORT_DESIGNATION_SAMPLE_RATE(portDesignation)) | else if (LV2_IS_PORT_DESIGNATION_SAMPLE_RATE(portDesignation)) | ||||
| @@ -1993,7 +1996,7 @@ public: | |||||
| stepSmall = 1.0f; | stepSmall = 1.0f; | ||||
| stepLarge = 1.0f; | stepLarge = 1.0f; | ||||
| pData->param.data[j].type = PARAMETER_SAMPLE_RATE; | |||||
| //pData->param.data[j].type = PARAMETER_SAMPLE_RATE; | |||||
| pData->param.data[j].hints = 0x0; | pData->param.data[j].hints = 0x0; | ||||
| } | } | ||||
| else if (LV2_IS_PORT_DESIGNATION_FREEWHEELING(portDesignation)) | else if (LV2_IS_PORT_DESIGNATION_FREEWHEELING(portDesignation)) | ||||
| @@ -2002,7 +2005,7 @@ public: | |||||
| } | } | ||||
| else if (LV2_IS_PORT_DESIGNATION_TIME(portDesignation)) | else if (LV2_IS_PORT_DESIGNATION_TIME(portDesignation)) | ||||
| { | { | ||||
| pData->param.data[j].type = PARAMETER_LV2_TIME; | |||||
| //pData->param.data[j].type = PARAMETER_LV2_TIME; | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| @@ -2047,10 +2050,10 @@ public: | |||||
| pData->param.ranges[j].stepLarge = stepLarge; | pData->param.ranges[j].stepLarge = stepLarge; | ||||
| // Start parameters in their default values | // Start parameters in their default values | ||||
| if (pData->param.data[j].type != PARAMETER_LV2_FREEWHEEL) | |||||
| //if (pData->param.data[j].type != PARAMETER_LV2_FREEWHEEL) | |||||
| fParamBuffers[j] = def; | fParamBuffers[j] = def; | ||||
| else | |||||
| fParamBuffers[j] = min; | |||||
| //else | |||||
| // fParamBuffers[j] = min; | |||||
| fDescriptor->connect_port(fHandle, i, &fParamBuffers[j]); | fDescriptor->connect_port(fHandle, i, &fParamBuffers[j]); | ||||
| @@ -2071,7 +2074,7 @@ public: | |||||
| { | { | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -2087,7 +2090,7 @@ public: | |||||
| { | { | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -2281,7 +2284,7 @@ public: | |||||
| if (programChanged) | if (programChanged) | ||||
| setMidiProgram(pData->midiprog.current, true, true, true); | setMidiProgram(pData->midiprog.current, true, true, true); | ||||
| pData->engine->callback(CALLBACK_RELOAD_PROGRAMS, fId, 0, 0, 0.0f, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_RELOAD_PROGRAMS, fId, 0, 0, 0.0f, nullptr); | |||||
| } | } | ||||
| } | } | ||||
| @@ -2329,7 +2332,12 @@ public: | |||||
| { | { | ||||
| // disable any output sound | // disable any output sound | ||||
| for (i=0; i < pData->audioOut.count; ++i) | for (i=0; i < pData->audioOut.count; ++i) | ||||
| { | |||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(outBuffer[i], frames); | FloatVectorOperations::clear(outBuffer[i], frames); | ||||
| #else | |||||
| #endif | |||||
| } | |||||
| return; | return; | ||||
| } | } | ||||
| @@ -2464,7 +2472,7 @@ public: | |||||
| // update input ports | // update input ports | ||||
| for (k=0; k < pData->param.count; ++k) | for (k=0; k < pData->param.count; ++k) | ||||
| { | { | ||||
| if (pData->param.data[k].type != PARAMETER_LV2_TIME) | |||||
| //if (pData->param.data[k].type != PARAMETER_LV2_TIME) | |||||
| continue; | continue; | ||||
| doPostRt = false; | doPostRt = false; | ||||
| @@ -3137,9 +3145,20 @@ public: | |||||
| // Reset audio buffers | // Reset audio buffers | ||||
| for (i=0; i < pData->audioIn.count; ++i) | for (i=0; i < pData->audioIn.count; ++i) | ||||
| { | |||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::copy(fAudioInBuffers[i], inBuffer[i]+timeOffset, frames); | FloatVectorOperations::copy(fAudioInBuffers[i], inBuffer[i]+timeOffset, frames); | ||||
| #else | |||||
| #endif | |||||
| } | |||||
| for (i=0; i < pData->audioOut.count; ++i) | for (i=0; i < pData->audioOut.count; ++i) | ||||
| { | |||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(fAudioOutBuffers[i], frames); | FloatVectorOperations::clear(fAudioOutBuffers[i], frames); | ||||
| #else | |||||
| #endif | |||||
| } | |||||
| // -------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------- | ||||
| // Set CV input buffers | // Set CV input buffers | ||||
| @@ -3221,7 +3240,10 @@ public: | |||||
| if (isPair) | if (isPair) | ||||
| { | { | ||||
| CARLA_ASSERT(i+1 < pData->audioOut.count); | CARLA_ASSERT(i+1 < pData->audioOut.count); | ||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::copy(oldBufLeft, fAudioOutBuffers[i], frames); | FloatVectorOperations::copy(oldBufLeft, fAudioOutBuffers[i], frames); | ||||
| #else | |||||
| #endif | |||||
| } | } | ||||
| float balRangeL = (pData->postProc.balanceLeft + 1.0f)/2.0f; | float balRangeL = (pData->postProc.balanceLeft + 1.0f)/2.0f; | ||||
| @@ -3400,7 +3422,7 @@ public: | |||||
| for (uint32_t k=0; k < pData->param.count; ++k) | for (uint32_t k=0; k < pData->param.count; ++k) | ||||
| { | { | ||||
| if (pData->param.data[k].type == PARAMETER_SAMPLE_RATE) | |||||
| //if (pData->param.data[k].type == PARAMETER_SAMPLE_RATE) | |||||
| { | { | ||||
| fParamBuffers[k] = newSampleRate; | fParamBuffers[k] = newSampleRate; | ||||
| pData->postponeRtEvent(kPluginPostRtEventParameterChange, static_cast<int32_t>(k), 1, fParamBuffers[k]); | pData->postponeRtEvent(kPluginPostRtEventParameterChange, static_cast<int32_t>(k), 1, fParamBuffers[k]); | ||||
| @@ -3414,7 +3436,7 @@ public: | |||||
| { | { | ||||
| for (uint32_t k=0; k < pData->param.count; ++k) | for (uint32_t k=0; k < pData->param.count; ++k) | ||||
| { | { | ||||
| if (pData->param.data[k].type == PARAMETER_LV2_FREEWHEEL) | |||||
| //if (pData->param.data[k].type == PARAMETER_LV2_FREEWHEEL) | |||||
| { | { | ||||
| fParamBuffers[k] = isOffline ? pData->param.ranges[k].max : pData->param.ranges[k].min; | fParamBuffers[k] = isOffline ? pData->param.ranges[k].max : pData->param.ranges[k].min; | ||||
| pData->postponeRtEvent(kPluginPostRtEventParameterChange, static_cast<int32_t>(k), 1, fParamBuffers[k]); | pData->postponeRtEvent(kPluginPostRtEventParameterChange, static_cast<int32_t>(k), 1, fParamBuffers[k]); | ||||
| @@ -3683,9 +3705,9 @@ protected: | |||||
| pData->midiprog.data[index].name = carla_strdup(progDesc->name ? progDesc->name : ""); | pData->midiprog.data[index].name = carla_strdup(progDesc->name ? progDesc->name : ""); | ||||
| if (index == pData->midiprog.current) | if (index == pData->midiprog.current) | ||||
| pData->engine->callback(CALLBACK_UPDATE, fId, 0, 0, 0.0, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_UPDATE, fId, 0, 0, 0.0, nullptr); | |||||
| else | else | ||||
| pData->engine->callback(CALLBACK_RELOAD_PROGRAMS, fId, 0, 0, 0.0, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_RELOAD_PROGRAMS, fId, 0, 0, 0.0, nullptr); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -3735,7 +3757,7 @@ protected: | |||||
| } | } | ||||
| // Check if we already have this key | // Check if we already have this key | ||||
| for (NonRtList<CustomData>::Itenerator it = pData->custom.begin(); it.valid(); it.next()) | |||||
| for (List<CustomData>::Itenerator it = pData->custom.begin(); it.valid(); it.next()) | |||||
| { | { | ||||
| CustomData& data(*it); | CustomData& data(*it); | ||||
| @@ -3797,7 +3819,7 @@ protected: | |||||
| const char* stype = nullptr; | const char* stype = nullptr; | ||||
| const char* stringData = nullptr; | const char* stringData = nullptr; | ||||
| for (NonRtList<CustomData>::Itenerator it = pData->custom.begin(); it.valid(); it.next()) | |||||
| for (List<CustomData>::Itenerator it = pData->custom.begin(); it.valid(); it.next()) | |||||
| { | { | ||||
| CustomData& data(*it); | CustomData& data(*it); | ||||
| @@ -3881,7 +3903,7 @@ protected: | |||||
| fUi.handle = nullptr; | fUi.handle = nullptr; | ||||
| fUi.widget = nullptr; | fUi.widget = nullptr; | ||||
| pData->engine->callback(CALLBACK_SHOW_GUI, fId, 0, 0, 0.0f, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_UI_STATE_CHANGED, fId, 0, 0, 0.0f, nullptr); | |||||
| } | } | ||||
| uint32_t handleUiPortMap(const char* const symbol) | uint32_t handleUiPortMap(const char* const symbol) | ||||
| @@ -4847,7 +4869,7 @@ private: | |||||
| Lv2PluginEventData fEventsOut; | Lv2PluginEventData fEventsOut; | ||||
| Lv2PluginOptions fLv2Options; | Lv2PluginOptions fLv2Options; | ||||
| NonRtList<const char*> fCustomURIDs; | |||||
| List<const char*> fCustomURIDs; | |||||
| bool fFirstActive; // first process() call after activate() | bool fFirstActive; // first process() call after activate() | ||||
| EngineTimeInfo fLastTimeInfo; | EngineTimeInfo fLastTimeInfo; | ||||
| @@ -5450,7 +5472,7 @@ CarlaPlugin* CarlaPlugin::newLV2(const Initializer& init) | |||||
| plugin->reload(); | plugin->reload(); | ||||
| if (init.engine->getProccessMode() == PROCESS_MODE_CONTINUOUS_RACK && ! plugin->canRunInRack()) | |||||
| if (init.engine->getProccessMode() == ENGINE_PROCESS_MODE_CONTINUOUS_RACK && ! plugin->canRunInRack()) | |||||
| { | { | ||||
| init.engine->setLastError("Carla's rack mode can only work with Mono or Stereo LV2 plugins, sorry!"); | init.engine->setLastError("Carla's rack mode can only work with Mono or Stereo LV2 plugins, sorry!"); | ||||
| delete plugin; | delete plugin; | ||||
| @@ -233,7 +233,7 @@ public: | |||||
| if (const Parameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)) | if (const Parameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)) | ||||
| return param->scalePointCount; | return param->scalePointCount; | ||||
| carla_assert("const Parameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)", __FILE__, __LINE__); | |||||
| carla_safe_assert("const Parameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)", __FILE__, __LINE__); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -259,7 +259,7 @@ public: | |||||
| if (getMidiInCount() == 0 && (fDescriptor->hints & ::PLUGIN_NEEDS_FIXED_BUFFERS) == 0) | if (getMidiInCount() == 0 && (fDescriptor->hints & ::PLUGIN_NEEDS_FIXED_BUFFERS) == 0) | ||||
| options |= PLUGIN_OPTION_FIXED_BUFFERS; | options |= PLUGIN_OPTION_FIXED_BUFFERS; | ||||
| if (pData->engine->getProccessMode() != PROCESS_MODE_CONTINUOUS_RACK) | |||||
| if (pData->engine->getProccessMode() != ENGINE_PROCESS_MODE_CONTINUOUS_RACK) | |||||
| { | { | ||||
| if (fOptions & PLUGIN_OPTION_FORCE_STEREO) | if (fOptions & PLUGIN_OPTION_FORCE_STEREO) | ||||
| options |= PLUGIN_OPTION_FORCE_STEREO; | options |= PLUGIN_OPTION_FORCE_STEREO; | ||||
| @@ -305,7 +305,7 @@ public: | |||||
| return scalePoint->value; | return scalePoint->value; | ||||
| } | } | ||||
| carla_assert("const Parameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)", __FILE__, __LINE__); | |||||
| carla_safe_assert("const Parameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)", __FILE__, __LINE__); | |||||
| return 0.0f; | return 0.0f; | ||||
| } | } | ||||
| @@ -363,11 +363,11 @@ public: | |||||
| std::strncpy(strBuf, param->name, STR_MAX); | std::strncpy(strBuf, param->name, STR_MAX); | ||||
| return; | return; | ||||
| } | } | ||||
| carla_assert("param->name != nullptr", __FILE__, __LINE__); | |||||
| carla_safe_assert("param->name != nullptr", __FILE__, __LINE__); | |||||
| return CarlaPlugin::getParameterName(parameterId, strBuf); | return CarlaPlugin::getParameterName(parameterId, strBuf); | ||||
| } | } | ||||
| carla_assert("const Parameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)", __FILE__, __LINE__); | |||||
| carla_safe_assert("const Parameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)", __FILE__, __LINE__); | |||||
| CarlaPlugin::getParameterName(parameterId, strBuf); | CarlaPlugin::getParameterName(parameterId, strBuf); | ||||
| } | } | ||||
| @@ -387,7 +387,7 @@ public: | |||||
| return; | return; | ||||
| } | } | ||||
| carla_assert("const char* const text = fDescriptor->get_parameter_text(fHandle, parameterId, value)", __FILE__, __LINE__); | |||||
| carla_safe_assert("const char* const text = fDescriptor->get_parameter_text(fHandle, parameterId, value)", __FILE__, __LINE__); | |||||
| CarlaPlugin::getParameterText(parameterId, strBuf); | CarlaPlugin::getParameterText(parameterId, strBuf); | ||||
| } | } | ||||
| @@ -408,7 +408,7 @@ public: | |||||
| return CarlaPlugin::getParameterUnit(parameterId, strBuf); | return CarlaPlugin::getParameterUnit(parameterId, strBuf); | ||||
| } | } | ||||
| carla_assert("const Parameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)", __FILE__, __LINE__); | |||||
| carla_safe_assert("const Parameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)", __FILE__, __LINE__); | |||||
| CarlaPlugin::getParameterUnit(parameterId, strBuf); | CarlaPlugin::getParameterUnit(parameterId, strBuf); | ||||
| } | } | ||||
| @@ -429,11 +429,11 @@ public: | |||||
| std::strncpy(strBuf, scalePoint->label, STR_MAX); | std::strncpy(strBuf, scalePoint->label, STR_MAX); | ||||
| return; | return; | ||||
| } | } | ||||
| carla_assert("scalePoint->label != nullptr", __FILE__, __LINE__); | |||||
| carla_safe_assert("scalePoint->label != nullptr", __FILE__, __LINE__); | |||||
| return CarlaPlugin::getParameterScalePointLabel(parameterId, scalePointId, strBuf); | return CarlaPlugin::getParameterScalePointLabel(parameterId, scalePointId, strBuf); | ||||
| } | } | ||||
| carla_assert("const Parameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)", __FILE__, __LINE__); | |||||
| carla_safe_assert("const Parameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)", __FILE__, __LINE__); | |||||
| CarlaPlugin::getParameterScalePointLabel(parameterId, scalePointId, strBuf); | CarlaPlugin::getParameterScalePointLabel(parameterId, scalePointId, strBuf); | ||||
| } | } | ||||
| @@ -455,7 +455,7 @@ public: | |||||
| fCurMidiProgs[12], fCurMidiProgs[13], fCurMidiProgs[14], fCurMidiProgs[15]); | fCurMidiProgs[12], fCurMidiProgs[13], fCurMidiProgs[14], fCurMidiProgs[15]); | ||||
| strBuf[STR_MAX] = '\0'; | strBuf[STR_MAX] = '\0'; | ||||
| CarlaPlugin::setCustomData(CUSTOM_DATA_STRING, "midiPrograms", strBuf, false); | |||||
| CarlaPlugin::setCustomData(CUSTOM_DATA_TYPE_STRING, "midiPrograms", strBuf, false); | |||||
| } | } | ||||
| if (fDescriptor == nullptr || fDescriptor->get_state == nullptr || (fDescriptor->hints & ::PLUGIN_USES_STATE) == 0) | if (fDescriptor == nullptr || fDescriptor->get_state == nullptr || (fDescriptor->hints & ::PLUGIN_USES_STATE) == 0) | ||||
| @@ -463,7 +463,7 @@ public: | |||||
| if (char* data = fDescriptor->get_state(fHandle)) | if (char* data = fDescriptor->get_state(fHandle)) | ||||
| { | { | ||||
| CarlaPlugin::setCustomData(CUSTOM_DATA_CHUNK, "State", data, false); | |||||
| CarlaPlugin::setCustomData(CUSTOM_DATA_TYPE_CHUNK, "State", data, false); | |||||
| std::free(data); | std::free(data); | ||||
| } | } | ||||
| } | } | ||||
| @@ -528,10 +528,10 @@ public: | |||||
| CARLA_SAFE_ASSERT_RETURN(value != nullptr,); | CARLA_SAFE_ASSERT_RETURN(value != nullptr,); | ||||
| carla_debug("NativePlugin::setCustomData(%s, %s, %s, %s)", type, key, value, bool2str(sendGui)); | carla_debug("NativePlugin::setCustomData(%s, %s, %s, %s)", type, key, value, bool2str(sendGui)); | ||||
| if (std::strcmp(type, CUSTOM_DATA_STRING) != 0 && std::strcmp(type, CUSTOM_DATA_CHUNK) != 0) | |||||
| if (std::strcmp(type, CUSTOM_DATA_TYPE_STRING) != 0 && std::strcmp(type, CUSTOM_DATA_TYPE_CHUNK) != 0) | |||||
| return carla_stderr2("NativePlugin::setCustomData(\"%s\", \"%s\", \"%s\", %s) - type is invalid", type, key, value, bool2str(sendGui)); | return carla_stderr2("NativePlugin::setCustomData(\"%s\", \"%s\", \"%s\", %s) - type is invalid", type, key, value, bool2str(sendGui)); | ||||
| if (std::strcmp(type, CUSTOM_DATA_CHUNK) == 0) | |||||
| if (std::strcmp(type, CUSTOM_DATA_TYPE_CHUNK) == 0) | |||||
| { | { | ||||
| if (fDescriptor->set_state != nullptr && (fDescriptor->hints & ::PLUGIN_USES_STATE) != 0) | if (fDescriptor->set_state != nullptr && (fDescriptor->hints & ::PLUGIN_USES_STATE) != 0) | ||||
| { | { | ||||
| @@ -571,7 +571,7 @@ public: | |||||
| if (pData->ctrlChannel == static_cast<int32_t>(i)) | if (pData->ctrlChannel == static_cast<int32_t>(i)) | ||||
| { | { | ||||
| pData->midiprog.current = index; | pData->midiprog.current = index; | ||||
| pData->engine->callback(CALLBACK_MIDI_PROGRAM_CHANGED, fId, index, 0, 0.0f, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_MIDI_PROGRAM_CHANGED, fId, index, 0, 0.0f, nullptr); | |||||
| } | } | ||||
| } | } | ||||
| @@ -644,11 +644,11 @@ public: | |||||
| if (fDescriptor->ui_set_custom_data != nullptr) | if (fDescriptor->ui_set_custom_data != nullptr) | ||||
| { | { | ||||
| for (NonRtList<CustomData>::Itenerator it = pData->custom.begin(); it.valid(); it.next()) | |||||
| for (List<CustomData>::Itenerator it = pData->custom.begin(); it.valid(); it.next()) | |||||
| { | { | ||||
| const CustomData& cData(*it); | const CustomData& cData(*it); | ||||
| if (std::strcmp(cData.type, CUSTOM_DATA_STRING) == 0 && std::strcmp(cData.key, "midiPrograms") != 0) | |||||
| if (std::strcmp(cData.type, CUSTOM_DATA_TYPE_STRING) == 0 && std::strcmp(cData.key, "midiPrograms") != 0) | |||||
| fDescriptor->ui_set_custom_data(fHandle, cData.key, cData.value); | fDescriptor->ui_set_custom_data(fHandle, cData.key, cData.value); | ||||
| } | } | ||||
| } | } | ||||
| @@ -689,7 +689,7 @@ public: | |||||
| CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); | CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); | ||||
| carla_debug("NativePlugin::reload() - start"); | carla_debug("NativePlugin::reload() - start"); | ||||
| const ProcessMode processMode(pData->engine->getProccessMode()); | |||||
| const EngineProcessMode processMode(pData->engine->getProccessMode()); | |||||
| // Safely disable plugin for reload | // Safely disable plugin for reload | ||||
| const ScopedDisabler sd(this); | const ScopedDisabler sd(this); | ||||
| @@ -780,7 +780,7 @@ public: | |||||
| { | { | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -813,7 +813,7 @@ public: | |||||
| { | { | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -848,7 +848,7 @@ public: | |||||
| { | { | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -870,7 +870,7 @@ public: | |||||
| { | { | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -996,7 +996,7 @@ public: | |||||
| { | { | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -1012,7 +1012,7 @@ public: | |||||
| { | { | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -1151,7 +1151,7 @@ public: | |||||
| if (programChanged) | if (programChanged) | ||||
| setMidiProgram(pData->midiprog.current, true, true, true); | setMidiProgram(pData->midiprog.current, true, true, true); | ||||
| pData->engine->callback(CALLBACK_RELOAD_PROGRAMS, fId, 0, 0, 0.0f, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_RELOAD_PROGRAMS, fId, 0, 0, 0.0f, nullptr); | |||||
| } | } | ||||
| } | } | ||||
| @@ -1197,7 +1197,12 @@ public: | |||||
| { | { | ||||
| // disable any output sound | // disable any output sound | ||||
| for (i=0; i < pData->audioOut.count; ++i) | for (i=0; i < pData->audioOut.count; ++i) | ||||
| { | |||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(outBuffer[i], frames); | FloatVectorOperations::clear(outBuffer[i], frames); | ||||
| #else | |||||
| #endif | |||||
| } | |||||
| return; | return; | ||||
| } | } | ||||
| @@ -1684,9 +1689,20 @@ public: | |||||
| // Reset audio buffers | // Reset audio buffers | ||||
| for (i=0; i < pData->audioIn.count; ++i) | for (i=0; i < pData->audioIn.count; ++i) | ||||
| { | |||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::copy(fAudioInBuffers[i], inBuffer[i]+timeOffset, frames); | FloatVectorOperations::copy(fAudioInBuffers[i], inBuffer[i]+timeOffset, frames); | ||||
| #else | |||||
| #endif | |||||
| } | |||||
| for (i=0; i < pData->audioOut.count; ++i) | for (i=0; i < pData->audioOut.count; ++i) | ||||
| { | |||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(fAudioOutBuffers[i], frames); | FloatVectorOperations::clear(fAudioOutBuffers[i], frames); | ||||
| #else | |||||
| #endif | |||||
| } | |||||
| // -------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------- | ||||
| // Run plugin | // Run plugin | ||||
| @@ -1744,7 +1760,10 @@ public: | |||||
| if (isPair) | if (isPair) | ||||
| { | { | ||||
| CARLA_ASSERT(i+1 < pData->audioOut.count); | CARLA_ASSERT(i+1 < pData->audioOut.count); | ||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::copy(oldBufLeft, fAudioOutBuffers[i], frames); | FloatVectorOperations::copy(oldBufLeft, fAudioOutBuffers[i], frames); | ||||
| #else | |||||
| #endif | |||||
| } | } | ||||
| float balRangeL = (pData->postProc.balanceLeft + 1.0f)/2.0f; | float balRangeL = (pData->postProc.balanceLeft + 1.0f)/2.0f; | ||||
| @@ -2040,12 +2059,12 @@ protected: | |||||
| void handleUiCustomDataChanged(const char* const key, const char* const value) | void handleUiCustomDataChanged(const char* const key, const char* const value) | ||||
| { | { | ||||
| setCustomData(CUSTOM_DATA_STRING, key, value, false); | |||||
| setCustomData(CUSTOM_DATA_TYPE_STRING, key, value, false); | |||||
| } | } | ||||
| void handleUiClosed() | void handleUiClosed() | ||||
| { | { | ||||
| pData->engine->callback(CALLBACK_SHOW_GUI, fId, 0, 0, 0.0f, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_UI_STATE_CHANGED, fId, 0, 0, 0.0f, nullptr); | |||||
| fIsUiVisible = false; | fIsUiVisible = false; | ||||
| } | } | ||||
| @@ -2123,7 +2142,7 @@ protected: | |||||
| case ::HOST_OPCODE_RELOAD_ALL: | case ::HOST_OPCODE_RELOAD_ALL: | ||||
| break; | break; | ||||
| case HOST_OPCODE_UI_UNAVAILABLE: | case HOST_OPCODE_UI_UNAVAILABLE: | ||||
| pData->engine->callback(CALLBACK_SHOW_GUI, fId, -1, 0, 0.0f, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_UI_STATE_CHANGED, fId, -1, 0, 0.0f, nullptr); | |||||
| break; | break; | ||||
| } | } | ||||
| @@ -2185,7 +2204,7 @@ public: | |||||
| // --------------------------------------------------------------- | // --------------------------------------------------------------- | ||||
| // get descriptor that matches label | // get descriptor that matches label | ||||
| for (NonRtList<const ::PluginDescriptor*>::Itenerator it = sPluginDescriptors.begin(); it.valid(); it.next()) | |||||
| for (List<const ::PluginDescriptor*>::Itenerator it = sPluginDescriptors.begin(); it.valid(); it.next()) | |||||
| { | { | ||||
| fDescriptor = *it; | fDescriptor = *it; | ||||
| @@ -2343,7 +2362,7 @@ private: | |||||
| ::TimeInfo fTimeInfo; | ::TimeInfo fTimeInfo; | ||||
| static NonRtList<const ::PluginDescriptor*> sPluginDescriptors; | |||||
| static List<const ::PluginDescriptor*> sPluginDescriptors; | |||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| @@ -2409,7 +2428,7 @@ private: | |||||
| CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(NativePlugin) | CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(NativePlugin) | ||||
| }; | }; | ||||
| NonRtList<const ::PluginDescriptor*> NativePlugin::sPluginDescriptors; | |||||
| List<const ::PluginDescriptor*> NativePlugin::sPluginDescriptors; | |||||
| static const NativePlugin::ScopedInitializer _si; | static const NativePlugin::ScopedInitializer _si; | ||||
| @@ -2458,7 +2477,7 @@ CarlaPlugin* CarlaPlugin::newNative(const Initializer& init) | |||||
| plugin->reload(); | plugin->reload(); | ||||
| if (init.engine->getProccessMode() == PROCESS_MODE_CONTINUOUS_RACK && ! plugin->canRunInRack()) | |||||
| if (init.engine->getProccessMode() == ENGINE_PROCESS_MODE_CONTINUOUS_RACK && ! plugin->canRunInRack()) | |||||
| { | { | ||||
| init.engine->setLastError("Carla's rack mode can only work with Mono or Stereo Internal plugins, sorry!"); | init.engine->setLastError("Carla's rack mode can only work with Mono or Stereo Internal plugins, sorry!"); | ||||
| delete plugin; | delete plugin; | ||||
| @@ -78,7 +78,7 @@ public: | |||||
| if (fGui.isOsc) | if (fGui.isOsc) | ||||
| { | { | ||||
| pData->osc.thread.stopThread(pData->engine->getOptions().uiBridgesTimeout); | |||||
| pData->osc.thread.stop(pData->engine->getOptions().uiBridgesTimeout); | |||||
| } | } | ||||
| } | } | ||||
| @@ -372,7 +372,7 @@ public: | |||||
| { | { | ||||
| if (yesNo) | if (yesNo) | ||||
| { | { | ||||
| pData->osc.thread.startThread(); | |||||
| pData->osc.thread.start(); | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| @@ -383,7 +383,7 @@ public: | |||||
| pData->osc.data.free(); | pData->osc.data.free(); | ||||
| } | } | ||||
| pData->osc.thread.stopThread(pData->engine->getOptions().uiBridgesTimeout); | |||||
| pData->osc.thread.stop(pData->engine->getOptions().uiBridgesTimeout); | |||||
| } | } | ||||
| } | } | ||||
| else | else | ||||
| @@ -498,7 +498,7 @@ public: | |||||
| CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr,); | CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr,); | ||||
| carla_debug("VstPlugin::reload() - start"); | carla_debug("VstPlugin::reload() - start"); | ||||
| const ProcessMode processMode(pData->engine->getProccessMode()); | |||||
| const EngineProcessMode processMode(pData->engine->getProccessMode()); | |||||
| // Safely disable plugin for reload | // Safely disable plugin for reload | ||||
| const ScopedDisabler sd(this); | const ScopedDisabler sd(this); | ||||
| @@ -558,7 +558,7 @@ public: | |||||
| { | { | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -583,7 +583,7 @@ public: | |||||
| { | { | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -749,7 +749,7 @@ public: | |||||
| { | { | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -765,7 +765,7 @@ public: | |||||
| { | { | ||||
| portName.clear(); | portName.clear(); | ||||
| if (processMode == PROCESS_MODE_SINGLE_CLIENT) | |||||
| if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) | |||||
| { | { | ||||
| portName = fName; | portName = fName; | ||||
| portName += ":"; | portName += ":"; | ||||
| @@ -961,7 +961,7 @@ public: | |||||
| dispatcher(effSetProgram, 0, pData->prog.current, nullptr, 0.0f); | dispatcher(effSetProgram, 0, pData->prog.current, nullptr, 0.0f); | ||||
| } | } | ||||
| pData->engine->callback(CALLBACK_RELOAD_PROGRAMS, fId, 0, 0, 0.0f, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_RELOAD_PROGRAMS, fId, 0, 0, 0.0f, nullptr); | |||||
| } | } | ||||
| } | } | ||||
| @@ -991,7 +991,12 @@ public: | |||||
| { | { | ||||
| // disable any output sound | // disable any output sound | ||||
| for (i=0; i < pData->audioOut.count; ++i) | for (i=0; i < pData->audioOut.count; ++i) | ||||
| { | |||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(outBuffer[i], frames); | FloatVectorOperations::clear(outBuffer[i], frames); | ||||
| #else | |||||
| #endif | |||||
| } | |||||
| return; | return; | ||||
| } | } | ||||
| @@ -1037,7 +1042,12 @@ public: | |||||
| if (pData->latency > 0) | if (pData->latency > 0) | ||||
| { | { | ||||
| for (i=0; i < pData->audioIn.count; ++i) | for (i=0; i < pData->audioIn.count; ++i) | ||||
| { | |||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(pData->latencyBuffers[i], pData->latency); | FloatVectorOperations::clear(pData->latencyBuffers[i], pData->latency); | ||||
| #else | |||||
| #endif | |||||
| } | |||||
| } | } | ||||
| pData->needsReset = false; | pData->needsReset = false; | ||||
| @@ -1512,7 +1522,12 @@ public: | |||||
| else | else | ||||
| { | { | ||||
| for (i=0; i < pData->audioOut.count; ++i) | for (i=0; i < pData->audioOut.count; ++i) | ||||
| { | |||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(vstOutBuffer[i], frames); | FloatVectorOperations::clear(vstOutBuffer[i], frames); | ||||
| #else | |||||
| #endif | |||||
| } | |||||
| #if ! VST_FORCE_DEPRECATED | #if ! VST_FORCE_DEPRECATED | ||||
| fEffect->process(fEffect, | fEffect->process(fEffect, | ||||
| @@ -1557,7 +1572,10 @@ public: | |||||
| if (isPair) | if (isPair) | ||||
| { | { | ||||
| CARLA_ASSERT(i+1 < pData->audioOut.count); | CARLA_ASSERT(i+1 < pData->audioOut.count); | ||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::copy(oldBufLeft, outBuffer[i]+timeOffset, frames); | FloatVectorOperations::copy(oldBufLeft, outBuffer[i]+timeOffset, frames); | ||||
| #else | |||||
| #endif | |||||
| } | } | ||||
| float balRangeL = (pData->postProc.balanceLeft + 1.0f)/2.0f; | float balRangeL = (pData->postProc.balanceLeft + 1.0f)/2.0f; | ||||
| @@ -2080,12 +2098,12 @@ protected: | |||||
| if (pData->prog.current != current) | if (pData->prog.current != current) | ||||
| { | { | ||||
| pData->prog.current = current; | pData->prog.current = current; | ||||
| pData->engine->callback(CALLBACK_PROGRAM_CHANGED, fId, current, 0, 0.0f, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_PROGRAM_CHANGED, fId, current, 0, 0.0f, nullptr); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| pData->engine->callback(CALLBACK_UPDATE, fId, 0, 0, 0.0f, nullptr); | |||||
| pData->engine->callback(ENGINE_CALLBACK_UPDATE, fId, 0, 0, 0.0f, nullptr); | |||||
| ret = 1; | ret = 1; | ||||
| break; | break; | ||||
| @@ -2542,7 +2560,7 @@ CarlaPlugin* CarlaPlugin::newVST(const Initializer& init) | |||||
| plugin->reload(); | plugin->reload(); | ||||
| if (init.engine->getProccessMode() == PROCESS_MODE_CONTINUOUS_RACK && ! plugin->canRunInRack()) | |||||
| if (init.engine->getProccessMode() == ENGINE_PROCESS_MODE_CONTINUOUS_RACK && ! plugin->canRunInRack()) | |||||
| { | { | ||||
| init.engine->setLastError("Carla's rack mode can only work with Stereo VST plugins, sorry!"); | init.engine->setLastError("Carla's rack mode can only work with Stereo VST plugins, sorry!"); | ||||
| delete plugin; | delete plugin; | ||||
| @@ -79,10 +79,10 @@ OBJS += \ | |||||
| nekofilter.c.o | nekofilter.c.o | ||||
| # Simple plugins (C++) | # Simple plugins (C++) | ||||
| OBJS += \ | |||||
| vex-fx.cpp.o \ | |||||
| vex-synth.cpp.o \ | |||||
| vex-src.cpp.o | |||||
| # OBJS += \ | |||||
| # vex-fx.cpp.o \ | |||||
| # vex-synth.cpp.o \ | |||||
| # vex-src.cpp.o | |||||
| # AudioFile | # AudioFile | ||||
| ifeq ($(HAVE_AF_DEPS),true) | ifeq ($(HAVE_AF_DEPS),true) | ||||
| @@ -28,8 +28,8 @@ extern void carla_register_native_plugin_nekofilter(); | |||||
| // Simple plugins (C++) | // Simple plugins (C++) | ||||
| extern void carla_register_native_plugin_sunvoxfile(); | extern void carla_register_native_plugin_sunvoxfile(); | ||||
| extern void carla_register_native_plugin_vex_fx(); | |||||
| extern void carla_register_native_plugin_vex_synth(); | |||||
| //extern void carla_register_native_plugin_vex_fx(); | |||||
| //extern void carla_register_native_plugin_vex_synth(); | |||||
| // Carla | // Carla | ||||
| extern void carla_register_native_plugin_carla(); | extern void carla_register_native_plugin_carla(); | ||||
| @@ -77,8 +77,8 @@ void carla_register_all_plugins() | |||||
| // Simple plugins (C++) | // Simple plugins (C++) | ||||
| //carla_register_native_plugin_sunvoxfile(); // unfinished | //carla_register_native_plugin_sunvoxfile(); // unfinished | ||||
| carla_register_native_plugin_vex_fx(); | |||||
| carla_register_native_plugin_vex_synth(); | |||||
| //carla_register_native_plugin_vex_fx(); | |||||
| //carla_register_native_plugin_vex_synth(); | |||||
| // Carla | // Carla | ||||
| //carla_register_native_plugin_carla(); // kinda unfinished | //carla_register_native_plugin_carla(); // kinda unfinished | ||||
| @@ -18,12 +18,12 @@ | |||||
| #ifndef AUDIO_BASE_HPP_INCLUDED | #ifndef AUDIO_BASE_HPP_INCLUDED | ||||
| #define AUDIO_BASE_HPP_INCLUDED | #define AUDIO_BASE_HPP_INCLUDED | ||||
| #include "CarlaMutex.hpp" | |||||
| #include "CarlaThread.hpp" | |||||
| #ifdef USE_JUCE | |||||
| #include "juce_audio_basics.h" | #include "juce_audio_basics.h" | ||||
| using juce::FloatVectorOperations; | using juce::FloatVectorOperations; | ||||
| using juce::Thread; | |||||
| #endif | |||||
| extern "C" { | extern "C" { | ||||
| #include "audio_decoder/ad.h" | #include "audio_decoder/ad.h" | ||||
| @@ -100,8 +100,14 @@ struct AudioFilePool { | |||||
| CARLA_ASSERT(size != 0); | CARLA_ASSERT(size != 0); | ||||
| startFrame = 0; | startFrame = 0; | ||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(buffer[0], size); | FloatVectorOperations::clear(buffer[0], size); | ||||
| FloatVectorOperations::clear(buffer[1], size); | FloatVectorOperations::clear(buffer[1], size); | ||||
| #else | |||||
| carla_zeroFloat(buffer[0], size); | |||||
| carla_zeroFloat(buffer[1], size); | |||||
| #endif | |||||
| } | } | ||||
| }; | }; | ||||
| @@ -112,11 +118,11 @@ public: | |||||
| virtual uint32_t getLastFrame() const = 0; | virtual uint32_t getLastFrame() const = 0; | ||||
| }; | }; | ||||
| class AudioFileThread : public Thread | |||||
| class AudioFileThread : public CarlaThread | |||||
| { | { | ||||
| public: | public: | ||||
| AudioFileThread(AbstractAudioPlayer* const player, const double sampleRate) | AudioFileThread(AbstractAudioPlayer* const player, const double sampleRate) | ||||
| : Thread("AudioFileThread"), | |||||
| : CarlaThread("AudioFileThread"), | |||||
| kPlayer(player), | kPlayer(player), | ||||
| fNeedsRead(false), | fNeedsRead(false), | ||||
| fFilePtr(nullptr) | fFilePtr(nullptr) | ||||
| @@ -138,7 +144,7 @@ public: | |||||
| ~AudioFileThread() override | ~AudioFileThread() override | ||||
| { | { | ||||
| CARLA_ASSERT(! isThreadRunning()); | |||||
| CARLA_ASSERT(! isRunning()); | |||||
| if (fFilePtr != nullptr) | if (fFilePtr != nullptr) | ||||
| ad_close(fFilePtr); | ad_close(fFilePtr); | ||||
| @@ -149,13 +155,13 @@ public: | |||||
| void startNow() | void startNow() | ||||
| { | { | ||||
| fNeedsRead = true; | fNeedsRead = true; | ||||
| startThread(2); | |||||
| start(); | |||||
| } | } | ||||
| void stopNow() | void stopNow() | ||||
| { | { | ||||
| fNeedsRead = false; | fNeedsRead = false; | ||||
| stopThread(1000); | |||||
| stop(1000); | |||||
| const CarlaMutex::ScopedLocker sl(fMutex); | const CarlaMutex::ScopedLocker sl(fMutex); | ||||
| fPool.reset(); | fPool.reset(); | ||||
| @@ -173,7 +179,7 @@ public: | |||||
| bool loadFilename(const char* const filename) | bool loadFilename(const char* const filename) | ||||
| { | { | ||||
| CARLA_ASSERT(! isThreadRunning()); | |||||
| CARLA_ASSERT(! isRunning()); | |||||
| CARLA_ASSERT(filename != nullptr); | CARLA_ASSERT(filename != nullptr); | ||||
| fPool.startFrame = 0; | fPool.startFrame = 0; | ||||
| @@ -226,8 +232,14 @@ public: | |||||
| //if (pool.startFrame != fPool.startFrame || pool.buffer[0] != fPool.buffer[0] || pool.buffer[1] != fPool.buffer[1]) | //if (pool.startFrame != fPool.startFrame || pool.buffer[0] != fPool.buffer[0] || pool.buffer[1] != fPool.buffer[1]) | ||||
| { | { | ||||
| pool.startFrame = fPool.startFrame; | pool.startFrame = fPool.startFrame; | ||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::copy(pool.buffer[0], fPool.buffer[0], fPool.size); | FloatVectorOperations::copy(pool.buffer[0], fPool.buffer[0], fPool.size); | ||||
| FloatVectorOperations::copy(pool.buffer[1], fPool.buffer[1], fPool.size); | FloatVectorOperations::copy(pool.buffer[1], fPool.buffer[1], fPool.size); | ||||
| #else | |||||
| carla_copyFloat(pool.buffer[0], fPool.buffer[0], fPool.size); | |||||
| carla_copyFloat(pool.buffer[1], fPool.buffer[1], fPool.size); | |||||
| #endif | |||||
| } | } | ||||
| fMutex.unlock(); | fMutex.unlock(); | ||||
| @@ -277,7 +289,12 @@ public: | |||||
| const size_t tmpSize = fPool.size * fFileNfo.channels; | const size_t tmpSize = fPool.size * fFileNfo.channels; | ||||
| float tmpData[tmpSize]; | float tmpData[tmpSize]; | ||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(tmpData, tmpSize); | FloatVectorOperations::clear(tmpData, tmpSize); | ||||
| #else | |||||
| carla_zeroFloat(tmpData, tmpSize); | |||||
| #endif | |||||
| { | { | ||||
| carla_stderr("R: poll data - reading at %li:%02li", readFrame/44100/60, (readFrame/44100) % 60); | carla_stderr("R: poll data - reading at %li:%02li", readFrame/44100/60, (readFrame/44100) % 60); | ||||
| @@ -359,7 +376,7 @@ public: | |||||
| protected: | protected: | ||||
| void run() override | void run() override | ||||
| { | { | ||||
| while (! threadShouldExit()) | |||||
| while (! shouldExit()) | |||||
| { | { | ||||
| const uint32_t lastFrame(kPlayer->getLastFrame()); | const uint32_t lastFrame(kPlayer->getLastFrame()); | ||||
| @@ -127,8 +127,14 @@ protected: | |||||
| { | { | ||||
| //carla_stderr("P: no process"); | //carla_stderr("P: no process"); | ||||
| fLastFrame = timePos->frame; | fLastFrame = timePos->frame; | ||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(out1, frames); | FloatVectorOperations::clear(out1, frames); | ||||
| FloatVectorOperations::clear(out2, frames); | FloatVectorOperations::clear(out2, frames); | ||||
| #else | |||||
| carla_zeroFloat(out1, frames); | |||||
| carla_zeroFloat(out2, frames); | |||||
| #endif | |||||
| return; | return; | ||||
| } | } | ||||
| @@ -141,8 +147,13 @@ protected: | |||||
| if (timePos->frame == 0 && fLastFrame > 0) | if (timePos->frame == 0 && fLastFrame > 0) | ||||
| fThread.setNeedsRead(); | fThread.setNeedsRead(); | ||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(out1, frames); | FloatVectorOperations::clear(out1, frames); | ||||
| FloatVectorOperations::clear(out2, frames); | FloatVectorOperations::clear(out2, frames); | ||||
| #else | |||||
| carla_zeroFloat(out1, frames); | |||||
| carla_zeroFloat(out2, frames); | |||||
| #endif | |||||
| return; | return; | ||||
| } | } | ||||
| @@ -157,8 +168,13 @@ protected: | |||||
| if (timePos->frame + frames < fPool.startFrame) | if (timePos->frame + frames < fPool.startFrame) | ||||
| fThread.setNeedsRead(); | fThread.setNeedsRead(); | ||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(out1, frames); | FloatVectorOperations::clear(out1, frames); | ||||
| FloatVectorOperations::clear(out2, frames); | FloatVectorOperations::clear(out2, frames); | ||||
| #else | |||||
| carla_zeroFloat(out1, frames); | |||||
| carla_zeroFloat(out2, frames); | |||||
| #endif | |||||
| return; | return; | ||||
| } | } | ||||
| @@ -20,7 +20,7 @@ | |||||
| #include "CarlaMIDI.h" | #include "CarlaMIDI.h" | ||||
| #include "CarlaMutex.hpp" | #include "CarlaMutex.hpp" | ||||
| #include "RtList.hpp" | |||||
| #include "List.hpp" | |||||
| #define MAX_EVENT_DATA_SIZE 4 | #define MAX_EVENT_DATA_SIZE 4 | ||||
| #define MIN_PREALLOCATED_EVENT_COUNT 100 | #define MIN_PREALLOCATED_EVENT_COUNT 100 | ||||
| @@ -180,7 +180,7 @@ public: | |||||
| if (! fMutex.tryLock()) | if (! fMutex.tryLock()) | ||||
| return; | return; | ||||
| for (NonRtList<const RawMidiEvent*>::Itenerator it = fData.begin(); it.valid(); it.next()) | |||||
| for (List<const RawMidiEvent*>::Itenerator it = fData.begin(); it.valid(); it.next()) | |||||
| { | { | ||||
| const RawMidiEvent* const rawMidiEvent(*it); | const RawMidiEvent* const rawMidiEvent(*it); | ||||
| @@ -208,7 +208,7 @@ private: | |||||
| uint32_t fDuration; // unused | uint32_t fDuration; // unused | ||||
| CarlaMutex fMutex; | CarlaMutex fMutex; | ||||
| NonRtList<const RawMidiEvent*> fData; | |||||
| List<const RawMidiEvent*> fData; | |||||
| void append(const RawMidiEvent* const event) | void append(const RawMidiEvent* const event) | ||||
| { | { | ||||
| @@ -219,7 +219,7 @@ private: | |||||
| return; | return; | ||||
| } | } | ||||
| for (NonRtList<const RawMidiEvent*>::Itenerator it = fData.begin(); it.valid(); it.next()) | |||||
| for (List<const RawMidiEvent*>::Itenerator it = fData.begin(); it.valid(); it.next()) | |||||
| { | { | ||||
| const RawMidiEvent* const oldEvent(*it); | const RawMidiEvent* const oldEvent(*it); | ||||
| @@ -25,9 +25,10 @@ | |||||
| #include "zynaddsubfx/Effects/Phaser.h" | #include "zynaddsubfx/Effects/Phaser.h" | ||||
| #include "zynaddsubfx/Effects/Reverb.h" | #include "zynaddsubfx/Effects/Reverb.h" | ||||
| #ifdef USE_JUCE | |||||
| #include "juce_audio_basics.h" | #include "juce_audio_basics.h" | ||||
| using juce::FloatVectorOperations; | using juce::FloatVectorOperations; | ||||
| #endif | |||||
| // ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
| @@ -46,8 +47,11 @@ protected: | |||||
| const uint32_t bufferSize(getBufferSize()); | const uint32_t bufferSize(getBufferSize()); | ||||
| efxoutl = new float[bufferSize]; | efxoutl = new float[bufferSize]; | ||||
| efxoutr = new float[bufferSize]; | efxoutr = new float[bufferSize]; | ||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(efxoutl, bufferSize); | FloatVectorOperations::clear(efxoutl, bufferSize); | ||||
| FloatVectorOperations::clear(efxoutr, bufferSize); | FloatVectorOperations::clear(efxoutr, bufferSize); | ||||
| #else | |||||
| #endif | |||||
| } | } | ||||
| ~FxAbstractPlugin() override | ~FxAbstractPlugin() override | ||||
| @@ -135,8 +139,11 @@ protected: | |||||
| { | { | ||||
| fEffect->out(Stereo<float*>(inBuffer[0], inBuffer[1])); | fEffect->out(Stereo<float*>(inBuffer[0], inBuffer[1])); | ||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::copy(outBuffer[0], efxoutl, frames); | FloatVectorOperations::copy(outBuffer[0], efxoutl, frames); | ||||
| FloatVectorOperations::copy(outBuffer[1], efxoutr, frames); | FloatVectorOperations::copy(outBuffer[1], efxoutr, frames); | ||||
| #else | |||||
| #endif | |||||
| } | } | ||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| @@ -148,9 +155,11 @@ protected: | |||||
| delete[] efxoutr; | delete[] efxoutr; | ||||
| efxoutl = new float[bufferSize]; | efxoutl = new float[bufferSize]; | ||||
| efxoutr = new float[bufferSize]; | efxoutr = new float[bufferSize]; | ||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(efxoutl, bufferSize); | FloatVectorOperations::clear(efxoutl, bufferSize); | ||||
| FloatVectorOperations::clear(efxoutr, bufferSize); | FloatVectorOperations::clear(efxoutr, bufferSize); | ||||
| #else | |||||
| #endif | |||||
| doReinit(bufferSize, getSampleRate()); | doReinit(bufferSize, getSampleRate()); | ||||
| } | } | ||||
| @@ -21,8 +21,8 @@ | |||||
| #include "CarlaNative.hpp" | #include "CarlaNative.hpp" | ||||
| #include "CarlaMIDI.h" | #include "CarlaMIDI.h" | ||||
| #include "CarlaString.hpp" | |||||
| #include "RtList.hpp" | |||||
| #include "CarlaThread.hpp" | |||||
| #include "List.hpp" | |||||
| #include "zynaddsubfx/DSP/FFTwrapper.h" | #include "zynaddsubfx/DSP/FFTwrapper.h" | ||||
| #include "zynaddsubfx/Misc/Master.h" | #include "zynaddsubfx/Misc/Master.h" | ||||
| @@ -51,9 +51,10 @@ | |||||
| #include <set> | #include <set> | ||||
| #include <string> | #include <string> | ||||
| #ifdef USE_JUCE | |||||
| #include "juce_audio_basics.h" | #include "juce_audio_basics.h" | ||||
| using juce::FloatVectorOperations; | using juce::FloatVectorOperations; | ||||
| #endif | |||||
| #ifdef WANT_ZYNADDSUBFX_UI | #ifdef WANT_ZYNADDSUBFX_UI | ||||
| static Fl_Tiled_Image* gModuleBackdrop = nullptr; | static Fl_Tiled_Image* gModuleBackdrop = nullptr; | ||||
| @@ -218,7 +219,7 @@ private: | |||||
| bool fInitiated; | bool fInitiated; | ||||
| MidiProgram fRetProgram; | MidiProgram fRetProgram; | ||||
| NonRtList<const ProgramInfo*> fPrograms; | |||||
| List<const ProgramInfo*> fPrograms; | |||||
| CARLA_DECLARE_NON_COPY_CLASS(ZynAddSubFxPrograms) | CARLA_DECLARE_NON_COPY_CLASS(ZynAddSubFxPrograms) | ||||
| }; | }; | ||||
| @@ -331,11 +332,11 @@ static ZynAddSubFxInstanceCount sInstanceCount; | |||||
| // ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
| class ZynAddSubFxThread : public juce::Thread | |||||
| class ZynAddSubFxThread : public CarlaThread | |||||
| { | { | ||||
| public: | public: | ||||
| ZynAddSubFxThread(Master* const master, const HostDescriptor* const host) | ZynAddSubFxThread(Master* const master, const HostDescriptor* const host) | ||||
| : juce::Thread("ZynAddSubFxThread"), | |||||
| : CarlaThread("ZynAddSubFxThread"), | |||||
| fMaster(master), | fMaster(master), | ||||
| kHost(host), | kHost(host), | ||||
| #ifdef WANT_ZYNADDSUBFX_UI | #ifdef WANT_ZYNADDSUBFX_UI | ||||
| @@ -410,7 +411,7 @@ public: | |||||
| protected: | protected: | ||||
| void run() override | void run() override | ||||
| { | { | ||||
| while (! threadShouldExit()) | |||||
| while (! shouldExit()) | |||||
| { | { | ||||
| #ifdef WANT_ZYNADDSUBFX_UI | #ifdef WANT_ZYNADDSUBFX_UI | ||||
| Fl::lock(); | Fl::lock(); | ||||
| @@ -509,7 +510,7 @@ protected: | |||||
| } | } | ||||
| #ifdef WANT_ZYNADDSUBFX_UI | #ifdef WANT_ZYNADDSUBFX_UI | ||||
| if (threadShouldExit() || fUi != nullptr) | |||||
| if (shouldExit() || fUi != nullptr) | |||||
| { | { | ||||
| Fl::lock(); | Fl::lock(); | ||||
| delete fUi; | delete fUi; | ||||
| @@ -548,7 +549,7 @@ public: | |||||
| fIsActive(false), | fIsActive(false), | ||||
| fThread(fMaster, host) | fThread(fMaster, host) | ||||
| { | { | ||||
| fThread.startThread(3); | |||||
| fThread.start(); | |||||
| for (int i = 0; i < NUM_MIDI_PARTS; ++i) | for (int i = 0; i < NUM_MIDI_PARTS; ++i) | ||||
| fMaster->partonoff(i, 1); | fMaster->partonoff(i, 1); | ||||
| @@ -624,8 +625,13 @@ protected: | |||||
| { | { | ||||
| if (pthread_mutex_trylock(&fMaster->mutex) != 0) | if (pthread_mutex_trylock(&fMaster->mutex) != 0) | ||||
| { | { | ||||
| #ifdef USE_JUCE | |||||
| FloatVectorOperations::clear(outBuffer[0], frames); | FloatVectorOperations::clear(outBuffer[0], frames); | ||||
| FloatVectorOperations::clear(outBuffer[1], frames); | FloatVectorOperations::clear(outBuffer[1], frames); | ||||
| #else | |||||
| carla_zeroFloat(outBuffer[0], frames); | |||||
| carla_zeroFloat(outBuffer[1], frames); | |||||
| #endif | |||||
| return; | return; | ||||
| } | } | ||||
| @@ -734,7 +740,7 @@ protected: | |||||
| { | { | ||||
| fMaster = new Master(); | fMaster = new Master(); | ||||
| fThread.setMaster(fMaster); | fThread.setMaster(fMaster); | ||||
| fThread.startThread(3); | |||||
| fThread.start(); | |||||
| for (int i = 0; i < NUM_MIDI_PARTS; ++i) | for (int i = 0; i < NUM_MIDI_PARTS; ++i) | ||||
| fMaster->partonoff(i, 1); | fMaster->partonoff(i, 1); | ||||
| @@ -745,7 +751,7 @@ protected: | |||||
| //ensure that everything has stopped | //ensure that everything has stopped | ||||
| pthread_mutex_lock(&fMaster->mutex); | pthread_mutex_lock(&fMaster->mutex); | ||||
| pthread_mutex_unlock(&fMaster->mutex); | pthread_mutex_unlock(&fMaster->mutex); | ||||
| fThread.stopThread(-1); | |||||
| fThread.stop(-1); | |||||
| delete fMaster; | delete fMaster; | ||||
| fMaster = nullptr; | fMaster = nullptr; | ||||
| @@ -130,4 +130,67 @@ private: | |||||
| } | } | ||||
| }; | }; | ||||
| //============================================================================== | |||||
| /** | |||||
| Helper class providing an RAII-based mechanism for temporarily setting and | |||||
| then re-setting a value. | |||||
| E.g. @code | |||||
| int x = 1; | |||||
| { | |||||
| ScopedValueSetter setter (x, 2); | |||||
| // x is now 2 | |||||
| } | |||||
| // x is now 1 again | |||||
| { | |||||
| ScopedValueSetter setter (x, 3, 4); | |||||
| // x is now 3 | |||||
| } | |||||
| // x is now 4 | |||||
| @endcode | |||||
| */ | |||||
| template <typename ValueType> | |||||
| class ScopedValueSetter | |||||
| { | |||||
| public: | |||||
| /** Creates a ScopedValueSetter that will immediately change the specified value to the | |||||
| given new value, and will then reset it to its original value when this object is deleted. | |||||
| */ | |||||
| ScopedValueSetter(ValueType& valueToSet, ValueType newValue) | |||||
| : value(valueToSet), | |||||
| originalValue(valueToSet) | |||||
| { | |||||
| valueToSet = newValue; | |||||
| } | |||||
| /** Creates a ScopedValueSetter that will immediately change the specified value to the | |||||
| given new value, and will then reset it to be valueWhenDeleted when this object is deleted. | |||||
| */ | |||||
| ScopedValueSetter(ValueType& valueToSet, ValueType newValue, ValueType valueWhenDeleted) | |||||
| : value(valueToSet), | |||||
| originalValue(valueWhenDeleted) | |||||
| { | |||||
| valueToSet = newValue; | |||||
| } | |||||
| ~ScopedValueSetter() | |||||
| { | |||||
| value = originalValue; | |||||
| } | |||||
| private: | |||||
| //============================================================================== | |||||
| ValueType& value; | |||||
| const ValueType originalValue; | |||||
| CARLA_DECLARE_NON_COPY_CLASS(ScopedValueSetter) | |||||
| CARLA_PREVENT_HEAP_ALLOCATION | |||||
| }; | |||||
| #endif // CARLA_JUCE_UTILS_HPP_INCLUDED | #endif // CARLA_JUCE_UTILS_HPP_INCLUDED | ||||
| @@ -61,7 +61,9 @@ | |||||
| #include "lilv/lilvmm.hpp" | #include "lilv/lilvmm.hpp" | ||||
| #include "sratom/sratom.h" | #include "sratom/sratom.h" | ||||
| #ifdef USE_JUCE | |||||
| #include "juce_core.h" | #include "juce_core.h" | ||||
| #endif | |||||
| // ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
| // Define namespaces and missing prefixes | // Define namespaces and missing prefixes | ||||
| @@ -550,6 +552,7 @@ const LV2_RDF_Descriptor* lv2_rdf_new(const LV2_URI uri, const bool fillPresets) | |||||
| if (replaceNode.is_uri()) | if (replaceNode.is_uri()) | ||||
| { | { | ||||
| #ifdef USE_JUCE | |||||
| const juce::String replaceURI(replaceNode.as_uri()); | const juce::String replaceURI(replaceNode.as_uri()); | ||||
| if (replaceURI.startsWith("urn:")) | if (replaceURI.startsWith("urn:")) | ||||
| @@ -557,6 +560,7 @@ const LV2_RDF_Descriptor* lv2_rdf_new(const LV2_URI uri, const bool fillPresets) | |||||
| if (int uniqueId = replaceURI.getTrailingIntValue()) | if (int uniqueId = replaceURI.getTrailingIntValue()) | ||||
| rdfDescriptor->UniqueID = (unsigned long)uniqueId; | rdfDescriptor->UniqueID = (unsigned long)uniqueId; | ||||
| } | } | ||||
| #endif | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -1003,6 +1007,7 @@ const LV2_RDF_Descriptor* lv2_rdf_new(const LV2_URI uri, const bool fillPresets) | |||||
| } | } | ||||
| } | } | ||||
| #ifdef USE_JUCE | |||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| // Set Plugin Presets | // Set Plugin Presets | ||||
| @@ -1065,6 +1070,7 @@ const LV2_RDF_Descriptor* lv2_rdf_new(const LV2_URI uri, const bool fillPresets) | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| #endif | |||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| // Set Plugin Features | // Set Plugin Features | ||||