# Randomness

This page will present you all the functions that can be used to introduce some randomness in your musical patterns. Each function will be presented following the same model:

**Type signature**: how the function is declared on the**Haskell**side.**Description**: verbal description of the function.**Examples**: a small list of examples that you can copy/paste in your editor.

## #

Pseudo-randomisation### #

rand`rand`

is an oscillator that generates a pattern of (pseudo-)random, floating point numbers between `0.0`

and `1.0`

. For example to randomly pan around the stereo field you can:

Or to enjoy a randomised speed from `0.5`

to `1.5`

, you can add `0.5`

to it.

### #

irand`irand`

is similar to `rand`

, but generates a continuous oscillator of (pseudo-)random integers between `0`

to `n-1`

inclusive. Notably used to pick random samples from a folder.

## #

Perlin noise### #

perlin`perlin`

produces 1D Perlin (smooth) noise. It works like rand but smoothly moves between random values each cycle. For example, you can smoothly and randomly change speed:

The `perlin`

function produces a new random value to move to every cycle. If you want a new random value to be generated more or less frequently, you can use `fast`

or `slow`

, respectively:

### #

perlinWith`perlinWith`

allows you to specify a pattern as input to generate random values instead of using the default cycle count:

### #

perlin2`perlin2`

creates 2D noise by allowing you to specify a custom pattern as a second dimension (cycle number remains as the first dimension):

### #

perlin2With`perlin2With`

is the same as `perlinWith`

except allows you to provide two functions for 2D noise:

## #

The "sometimes" family### #

sometimes`sometimes`

is function, that applies another function to a pattern, around 50% of the time, at random. It takes two inputs, the function to be applied, and the pattern you are applying it to.

For example to distort half the events in a pattern:

`sometimes`

has a number of variants, which apply the function with different likelihood:

function | likelihood |
---|---|

always | 100% |

almostAlways | 90% |

often | 75% |

sometimes | 50% |

rarely | 25% |

almostNever | 10% |

never | 0% |

### #

sometimesByIf you want to be specific, you can use `sometimesBy`

and a number, for example:

to apply the speed control on average 93 times out of a hundred.

### #

someCycles`someCycles`

is similar to `sometimes`

, but instead of applying the given function to random events, it applies it to random cycles. For example the following will either distort all of the events in a cycle, or none of them:

### #

someCyclesByAs with `sometimesBy`

, if you want to be specific, you can use `someCyclesBy`

and a number. For example:

will apply the speed control on average `93`

cycles out of a hundred.

## #

Choosing randomly### #

chooseThe `choose`

function emits a stream of randomly choosen values from the given list, as a continuous pattern:

As with all continuous patterns, you have to be careful to give them structure; in this case choose gives you an infinitely detailed stream of random choices.

### #

choosebyThe `chooseBy`

function is like choose but instead of selecting elements of the list randomly, it uses the given pattern to select elements.

will result in the pattern `"a b c" `

.

### #

wchoose`wchoose`

is similar to `choose`

, but allows you to 'weight' the choices, so some are more likely to be chosen than others. The following is similar to the previous example, but the `2`

is twice as likely to be chosen than the `0`

or `3`

.

##### caution

Prior to version `1.0.0`

of **Tidal**, the weights had to add up to `1`

, but this is no longer the case.

### #

wchoosebyThe `wchooseBy`

function is like `wchoose`

but instead of selecting elements of the list randomly, it uses the given pattern to select elements.

### #

cycleChooseSimilar to `choose`

, but only picks once per cycle: