State Values

State values were recently introducted in Tidal version `1.7.2`. For a more `in-depth` introduction, Alex McLean prepared a Google Slides document you can take a look at. It will explain why such a feature was needed and how it was implemented.

The problem with state​

What is the problem? It's tricky to get events to line up. Let's say that you wanted to pattern the structure independently from the notes (isorhythm?):

``d1 \$ slow 2 \$ sound "alphabet(5,8)" # n "0 .. 4"``

There are ways to fix this (e.g. with the `fix` function), but they are not too satisfying/easy. Another aspect is when you want to apply a sequence of values to a parameter (like speed, freq, pan, amp, etc) but you don't want the sequence to be bound to the cycle. When you use the standard pattern syntax, Tidal may make adjustments to preserve the cycle structure.

Introduction to State Values​

But now you can use a state value called "susan" to take values from a (circular) list:

``d1 \$ sound "alphabet(5,8)" # nTake "susan" [0 .. 4]``

If you change it on-the-fly then you have to wait for the list to empty before it changes:

``d1 \$ sound "alphabet(5,8)" # nTake "susan" [7]``

It can cope with infinite lists, but then the list will never empty:

``d1 \$ sound "alphabet(5,8)" # nTake "susan" [0 ..]``

You can stop it and it will always start from where it left off:

``d1 \$ sound "alphabet(5,8)" # nTake "susan" [0 ..]``

You can also just count without a list:

``d1 \$ sound "alphabet(5,8)" # nCount "harold"``

This is the same named state as used by `setF` and for reading from OSC/MIDI. So you can reset the counter like this:

``setF "harold" 0``

Or have another pattern use it:

``d2 \$ sound "newnotes*16" # n "^harold" # gain 1``

There is also `nCountTo` to counting to a modulo:

``d1 \$ struct "t(7,12,3)" \$  sound "gretsch"  # nCountTo "rachael" 5``

Un-intuitive behavior​

You can pattern that.. It starts behaving in ways you wouldn't expect from a Tidal perspective though.. Because the counter runs independently from the pattern:

``d1 \$ struct "t(7,12,3)" \$  sound "gretsch"  # nCountTo "rachael" "<4 8>"``

Likewise, `rev` won't reverse the counter:

``-- notes go upd1 \$ sound "newnotes(5,8)" # nCount "harold"``

The structure is reversed, but the notes still go up:

``d1 \$ rev \$ sound "newnotes(5,8)" # nCount "harold"``

Syntax​

Note the state values syntax: `# nTake "name" [list]`. The name can be any string, and the list needs to have comma separated members in brackets without quotes - this is not pattern grouping in Mini-notation.

``-- This will fail:d3 \$ n "0 2 3" #s "bass" #speedTake "[1 2 3 4 5]"-- This works:d3 \$ n "0 2 3" #s "bass" #speedTake "sVal" [1, 2, 5, 4, 3, 4]``

State Values with other controls​

You can add `Take` to any control, and `Count` / `CountTo` to any numerical control.
Below are some examples of state values used with other controls. Note how the control values repeat in their own sequence, independant from when the note cycle pattern.

``d3 \$ n "0 2 3" #s "bass" # speedTake "sVal" [1, 2, 3, 4, 5, 4, 2]d3 \$ n "0 2 3" #s "bass" # accelerateTake "sVal3" [1, 2, 0.2, -0.8, 1.2]d3 \$ n "0 2 3" #s "bass" # freqTake "sVal4" [200, 400, 700, 300, 220]d3 \$ n "0 2 3" #s "bass" # ampTake "sVal5" [0.1, 0.8, 0.1, 0.7, 0.01]``
danger

This feature is unstable, so these names might change.