Proposed updated documentation for the V2 VCV Fundamental Random module

I’ve invested significant time exploring the VCV Fundamental RANDOM module, and couldn’t resist writing up some documentation, similar to my attempt at documenting the Fundamental VCA. My hope is this documentation (or variant) will be adopted into the official VCV documentation. Or at least I hope this spurs development of some updated official documentation.

VCV Fundamental RANDOM

VCV Random is a random CV generator with multiple forms of randomness and an internal clock, a trigger generator, and it has a triggerable sample-and-hold function.

The RATE slider adjusts the tempo of the internal clock. The clock rate may be modulated with the RATE CV input and attenuverter. When RATE CV is patched, the slider sets the base rate when 0V CV is present. The CV adjusts the rate using 1V/oct calibration, meaning each positive volt doubles the frequency, and each negative volt halves the frequency. The attenuverter must be non zero for the CV to have any effect.

On each clock trigger, the RATE slider LED blinks, and a new random value within the standard -5V to 5V bipolar range is chosen. If the OFS button is engaged (lit), then the random values lie within the standard 0V to 10V unipolar range.

If the TRIG input is patched, the internal clock is ignored, and a new value is only triggered when an external pulse is received. The trigger threshold is any voltage >= 2V, and the trigger CV must fall below 0.1V in order to reset and be ready to receive the next trigger.

If the IN input is patched, this external voltage is used instead of a random voltage upon each value generating trigger, and the OFS button is ignored. External input voltages are not limited to -10V to 10V. Any incoming voltage will be captured and output.

The PROB slider sets the probability that a trigger will generate a value, with 0% never generating a value, and 100% always generating a value. The probability may be modulated with the PROB CV input and attenuverter. The CV is scaled at 10% per volt. So if the slider is at 0% and the attenuverter is 100%, then a 0-10V unipolar CV signal will cover the entire 0 to 100% range. If the slider is at 50% and the attenuverter at 100%, then a -5 to 5V bipolar CV signal covers the 0 to 100% range.

The TRIG output generates a 1ms trigger every time a new value is generated.

The RND slider controls the maximum delta between successive random values. At 0% the value will never change. At 100% the delta can cover the entire 10V range. The RND CV input and attenuverter modulate the delta limit with a scale of 10% per volt. The RND control is ignored if the IN input is patched.

There are four CV outputs for the generated values. The SHAPE slider controls the shape of all four random CV outputs. At 0% all four outputs immediately jump to each newly generated value like a traditional sample and hold. At higher values the change occurs over time, with each output using a different form of interpolation between values. The shape can be modulated by the SHAPE CV input and attenuverter, using a 10% per volt scale.

  • The STEP output interpolates by a number of equally-spaced steps, ranging from 1 to 16. At 0% shape, the output jumps directly to the new random value in 1 step. At 100%, there are 16 steps between successive values.

  • The LIN output interpolates linearly with a slope specified by the shape. At 0% shape, the line has infinite slope, jumping directly to the new random value. At 100%, the output takes the entire clock cycle duration to reach the new value At intermediate values, the output reaches the new value and holds before the clock cycle finishes.

  • The EXP output uses exponential interpolation, with its time constant specified by the shape. At 100% shape, the interpolation becomes linear.

  • The SMTH output interpolates smoothly between values using sine interpolation. The speed of the interpolation is specified by the shape, and the output holds at the new value if it is reached before the clock cycle finishes.

As long as the internal clock is used to trigger new values, then the target voltage will always be reached, even if the rate varies. The RANDOM module always knows the rate at any point in time and can adjust the interpolation accordingly.

But the same is not true if an external trigger is used. RANDOM measures the time between the most recent two input triggers to determine the rate for the current cycle. If the next trigger occurs before the current cycle reaches the target voltage, then the next value cycle begins immediately, starting at the current output voltage, wherever that may be.

All output is suppressed if the RANDOM module is bypassed.

Patch Ideas:

  • Use a low RND value and a 100% SMTH value and patch the output to a quantizer to generate random melodies that gradually rise and fall, rather than jump wildly within the voltage range. This also works well when paired with a VCA to generate random swells in volume.

  • Convert any gate into a 1ms trigger simply by patching the gate to the TRIG input, set the PROB to 100%, and receive the trigger at the TRIG output.

  • Introduce rhythmic variability by dropping random drum beats. Patch a drum trigger to the RANDOM TRIG input, set the PROB slider to less than 100%, and patch the TRIG output to the drum trigger input.


I really love your work with the fundamentals! Reading this one gave me a lot of ideas I would not have had when just fiddling around with the module. Nothing beats a solid documentation! If someone really wants his/her/their new module to be used in its full intention and above that, he/she/they really should think about writing a good documentation. The small fact that Rate is V/Oct calibrated opens up a whole lot of shenanigans. Self modulated half/double-time with an OCT in Front of it should be a lot of fun.

So again, thank you very much! And I hope this documentation ends up in the official manual.


Thanks! I really appreciate the comments.

That tidbit was actually in the old docs. But there was a significant level of other details missing, and then the new V2 version added significant new functionality, as well as modified some old behavior and interface choices.