Skip to content

Commit f2540a6

Browse files
committed
Add support for parameter labels also when running as a plugin.
Previously it was only available when running as a Jack application. Signed-off-by: Kristian Amlie <[email protected]>
1 parent 034d0c4 commit f2540a6

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
@@ -3272,6 +3272,7 @@ def clear(self):
32723272
self.parameterData = []
32733273
self.parameterRanges = []
32743274
self.parameterValues = []
3275+
self.parameterScalePoints = []
32753276
self.programCount = 0
32763277
self.programCurrent = -1
32773278
self.programNames = []
@@ -3484,7 +3485,7 @@ def get_parameter_info(self, pluginId, parameterId):
34843485
return self.fPluginsInfo.get(pluginId, self.fFallbackPluginInfo).parameterInfo[parameterId]
34853486

34863487
def get_parameter_scalepoint_info(self, pluginId, parameterId, scalePointId):
3487-
return PyCarlaScalePointInfo
3488+
return self.fPluginsInfo.get(pluginId, self.fFallbackPluginInfo).parameterScalePoints[parameterId][scalePointId]
34883489

34893490
def get_parameter_data(self, pluginId, parameterId):
34903491
return self.fPluginsInfo.get(pluginId, self.fFallbackPluginInfo).parameterData[parameterId]
@@ -3765,13 +3766,34 @@ def _set_parameterCountInfo(self, pluginId, count, info):
37653766
plugin.parameterData = []
37663767
plugin.parameterRanges = []
37673768
plugin.parameterValues = []
3769+
plugin.parameterScalePoints = []
37683770

37693771
# add placeholders
37703772
for _ in range(count):
37713773
plugin.parameterInfo.append(PyCarlaParameterInfo.copy())
37723774
plugin.parameterData.append(PyParameterData.copy())
37733775
plugin.parameterRanges.append(PyParameterRanges.copy())
37743776
plugin.parameterValues.append(0.0)
3777+
plugin.parameterScalePoints.append([])
3778+
3779+
def _set_parameterScalePoint(self, pluginId, param, point, value, label):
3780+
plugin = self.fPluginsInfo.get(pluginId, None)
3781+
if plugin is None:
3782+
print("_set_parameterScalePointCount failed for", pluginId)
3783+
return
3784+
3785+
if param < 0 or param >= plugin.parameterCount:
3786+
print("_set_parameterScalePointCount failed for parameter", param)
3787+
return
3788+
3789+
if point < 0 or point >= plugin.parameterInfo[param]["scalePointCount"]:
3790+
print("_set_parameterScalePointCount failed for scale point", point)
3791+
return
3792+
3793+
plugin.parameterScalePoints[param][point] = {
3794+
"value": value,
3795+
"label": label,
3796+
}
37753797

37763798
def _set_programCount(self, pluginId, count):
37773799
plugin = self.fPluginsInfo.get(pluginId, None)
@@ -3810,6 +3832,11 @@ def _set_parameterInfo(self, pluginId, paramIndex, info):
38103832
else:
38113833
print("_set_parameterInfo failed for", pluginId, "and index", paramIndex)
38123834

3835+
# add placeholders
3836+
plugin.parameterScalePoints[paramIndex] = []
3837+
for _ in range(info["scalePointCount"]):
3838+
plugin.parameterScalePoints[paramIndex].append({})
3839+
38133840
def _set_parameterData(self, pluginId, paramIndex, data):
38143841
plugin = self.fPluginsInfo.get(pluginId, None)
38153842
if plugin is None:

0 commit comments

Comments
 (0)