Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions source/backend/engine/CarlaEngineNative.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -589,6 +589,11 @@ class CarlaEngineNative : public CarlaEngine
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),);
}

std::snprintf(tmpBuf, STR_MAX, "PARAMETER_SCALEPOINT_COUNT_%i:%i\n", pluginId, i);
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);
std::snprintf(tmpBuf, STR_MAX, "%i\n", plugin->getParameterScalePointCount(i));
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);

std::snprintf(tmpBuf, STR_MAX, "PARAMETER_RANGES_%i:%i\n", pluginId, i);
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);

Expand All @@ -606,6 +611,20 @@ class CarlaEngineNative : public CarlaEngine

std::snprintf(tmpBuf, STR_MAX, "%.12g\n", static_cast<double>(plugin->getParameterValue(i)));
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);

for (uint32_t p = 0; p < plugin->getParameterScalePointCount(i); p++) {
std::snprintf(tmpBuf, STR_MAX, "PARAMETER_SCALEPOINT_%i:%i:%i\n", pluginId, i, p);
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);

std::snprintf(tmpBuf, STR_MAX, "%.12g\n", plugin->getParameterScalePointValue(i, p));
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);

if (plugin->getParameterScalePointLabel(i, p, tmpBuf)) {
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(tmpBuf),);
} else {
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),);
}
}
}

fUiServer.syncMessages();
Expand Down
11 changes: 11 additions & 0 deletions source/frontend/carla-plugin
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,17 @@ class CarlaMiniW(ExternalUI, HostWindow):
}
self.host._set_parameterRanges(pluginId, paramId, paramRanges)

elif msg.startswith("PARAMETER_SCALEPOINT_COUNT_"):
pluginId, paramId = [int(i) for i in msg.replace("PARAMETER_SCALEPOINT_COUNT_", "").split(":")]
scalePointCount = int(self.readlineblock())
self.host._set_parameterScalePointCount(pluginId, paramId, scalePointCount)

elif msg.startswith("PARAMETER_SCALEPOINT_"):
pluginId, param, point = [int(i) for i in msg.replace("PARAMETER_SCALEPOINT_", "").split(":")]
value = float(self.readlineblock())
label = self.readlineblock()
self.host._set_parameterScalePoint(pluginId, param, point, value, label)

elif msg.startswith("PROGRAM_COUNT_"):
pluginId, count, current = [int(i) for i in msg.replace("PROGRAM_COUNT_", "").split(":")]
self.host._set_programCount(pluginId, count)
Expand Down
39 changes: 38 additions & 1 deletion source/frontend/carla_backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -3272,6 +3272,7 @@ def clear(self):
self.parameterData = []
self.parameterRanges = []
self.parameterValues = []
self.parameterScalePoints = []
self.programCount = 0
self.programCurrent = -1
self.programNames = []
Expand Down Expand Up @@ -3484,7 +3485,7 @@ def get_parameter_info(self, pluginId, parameterId):
return self.fPluginsInfo.get(pluginId, self.fFallbackPluginInfo).parameterInfo[parameterId]

def get_parameter_scalepoint_info(self, pluginId, parameterId, scalePointId):
return PyCarlaScalePointInfo
return self.fPluginsInfo.get(pluginId, self.fFallbackPluginInfo).parameterScalePoints[parameterId][scalePointId]

def get_parameter_data(self, pluginId, parameterId):
return self.fPluginsInfo.get(pluginId, self.fFallbackPluginInfo).parameterData[parameterId]
Expand Down Expand Up @@ -3765,13 +3766,34 @@ def _set_parameterCountInfo(self, pluginId, count, info):
plugin.parameterData = []
plugin.parameterRanges = []
plugin.parameterValues = []
plugin.parameterScalePoints = []

# add placeholders
for _ in range(count):
plugin.parameterInfo.append(PyCarlaParameterInfo.copy())
plugin.parameterData.append(PyParameterData.copy())
plugin.parameterRanges.append(PyParameterRanges.copy())
plugin.parameterValues.append(0.0)
plugin.parameterScalePoints.append([])

def _set_parameterScalePoint(self, pluginId, param, point, value, label):
plugin = self.fPluginsInfo.get(pluginId, None)
if plugin is None:
print("_set_parameterScalePoint failed for", pluginId)
return

if param < 0 or param >= plugin.parameterCount:
print("_set_parameterScalePoint failed for parameter", param)
return

if point < 0 or point >= plugin.parameterInfo[param]["scalePointCount"]:
print("_set_parameterScalePoint failed for scale point", point)
return

plugin.parameterScalePoints[param][point] = {
"value": value,
"label": label,
}

def _set_programCount(self, pluginId, count):
plugin = self.fPluginsInfo.get(pluginId, None)
Expand Down Expand Up @@ -3810,6 +3832,21 @@ def _set_parameterInfo(self, pluginId, paramIndex, info):
else:
print("_set_parameterInfo failed for", pluginId, "and index", paramIndex)

def _set_parameterScalePointCount(self, pluginId, paramIndex, count):
plugin = self.fPluginsInfo.get(pluginId, None)
if plugin is None:
print("_set_parameterScalePointCount failed for", pluginId)
return
if paramIndex < plugin.parameterCount and paramIndex < len(plugin.parameterInfo):
plugin.parameterInfo[paramIndex]["scalePointCount"] = count

# add placeholders
plugin.parameterScalePoints[paramIndex] = []
for _ in range(count):
plugin.parameterScalePoints[paramIndex].append({})
else:
print("_set_parameterScalePointCount failed for", pluginId, "and index", paramIndex)

def _set_parameterData(self, pluginId, paramIndex, data):
plugin = self.fPluginsInfo.get(pluginId, None)
if plugin is None:
Expand Down
Loading