TidalCycles (or just ‘Tidal’ for short) is a mini language designed for live coding pattern, embedded in the Haskell pure functional programming language. It was originally made by me (Alex), developed through a lot of performances (including as part of slub) and a few rewrites over a number of years. Now a lot of other people are starting to make diverse music with it, and it’s a fully fledged free/open source project with many contributors.

Tidal represents patterns as recipes for how to make infinitely repeating cycles, rather than as a score-like sequence of events. Time structures can be messed with freely, just by stacking extra pattern transformations on top of one another. The end result is a pretty terse way of describing, and more importantly (for live coding) changing musical patterns. Any synthesis parameter (describable as OpenSoundControl or MIDI) can be patterned independently, using a variety of pattern transformations. For more info you can see some videos, or have a look at the documentation on tidalcycles.org.

At the time of writing (2014) Mike Hodnick has started putting up a Tidal pattern every day, and they’re sounding good. Here’s a couple from the start of the series, along with the Tidal code used to generate them:

d1 $ stack [ whenmod 4 3 (stut 4 0.5 0.33) $ sound (samples "[[kv kv:2]/2 ~ ~ tite:1] [sv tite:2] [hh ~ tite:4 tite:3]" (run 44)) |+| speed "[1 [1,1.5] [0.8,2] [0.8 1 0.5 1.2]]/4", whenmod 7 5 (trunc 0.25) $ slowspread (slow) [1,2,1.5,1,3,0.5] $ chop 64 $ sound "[~ bass2] bass2:1*4 [[bass2 bass2:1] [bass2:0 bass2:1]]" |+| speed "[1, 0.5]"]

d1 $ whenmod 8 6 (|+| speed "0.9") $ every 4 (0.25

Here's a video of Kindohm performing live with Tidal in an algorave in Hamilton:

It's worth noting that many other languages, including Supercollider and Common Music, include mini languages for manipulating pattern. Laurie Spiegel wrote a nice paper motivating all this, "Manipulations of Musical Patterns", back in 1981.