Hi Andrew – see if the examples below help. If you can share a specific scenario or mapping idea I can probably help...
All the expressions below assume your bounds are already defined, e.g.:
“minVal = -10; maxVal = 10;"
For the “mute” effect you can use a special expression variable named “muted”, e.g.:
Mute below minVal: “muted = x < minVal; y = x;”
Mute above maxVal: “muted = x > maxVal; y = x;”
Mute outside range: “muted = (x < minVal) || (x > maxVal); y = x;”
For the “clamp” effect you can use the functions min(), max() or both, e.g.:
Clamp at minVal: “y = max(minVal, x);”
Clamp at maxVal: “y = min(maxVal, x);”
Clamp at both: “y = max(minVal, min(x, maxVal));”
Fold and wrap are much more complex, especially when combining different effects at different extrema. Here are some of the simpler configurations:
Fold at minVal: “y = x > minVal ? x : 2 * minVal - x;”
Fold at maxVal: “y = x < maxVal ? x : 2 * maxVal - x;”
Fold at both: “a = (x - minVal) % range; y = floor((x - minVal) / range) % 2 ? minVal + a : maxVal - a;"
Wrap at minVal: “range = maxVal - minVal; y = x > minVal ? x : minVal + (x - minVal) % range;""
Wrap at maxVal: “range = maxVal - minVal; y = x < maxVal ? x : minVal + (x - minVal) % range;""
Wrap at both: “range = maxVal - minVal; y = minVal + (x - minVal) % range;"