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.

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.

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.

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 the**MuRan 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.

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.