Hi! I'm learning Strudel and trying to sequence multiple patterns so each plays fully before moving to the next. Here's what I'm attempting:
setcpm(30)
note(`<
[<b4 a4 g4> e3 <b4 a4 g4> g3 <b4 a4 g4> ]
[f#4 g3 f#4 - e3 f#4 g3 f#4]
[g4 f#4 g4 f#4 g3 f#4 e3 f#4]
>`).sound("piano")
Problem:
The patterns overlap/cycle before completing. I want:
First pattern ([<b4...>]) plays completely
Then second pattern ([e3...]) plays ...
Thanks for any guidance!
I don't know exactly how strudel does it, but I assume it's fundamentally the same as in tidalcycles, where you can never play a pattern "fully", as each pattern is infinite (most are periodic, but 1. that's not a strict requirement, and 2. functions on patterns don't know the periods of their arguments).
This implies that you cannot concatenate patterns ("one after the other"), only interleave them - I think that's what you are getting here, < ... >
is minisyntax notation for cat
, whose semantics is explained in https://hackage-content.haskell.org/package/tidal-core-1.10.0/docs/Sound-Tidal-Core.html#v:cat.
There are some methods for global composition https://hackage-content.haskell.org/package/tidal-core-1.10.0/docs/Sound-Tidal-UI.html#g:4 but you always need to specify how many cycles you want.
Does strudel have a different model? I'd like to know.
1 Like