Skip to main content


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.



Type: rand :: Fractional a => Pattern a

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:

d1 $ sound "bd*8" # pan rand

Or to enjoy a randomised speed from 0.5 to 1.5, you can add 0.5 to it.

d1 $ sound "arpy*4" # speed (rand + 0.5)


Type: irand :: Num a => Int -> Pattern a

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.

d1 $ sound "amencutup*8" # n (irand 8)

Perlin noise#


Type: perlin :: Pattern Double

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:

d1 $ sound "bd*32" # speed (perlin + 0.5)

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:

d1 $ sound "bd*32" # speed (fast 4 $ perlin + 0.5)
d1 $ sound "bd*32" # speed (slow 4 $ perlin + 0.5)


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

d1 $ s "arpy*32" # cutoff (perlinWith (saw * 4) * 2000)


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

d1 $ s "bd*32" # speed (perlin2 (sine*4) + 1)


perlin2With is the same as perlinWith except allows you to provide two functions for 2D noise:

$ s "[arpy*32]"
# lpf (range 60 5000 $ perlin2With (cosine*2) (sine*2))
# lpq 0.3
Last updated on by Raphael Forment