Classes | |
| struct | Instance |
Typedefs | |
| using | Quant = signal::QuantizeScale |
Functions | |
| float | quantize_scale_worst_case_gain () |
| Worst-case linear gain for the Forge registry (series law 8). | |
| float | quantize_scale_mask_offset_bound_v () |
| The additive ceiling of scale-mask mode, in volts: the rounding boundary plus the widest hysteresis window plus the furthest a snap can travel (six semitones, from a mask with a single bit set). | |
| CustomNodeType | make_quantize_scale_node () |
| ForgeNodeDescriptor | descriptor () |
Variables | |
| constexpr const char * | kTypeId = "sequencing.quantize_scale" |
| constexpr state::ParamID | kMode = 1 |
| constexpr state::ParamID | kEdoN = 2 |
| constexpr state::ParamID | kScaleMask = 3 |
| constexpr state::ParamID | kRootPc = 4 |
| constexpr state::ParamID | kHystCents = 5 |
| constexpr state::ParamID | kReset = 6 |
|
inline |
| CustomNodeType pulp::host::sequencing::quantize::make_quantize_scale_node | ( | ) |
| float pulp::host::sequencing::quantize::quantize_scale_mask_offset_bound_v | ( | ) |
The additive ceiling of scale-mask mode, in volts: the rounding boundary plus the widest hysteresis window plus the furthest a snap can travel (six semitones, from a mask with a single bit set).
| float pulp::host::sequencing::quantize::quantize_scale_worst_case_gain | ( | ) |
Worst-case linear gain for the Forge registry (series law 8).
The only node here with a real input-to-output amplitude path, so the only one whose number is a genuine ratio — and it is derived, not measured, at the node's PARAMETER CEILINGS, because a baked param can be automated anywhere in its declared range.
The memoryless answer is 2: out = round(in·N)/N is 0 below half a step, and the worst ratio is at |in| = 0.5/N, where (1/N)/(0.5/N) = 2. That is not this node's bound, because the block is not memoryless — the hysteresis latch is its entire reason for existing. The latch holds a step while the input stays within 0.5 + window of it, so an output of one step survives down to an input of 0.5 − window steps, and the ratio is 1/(0.5 − window). The window is capped at kMaxHystSteps (0.45), which the 50-cent ceiling of hyst_cents reaches at every division from EDO-30 up. So the bound is 1/(0.5 − 0.45) = 20, and the suite constructs exactly that operating point rather than assuming it is unreachable.
Scale-mask mode is NOT multiplicatively bounded at all: with a one-note mask an input arbitrarily near 0 V is snapped up to six semitones away, so the ratio is unbounded as the input approaches zero. Its invariant is ADDITIVE — |out| ≤ |in| + (0.5 + kMaxHystSteps + 6)/12 V — and reporting that as a gain would be a fabrication, so it is stated and asserted separately below.
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |