Of course this is probably at odds with cycles-based thinking; A complex pattern can get very long when fully unfolded. I haven't fooled around with making a function to use in strudel itself yet, but the concept works in theory; taking an array of notes and an array of durations:

```
let pattern = interlace(
["0", "2", ["4", "~", "3"], ["6", ["4", "2"]]],
["1", ".5", "1", ".5"]
);
```

you can make

```
<0@1 [email protected] 4@1 [email protected] 0@1 [email protected] ~@1 [email protected] 0@1 [email protected] 3@1 [email protected] 0@1 [email protected] 4@1 [email protected] 0@1 [email protected] ~@1 [email protected] 0@1 [email protected] 3@1 [email protected] 0@1 [email protected] 4@1 [email protected] 0@1 [email protected] ~@1 [email protected] 0@1 [email protected] 3@1 [email protected] 0@1 [email protected] 4@1 [email protected] 0@1 [email protected] ~@1 [email protected] 0@1 [email protected] 3@1 [email protected] >
```

#strudel

@mayor you might love #punctual by @dktr0
It has a whole variety of different list combinators, and does audio and visuals