Skip to content

Commit 26adaad

Browse files
author
Milkii Brewster
committed
Merge PR falkTX#2020: add support for parameter labels when running as a plugin
2 parents b762c84 + f2540a6 commit 26adaad

3 files changed

Lines changed: 53 additions & 2 deletions

File tree

source/backend/engine/CarlaEngineNative.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -589,6 +589,9 @@ class CarlaEngineNative : public CarlaEngine
589589
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),);
590590
}
591591

592+
std::snprintf(tmpBuf, STR_MAX, "%i\n", plugin->getParameterScalePointCount(i));
593+
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);
594+
592595
std::snprintf(tmpBuf, STR_MAX, "PARAMETER_RANGES_%i:%i\n", pluginId, i);
593596
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);
594597

@@ -606,6 +609,20 @@ class CarlaEngineNative : public CarlaEngine
606609

607610
std::snprintf(tmpBuf, STR_MAX, "%.12g\n", static_cast<double>(plugin->getParameterValue(i)));
608611
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);
612+
613+
for (uint32_t p = 0; p < plugin->getParameterScalePointCount(i); p++) {
614+
std::snprintf(tmpBuf, STR_MAX, "PARAMETER_SCALEPOINT_%i:%i:%i\n", pluginId, i, p);
615+
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);
616+
617+
std::snprintf(tmpBuf, STR_MAX, "%.12g\n", plugin->getParameterScalePointValue(i, p));
618+
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),);
619+
620+
if (plugin->getParameterScalePointLabel(i, p, tmpBuf)) {
621+
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(tmpBuf),);
622+
} else {
623+
CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),);
624+
}
625+
}
609626
}
610627

611628
fUiServer.syncMessages();

source/frontend/carla-plugin

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,14 +280,15 @@ class CarlaMiniW(ExternalUI, HostWindow):
280280
paramUnit = self.readlineblock()
281281
paramComment = self.readlineblock()
282282
paramGroupName = self.readlineblock()
283+
scalePointCount = int(self.readlineblock())
283284

284285
paramInfo = {
285286
'name': paramName,
286287
'symbol': "",
287288
'unit': paramUnit,
288289
'comment': paramComment,
289290
'groupName': paramGroupName,
290-
'scalePointCount': 0,
291+
'scalePointCount': scalePointCount,
291292
}
292293
self.host._set_parameterInfo(pluginId, paramId, paramInfo)
293294

@@ -317,6 +318,12 @@ class CarlaMiniW(ExternalUI, HostWindow):
317318
}
318319
self.host._set_parameterRanges(pluginId, paramId, paramRanges)
319320

321+
elif msg.startswith("PARAMETER_SCALEPOINT_"):
322+
pluginId, param, point = [int(i) for i in msg.replace("PARAMETER_SCALEPOINT_", "").split(":")]
323+
value = float(self.readlineblock())
324+
label = self.readlineblock()
325+
self.host._set_parameterScalePoint(pluginId, param, point, value, label)
326+
320327
elif msg.startswith("PROGRAM_COUNT_"):
321328
pluginId, count, current = [int(i) for i in msg.replace("PROGRAM_COUNT_", "").split(":")]
322329
self.host._set_programCount(pluginId, count)

source/frontend/carla_backend.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3285,6 +3285,7 @@ def clear(self):
32853285
self.parameterData = []
32863286
self.parameterRanges = []
32873287
self.parameterValues = []
3288+
self.parameterScalePoints = []
32883289
self.programCount = 0
32893290
self.programCurrent = -1
32903291
self.programNames = []
@@ -3497,7 +3498,7 @@ def get_parameter_info(self, pluginId, parameterId):
34973498
return self.fPluginsInfo.get(pluginId, self.fFallbackPluginInfo).parameterInfo[parameterId]
34983499

34993500
def get_parameter_scalepoint_info(self, pluginId, parameterId, scalePointId):
3500-
return PyCarlaScalePointInfo
3501+
return self.fPluginsInfo.get(pluginId, self.fFallbackPluginInfo).parameterScalePoints[parameterId][scalePointId]
35013502

35023503
def get_parameter_data(self, pluginId, parameterId):
35033504
return self.fPluginsInfo.get(pluginId, self.fFallbackPluginInfo).parameterData[parameterId]
@@ -3778,13 +3779,34 @@ def _set_parameterCountInfo(self, pluginId, count, info):
37783779
plugin.parameterData = []
37793780
plugin.parameterRanges = []
37803781
plugin.parameterValues = []
3782+
plugin.parameterScalePoints = []
37813783

37823784
# add placeholders
37833785
for _ in range(count):
37843786
plugin.parameterInfo.append(PyCarlaParameterInfo.copy())
37853787
plugin.parameterData.append(PyParameterData.copy())
37863788
plugin.parameterRanges.append(PyParameterRanges.copy())
37873789
plugin.parameterValues.append(0.0)
3790+
plugin.parameterScalePoints.append([])
3791+
3792+
def _set_parameterScalePoint(self, pluginId, param, point, value, label):
3793+
plugin = self.fPluginsInfo.get(pluginId, None)
3794+
if plugin is None:
3795+
print("_set_parameterScalePointCount failed for", pluginId)
3796+
return
3797+
3798+
if param < 0 or param >= plugin.parameterCount:
3799+
print("_set_parameterScalePointCount failed for parameter", param)
3800+
return
3801+
3802+
if point < 0 or point >= plugin.parameterInfo[param]["scalePointCount"]:
3803+
print("_set_parameterScalePointCount failed for scale point", point)
3804+
return
3805+
3806+
plugin.parameterScalePoints[param][point] = {
3807+
"value": value,
3808+
"label": label,
3809+
}
37883810

37893811
def _set_programCount(self, pluginId, count):
37903812
plugin = self.fPluginsInfo.get(pluginId, None)
@@ -3823,6 +3845,11 @@ def _set_parameterInfo(self, pluginId, paramIndex, info):
38233845
else:
38243846
print("_set_parameterInfo failed for", pluginId, "and index", paramIndex)
38253847

3848+
# add placeholders
3849+
plugin.parameterScalePoints[paramIndex] = []
3850+
for _ in range(info["scalePointCount"]):
3851+
plugin.parameterScalePoints[paramIndex].append({})
3852+
38263853
def _set_parameterData(self, pluginId, paramIndex, data):
38273854
plugin = self.fPluginsInfo.get(pluginId, None)
38283855
if plugin is None:

0 commit comments

Comments
 (0)