There are a few additional things/changes I would like to see. For example, it would be great if = and <> have a tolerance or window factor.
The existing CLIP and LIM outputs are interesting, but I find the labeling extremely confusing / non-intuitive.
The top CLIP is the value of A, clipped to stay within +/- B. This makes sense to me
The top LIM is the overflow of the CLIP computation, computed as A - CLIP. The label does not work for me. I think of this as an overfow output (OVER)
The bottom CLIP is high (10V) if |A| <= |B| ( i.e. top LIM=0), else low (0V). This is opposite of what I expect based on the label.
The bottom LIM is high (10V) if |A| > |B| (i.e. top LIM<>0), else low (0V). Again, the LIM (limit) term is confusing to me.
The CLIP output is a clamp operation, but I wish it could be offset from 0.
I don’t think I have seen a module with the top LIM output, and it has intriguing possibilities.
But with the following changes, I think the module could be much more useful:
Proposed Inputs
An offset knob would be added to A, functioning the same as the B input.
B inputs/knob would stay the same (though different layout)
The critical addition is the TOL (tolerance) input and offset knob. The tolerance would be used for all computations except MIN and MAX. This is equivalent to specifying the size of the window for a windowed comparator.
All inputs would be normaled to 0V, and all offset knobs would range from -10V to 10V.
Proposed Outputs (I will use T to represent the tolerance value):
MIN - Minimum of A and B (no change)
MAX - Maximum of A and B (no change)
A CLIP - The value of A, clamped to within B +/- T.
This can be computed mathematically as: Min( Max(A, A-|B|), A+|B| )
This is basically the same as the existing CLIP, except now B is the offset from zero, and T is the tolerance. To get the old computation, patch the old B value into TOL, and keep B at 0.
A OVER - The amount that A overflows the CLIP constraint, computed as A - CLIP * Sign(T)
For the old behavior of the top LIM, do the same as for CLIP, but make sure the TOL is positive. If it is negative, then it will invert the output.
A = B - Output 10V gate if |A-B| <= |T|, else 0V.
This is equivalent to old bottom CLIP if patched as described for A CLIP.
A <> B - Output 10V gate if |A-B| > |T|, else 0V
This is equivalent to old bottom LIM if patched as described for A CLIP.
A < B - Output 10V gate if A < B - |T|, else 0V
Same as old output as long as TOL = 0
A > B - Output 10V gate if A > B + |T|, else 0V
Same as old output as long as TOL = 0
A <= B - Output 10V gate if A <= B + |T|, else 0V
A >=B - Output 10V gate if A >= B - |T|, else 0V
Granted, many of the outputs above are easily computed from others, but having everything in one module provides a number of benefits:
- Less CPU (fewer modules needed)
- Smaller footprint (good as long as not too crowded)
- Easier to keep divergent signal paths in sync down to the sample level (this is a big one for me)
I’d love to see this implemented within the VCV Fundamental plugin. But I think it would be worthwhile in any plugin - I don’t think there is anything else with that level of flexibility at the moment.
EDIT
I actually implemented a version of this in my Venom plugin WINCOMP module