Pattern Functions

Letโ€™s learn all about functions to create and modify patterns. At the core of Strudel, everything is made of functions.

For example, everything you can do with the Mini-Notation can also be done with a function. This Pattern in Mini Notation:

is equivalent to this Pattern without Mini Notation:

Similarly, there is an equivalent function for every aspect of the mini notation.

Which representation to use is a matter of context. As a rule of thumb, functions are better suited in a larger context, while mini notation is more practical for individiual rhythms.

Limits of Mini Notation

While the Mini Notation is a powerful way to write rhythms concisely, it also has its limits. Take this example:

stack(
  note("c2 eb2(3,8)").s('sawtooth').cutoff(800),
  s("bd,~ sd,hh*4")
)

Here, we are using mini notation for the individual rhythms, while using the function stack to mix them. While stack is also available as , in mini notation, we cannot use it here, because we have different types of sounds.

Combining Patterns

You can freely mix JS patterns, mini patterns and values! For example, this pattern:

cat(
  stack("g3","b3","e4"),
  stack("a3","c3","e4"),
  stack("b3","d3","fs4"),
  stack("b3","e4","g4")
).note()

โ€ฆis equivalent to:

cat(
  "g3,b3,e4",
  "a3,c3,e4",
  "b3,d3,f#4",
  "b3,e4,g4"
).note()

โ€ฆ as well as:

While mini notation is almost always shorter, it only has a handful of modifiers: * / ! @. When using JS patterns, there is a lot more you can do.

Next, letโ€™s look at how you can create patterns