Random Menu


At every clock gate in the clock (yellow) input, a random number is produced between the values in the Low and High inputs. The Rand module always produces a different random number, and it is independent on the setting of the Options Ran Seed.

Unlike Repeat Random (below), the Rand module will generate a new random number whenever modules are reset (as when loading files or clicking on the top menu Run button), even if there is no Clock input.

Repeat Rand

At every clock gate in the clock (yellow) input, a random number is produced between 0 and the value in the Scale input, with the Offset value added. This module produces a repeatable random series, that is reset whenever SoftStep is restarted, as when the Toolbar Run/Start button is clicked. The random series produced is dependent on the setting of the Options Ran Seed.

The RRand module can be made to produce non repeating random numbers by clicking on the blue button on top of the module.. When clicked in, the module produces the same non repeating random number series as the Rand module.

Pattern Rand

When a gate is received in the clock (yellow) input, a new random number is generated from a large (16K) table of precalculated random numbers. This table is generated each time SoftStep is loaded, based on the setting of the Options Ran Seed. Thus, for each different Ran Seed setting, a new pattern table will be generated when SoftStep loads; however the exact same pattern table is always generated for the same seed. This gives you a stable pattern group that you can change as needed.

The Pattern number input is simply an offset into the pattern table, from which a reset will start returning numbers. Each pattern is offset by 128, so you have 128 pattern starts that are 128 numbers apart (128 x 128=16384, the size of the table). The internal counter will read through the entire 16K table before repeating - the Pattern number setting only affects the starting point,

There are actually two random tables generated. One is for random numbers and the other is for 1/f random numbers. 1/f random is a correlated random number, based on the history of previous numbers. This gives a random number that is about halfway between a random walk, and a truly random number. Click the blue button at the top of the module to switch between Random and 1/f random: when clicked in, the module produces 1/f random.

Since the random numbers are precalculated and in a table, it is possible to run backwards, to look up the random values in reverse. A non zero value in the Rev (Reverse) input runs the pattern backward.

The Scale input limits the possible result to no more than its setting; the Offset input is added to the final result after it has been scaled. Thus with a scale of (for example) 30, and an offset of 40, values produced would be between 0 to 30 plus the offset of 40 which results in a final output range in this example of between 40 and 70.

  Multi Rand

These two modules make up a random number array generator in which the elements of the array are unique. For each set of unique random numbers, you set up one MuRan module, and any number of MROut modules. Then on each gate (0-NZ transition) at the MuRan Clock input, a new set of unique numbers are generated, one for each of the MROut's channels.

The middle, Range parameter input on theMuRan module sets the range of the random number to be produced, 0 - 127. For example, setting this to 13, as in the example image, will produce random numbers in the range of 0-13. If Range is set to 0, the module acts differently: it then produces a 50% probability of 0 or the value in the bottom, Offset parameter input.When the Range input is anything other than 0, the Offset parameter input is added to all random numbers produced.

MROut modules can be seen as satellites to the MuRan module. Each MROut module must be told which MuRan module it is to take its output from. Do this by setting the red drop down menu to the same number as the controlling MuRan module. If you have created only one MuRan module, then the only choice will be 1, and it will be set by default

Next, set the blue drop down menu to the result channel you want to use. Each MROut module should be set to a unique channel in order for its output to be unique.


This module allows you to draw a probability distribution curve, or to just set individual probabilities for specific values. It uses the Table Sequencer tables for the probability curve, so you can access it with the Fill utility, or the Page Table Editor; and you can change probability points on the fly by using a Table Write module set to the same table.

When a clock is received at the yellow Clock input the module will output an index value according to the probabilities set in the probability table selected by the green Table input. Table values set to 0 have zero probability and are ignored, all other values have a probability that is the normalized ratio of all non zero values. This means, for example, if the table is set to all zeros except for index 7 which is set to 3, the output will always be 7, which is the index of the only value in the table that is not zero. If you also set index 20 to 6, then 1/3 of the time the output will be 7 (the index set to 3) and 2/3 of the time the output will be 20 (the index set to 6). The math: 6+3=9; 3/9 is 1/3; 6/9 is 2/3.

You can use this module in many different ways. For example, you can make it produce specific pitch (or whatever) values in probability ratios you specify by setting the indexes to the relative probability you want, and then using the output directly. For example, produce a root, 3rd, 5th, and octave by setting index 0 (root), 4 (3rd), 7 (5th), and 12 (octave) to whatever values you like. All other values in the table should be 0. The module will produce the index values of 0, 4, 7, and 12 according to the relative "weights" of these indexes in the table. You can be precise about the distribution values but you need not be as the probabilities are normalized to be relative to each other: bigger values happen more often than lesser values.

Another way to use the probability module is to set up a curve of indexes, then to use a Table sequencer set to another table, or any other sequencer at all, to convert the indexes to arbitrary values. For example, with the Fill utility you might draw a curve in the first 32 indexes, then connect a Slide-32 module to the output of the Prob module. Stages on the Slide-32 will be selected according to the probability weights you set in your probability table, and you can adjust the Slide-32 values to whatever values you want as the "real" output.

This module uses the same random number algorithm as the RRand module, above. Thus it may be set to repeat its patterns or not, according to the setting of the Options Ran Seed.

Controlled Corruption

This module produces a controlled degradation of the original Value parameter input calculated by adding to, or substituting with, an offset (Ofst) according to the (Prob) probability input.

The idea for the module comes from an article on using information theory in algorithmic music originally published in the Leonardo Music Journal by algorithmic composer Laurie Spiegel, titled: An Information Theory Based Compositional Model.

The Clock parameter input calculates a new output value on each 0 to non zero transition. This would normally be the same clock you use to trigger a Counter for the Sequencer(s) that are supplying the Value, Offset and Probability inputs.

Use a Probability value of 0 (never) to 100 (always), to select the likelihood that the original input will be changed. The source for this value might be a simple sequence parallel to the input sequence, or perhaps some calculation based on the input such as inverse MIDI Velocity to degrade the quieter values more than the louder ones.

The Ofset (offset) value (0-127) is added to (or substituted for) the Value input if the Probability fires. The offset values would be chosen according to the intended use of the output. For example, if the output was to be used for pitch, the values might be set up as intervals going from harmonic to dissonant; if the output was program change, the values could be moving increasingly away from the original instrument's tonal color.

Substitution - when the blue button labeled "Ofst" is clicked in, the Offset values are substituted for the original input value rather than added to it.

SoftStep is Copyright © 1999-2004 by John Dunn and Algorithmic Arts. All Rights Reserved.