TidalCycles spread applies a function with each of a list of parameter values in turn, cycling one value per cycle
spread f [v1,v2,...] p applies function f with parameter v1 to pattern p in cycle 1, with v2 in cycle 2, and so on, cycling through the list. This ‘spreads’ a parameterised transformation across multiple values over successive cycles. spread fast [2,3] $ sound "ho ho:2 ho:3 hc" alternates between double-speed and triple-speed. The most powerful use is spread ($) [f1,f2,f3,...] p, which cycles through entirely different transformations: reverse, slow, striate, etc. fastspread squashes all values into one cycle. spreadChoose selects values randomly rather than sequentially. Note: pattern syntax alternatives like fast "<2 3>" are often equivalent and more readable.
Examples
d1 $ spread fast [2,3] $ sound "ho ho:2 ho:3 hc"
-- equivalent to:
d1 $ fast "<2 3>" $ sound "ho ho:2 ho:3 hc"
-- multiple different transforms:
d1 $ spread ($) [density 2, rev, slow 2, striate 3, (# speed "0.8")] $ sound "[bd*2 [~ bd]] [sn future]*2 cp jvbass*4"
Assessment
Explain why spread fast [2,3,4] sounds different from fast "2 3 4". Describe what spread ($) [rev, id, fast 2] does over three cycles. When would you use spreadChoose instead of spread?