What an expression cannot do: shape a value over time
smoothstep eases a value as its input crosses a threshold. It cannot ease a
trajectory, because an expression is a pure function of the variables it is
handed — there is no previous frame inside it to ease away from. Anything
time-shaped therefore lives in a table beside [params], not in the expression.
For a trajectory that is [smoothing]:
[params]thickness = "0.9 + beat * 0.6" # the target: snaps on every beat
[smoothing]thickness = { attack = 0.02, release = 0.7 } # the trajectory: hit, then glideattack is the time constant while the value is rising, release while it is
falling or level; a plain thickness = 0.3 means the same constant both ways.
That is what makes a percussive accent land in a frame or two and then decay over
most of a second — a single constant slows the rise exactly as much as the fall,
so there is no value that gives both.
A two-constant entry stops being a low-pass and becomes a rectifier. Because rise and fall are treated differently, a symmetric input comes out with a DC offset: the parameter rides above its input’s mean under sustained material. On a percussive accent that is the point. On a continuous parameter it is a surprise — a fast-attack
huedrifts upward instead of tracking. Use the pair where you want a hit; leave anything continuous symmetric. Full table reference: Parameter roster.
Built from a8ce055 at version 0.115.0. This site tracks main and is not versioned per release.