Accumulation
This page will present you all the functions that can be used to pile up things: sounds, patterns, etc... 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.
Superposition
overlay
Type: overlay :: Pattern a -> Pattern a -> Pattern a
The overlay
function is similar to cat
, but combines two patterns, rather than a list of patterns. For example:
d1 $ sound (overlay "bd sn:2" "cp*3")
...is the same as...
d1 $ sound "[bd sn:2, cp*3]"
\<>
Type: (<>) :: Pattern a -> Pattern a -> Pattern a
\<\>
is the same as overlay described above but in operator form. For example:
d1 $ sound ("bd sn:2" <> "cp*3")
stack
Type: stack :: [Pattern a] -> Pattern a
stack
takes a list of patterns and combines them into a new pattern by layering them up - effectively playing all of the patterns in the list simultaneously:
d1 $ stack [
sound "bd bd*2",
sound "hh*2 [sn cp] cp future*4",
sound "arpy" +| n "0 .. 15"
]
This is particularly useful if you want to apply a function or synth control pattern to multiple patterns at once:
d1 $ whenmod 5 3 (striate 3) $ stack [
sound "bd bd*2",
sound "hh*2 [sn cp] cp future*4",
sound "arpy" +| n "0 .. 15"
] # speed "[[1 0.8], [1.5 2]*2]/3"
superimpose
Type: superimpose :: (Pattern a -> Pattern a) -> Pattern a -> Pattern a
superimpose
plays a modified version of a pattern 'on top of' the original pattern, resulting in the modified and original version of the patterns being played at the same time. For example this:
d1 $ superimpose (fast 2) $ sound "bd sn [cp ht] hh"
...is the same as this:
d1 $ stack [sound "bd sn [cp ht] hh",
fast 2 $ sound "bd sn [cp ht] hh"
]
layer
Type: [a -> Pattern b] -> a -> Pattern b
The layer
function allows you to layer up multiple functions on one pattern. For example the following will play two versions of the pattern at the same time, one reversed and one at twice the speed.
d1 $ layer [rev, fast 2] $ sound "arpy [~ arpy:4]"
If you want to include the original version of the pattern in the layering, use the id
function:
d1 $ layer [id, rev, fast 2] $ sound "arpy [~ arpy:4]"
steps
Type: steps :: [(String,String)] -> Pattern String
steps
is like step
but it takes a list of pairs like step
would and it plays them all simultaneously.
d1 $ s (steps [("cp","x x x x x x"),("bd", "xxxx")])
Building iterations
iter
Type: iter :: Pattern Int -> Pattern a -> Pattern a
iter
divides a pattern into a given number of subdivisions, plays the subdivisions in order, but increments the starting subdivision each cycle. The pattern wraps to the first subdivision after the last subdivision is played. Example:
d1 $ iter 4 $ sound "bd hh sn cp"
This will produce the following over four cycles:
bd hh sn cp
hh sn cp bd
sn cp bd hh
cp bd hh sn
iter'
iter'
does the same as iter
but in the other direction. So this:
d1 $ iter' 4 $ sound "bd hh sn cp"
Produces this pattern:
bd hh sn cp
cp bd hh sn
sn cp bd hh
hh sn cp bd