# Pattern sequencing in Strudel - how to play full cycles sequentially?

**URL:** https://uzu.lurk.org/t/pattern-sequencing-in-strudel-how-to-play-full-cycles-sequentially/5777
**Category:** Strudel
**Tags:** questions
**Created:** [11 July 2025 11:54 UTC](https://uzu.lurk.org/t/pattern-sequencing-in-strudel-how-to-play-full-cycles-sequentially/5777 "2025-07-11T11:54:23Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![Kizayashu](https://uzu.lurk.org/letter_avatar_proxy/v4/letter/k/e5b9ba/32.png) [@Kizayashu](https://uzu.lurk.org/u/Kizayashu)
#### Post date: [11 July 2025 11:54 UTC](https://uzu.lurk.org/t/pattern-sequencing-in-strudel-how-to-play-full-cycles-sequentially/5777/1 "2025-07-11T11:54:23Z")

</div>

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)

```haskell
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!

---

<div class="post-metadata">

### Author: ![jwaldmann](https://uzu.lurk.org/letter_avatar_proxy/v4/letter/j/977dab/32.png) [@jwaldmann](https://uzu.lurk.org/u/jwaldmann)
#### Post date: [11 July 2025 13:10 UTC](https://uzu.lurk.org/t/pattern-sequencing-in-strudel-how-to-play-full-cycles-sequentially/5777/2 "2025-07-11T13:10:47Z")

</div>

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](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](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.

---

<div class="post-metadata">

### Author: ![midikid](https://uzu.lurk.org/user_avatar/uzu.lurk.org/midikid/32/3209_2.png) [@midikid](https://uzu.lurk.org/u/midikid)
#### Post date: [18 August 2025 16:50 UTC](https://uzu.lurk.org/t/pattern-sequencing-in-strudel-how-to-play-full-cycles-sequentially/5777/3 "2025-08-18T16:50:19Z")

</div>

Will arrange work?

### **arrange**

Allows to arrange multiple patterns together over multiple cycles. Takes a variable number of arrays with two elements specifying the number of cycles and the pattern to use.

- 

```haskell
arrange(
  [4, "<c a f e>(3,8)"],
  [2, "<g a>(5,8)"]
).note()

```

---

<div class="post-metadata">

### Author: ![zaluskowsky](https://uzu.lurk.org/letter_avatar_proxy/v4/letter/z/278dde/32.png) [@zaluskowsky](https://uzu.lurk.org/u/zaluskowsky)
#### Post date: [10 September 2025 08:24 UTC](https://uzu.lurk.org/t/pattern-sequencing-in-strudel-how-to-play-full-cycles-sequentially/5777/4 "2025-09-10T08:24:33Z")

</div>

[@Kizayashu](https://club.tidalcycles.org/u/Kizayashu) i m a bit late to this party as i only started using strudel this weekend.  
if you allready corrected the issue and in this post too, better put an edit in.  
too me the pattern here plays exactly as you ask?  
e3 g3 then f#4 until the - (stopnote) and then goes on into the g4.

I m not sure if it s possible to make the software STOP then though.

---

<div class="post-metadata">

### Author: ![The\_Long](https://uzu.lurk.org/user_avatar/uzu.lurk.org/the_long/32/3432_2.png) [@The\_Long](https://uzu.lurk.org/u/The_Long)
#### Post date: [7 December 2025 09:51 UTC](https://uzu.lurk.org/t/pattern-sequencing-in-strudel-how-to-play-full-cycles-sequentially/5777/5 "2025-12-07T09:51:36Z")

</div>

use arrange let list=arrange(  
[3,"[e3 g3]"],  
[1,"[f#4 g3 f#4 ~ e3 f#4 g3 f#4]"],  
[1,"[g4 f#4 g4 f#4 g3 f#4 e3 f#4]"]  
)

$: note(list).sound("piano")

---

<div class="post-metadata">

### Author: ![technoabu](https://uzu.lurk.org/user_avatar/uzu.lurk.org/technoabu/32/3634_2.png) [@technoabu](https://uzu.lurk.org/u/technoabu)
#### Post date: [15 August 2026 14:07 UTC](https://uzu.lurk.org/t/pattern-sequencing-in-strudel-how-to-play-full-cycles-sequentially/5777/6 "2026-08-15T14:07:00Z")

</div>

Perhaps this approach could be useful.

`$: note("[e3 g3]") .mask("<1 0 0 1 0 1>")`  
`$: note("[f#4 g3 f#4 ~ e3 f#4 g3 f#4]") .mask("<0 1 0 1 1 0>")`  
`$: note("[g4 f#4 g4 f#4 g3 f#4 e3 f#4]").mask("<0 0 1 1 0 1>")`

---

<div class="post-metadata">

### Author: ![Dus](https://uzu.lurk.org/user_avatar/uzu.lurk.org/dus/32/3656_2.png) [@Dus](https://uzu.lurk.org/u/Dus)
#### Post date: [27 August 2026 21:05 UTC](https://uzu.lurk.org/t/pattern-sequencing-in-strudel-how-to-play-full-cycles-sequentially/5777/7 "2026-08-27T21:05:53Z")

</div>

This works perfectly. I only started learning Strudel today but as an amateur producer I needed to be able to create a structure, with intros, verse bridge drop etc.

Works great

Music code stolen from Switch Angel because I needed to test a working pattern

// DNB

$drums: (stack(  
s("bd:1") .beat("0.7?,10",16).duck("3:4:5"),  
s("sd:2").beat("4,12",16),  
s("hh:4!8")  
).orbit(2).\_scope()  
.mask("\<1 1 1 1 0 1\>"))  
$bass: (s("supersaw!8")  
.note("\<c# f d# [d# a#2]\>2".sub(12)).orbit(3)  
.rlpf(slider( 0.552)).lpenv("2")  
.mask("\<0 0 1 1 1 1\>"))
