From 84dc3c69f0cae43633e27b21acdb3fa5fc1cbf8c Mon Sep 17 00:00:00 2001 From: falkTX Date: Thu, 19 Dec 2019 19:07:56 +0000 Subject: [PATCH] Set cv port range when mapped range changes --- source/backend/CarlaEngine.hpp | 7 ++++++- source/backend/engine/CarlaEngineClient.cpp | 4 ++++ source/backend/engine/CarlaEnginePorts.cpp | 21 ++++++++++++++++++- source/backend/plugin/CarlaPlugin.cpp | 5 ++++- source/backend/plugin/CarlaPluginInternal.cpp | 2 ++ 5 files changed, 36 insertions(+), 3 deletions(-) diff --git a/source/backend/CarlaEngine.hpp b/source/backend/CarlaEngine.hpp index 140c109a6..d49e0b26c 100644 --- a/source/backend/CarlaEngine.hpp +++ b/source/backend/CarlaEngine.hpp @@ -646,7 +646,12 @@ public: /*! * Remove a CV port as a source of events. */ - bool removeCVSource(uint32_t portIndexOffset) noexcept; + bool removeCVSource(uint32_t portIndexOffset); + + /*! + * Set value range for a CV port. + */ + bool setCVSourceRange(uint32_t portIndexOffset, float minimum, float maximum); /*! * Get events and add them to an event port. diff --git a/source/backend/engine/CarlaEngineClient.cpp b/source/backend/engine/CarlaEngineClient.cpp index f923c36b7..7f9830ebc 100644 --- a/source/backend/engine/CarlaEngineClient.cpp +++ b/source/backend/engine/CarlaEngineClient.cpp @@ -132,6 +132,10 @@ CarlaEnginePort* CarlaEngineClient::addPort(const EnginePortType portType, const #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH CarlaEngineCVSourcePorts* CarlaEngineClient::createCVSourcePorts() { + // AudioProcessorGraph::Node* const oldNode(graph.getNodeForId(oldPlugin->getPatchbayNodeId())); + // CARLA_SAFE_ASSERT_RETURN(oldNode != nullptr,); + // pData->engine.pData->graph; + return new CarlaEngineCVSourcePorts(); } #endif diff --git a/source/backend/engine/CarlaEnginePorts.cpp b/source/backend/engine/CarlaEnginePorts.cpp index 9e206988c..65bea4f7a 100644 --- a/source/backend/engine/CarlaEnginePorts.cpp +++ b/source/backend/engine/CarlaEnginePorts.cpp @@ -380,7 +380,7 @@ bool CarlaEngineCVSourcePorts::addCVSource(CarlaEngineCVPort* const port, const return true; } -bool CarlaEngineCVSourcePorts::removeCVSource(const uint32_t portIndexOffset) noexcept +bool CarlaEngineCVSourcePorts::removeCVSource(const uint32_t portIndexOffset) { carla_debug("CarlaEngineCVSourcePorts::removeCVSource(%u)", portIndexOffset); @@ -406,6 +406,25 @@ bool CarlaEngineCVSourcePorts::removeCVSource(const uint32_t portIndexOffset) no return true; } +bool CarlaEngineCVSourcePorts::setCVSourceRange(const uint32_t portIndexOffset, const float minimum, const float maximum) +{ + const CarlaRecursiveMutexLocker crml(pData->rmutex); + + for (int i = pData->cvs.size(); --i >= 0;) + { + CarlaEngineEventCV& ecv(pData->cvs.getReference(i)); + + if (ecv.indexOffset == portIndexOffset) + { + CARLA_SAFE_ASSERT_RETURN(ecv.cvPort != nullptr, false); + ecv.cvPort->setRange(minimum, maximum); + return true; + } + } + + return false; +} + void CarlaEngineCVSourcePorts::initPortBuffers(const float* const* const buffers, const uint32_t frames, const bool sampleAccurate, diff --git a/source/backend/plugin/CarlaPlugin.cpp b/source/backend/plugin/CarlaPlugin.cpp index 89a0359c5..8bbe1e5a9 100644 --- a/source/backend/plugin/CarlaPlugin.cpp +++ b/source/backend/plugin/CarlaPlugin.cpp @@ -1723,7 +1723,7 @@ void CarlaPlugin::setParameterMappedControlIndex(const uint32_t parameterId, con CarlaEngineCVPort* const cvPort = (CarlaEngineCVPort*)pData->client->addPort(kEnginePortTypeCV, strBuf, true, parameterId); - cvPort->setRange(pData->param.ranges[parameterId].min, pData->param.ranges[parameterId].max); + cvPort->setRange(pData->param.data[parameterId].mappedMinimum, pData->param.data[parameterId].mappedMaximum); pData->event.cvSourcePorts->addCVSource(cvPort, parameterId); } else if (pData->param.data[parameterId].mappedControlIndex == CONTROL_INDEX_CV) @@ -1761,6 +1761,9 @@ void CarlaPlugin::setParameterMappedRange(const uint32_t parameterId, const floa pData->param.data[parameterId].mappedMinimum = minimum; pData->param.data[parameterId].mappedMaximum = maximum; + if (pData->event.cvSourcePorts != nullptr && pData->param.data[parameterId].mappedControlIndex == CONTROL_INDEX_CV) + pData->event.cvSourcePorts->setCVSourceRange(parameterId, minimum, maximum); + char strBuf[STR_MAX+1]; carla_zeroChars(strBuf, STR_MAX+1); std::snprintf(strBuf, STR_MAX, "%.12g:%.12g", static_cast(minimum), static_cast(maximum)); diff --git a/source/backend/plugin/CarlaPluginInternal.cpp b/source/backend/plugin/CarlaPluginInternal.cpp index dce584904..27005bed5 100644 --- a/source/backend/plugin/CarlaPluginInternal.cpp +++ b/source/backend/plugin/CarlaPluginInternal.cpp @@ -223,6 +223,8 @@ void PluginParameterData::createNew(const uint32_t newCount, const bool withSpec data[i].index = PARAMETER_NULL; data[i].rindex = PARAMETER_NULL; data[i].mappedControlIndex = CONTROL_INDEX_NONE; + data[i].mappedMinimum = -1.0f; + data[i].mappedMaximum = 1.0f; } ranges = new ParameterRanges[newCount];