Difference between revisions of "Combining pattern structure"

From TidalCycles userbase
Jump to: navigation, search
(Marked this version for translation)
Line 4: Line 4:
  
 
<!--T:2-->
 
<!--T:2-->
A core feature of Tidal is the ease in which two patterns can be combined. This is changing a lot in the upcoming 1.0.0 version of Tidal. For example, these are two patterns being combined by adding together their elements:
+
A core feature of Tidal is the ease in which two patterns can be combined.
 +
 
 +
For example, these are two patterns being combined by adding together their elements:
  
 
<!--T:3-->
 
<!--T:3-->
Line 10: Line 12:
 
"2 3" + "4 5 6"
 
"2 3" + "4 5 6"
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
The result of the above is equivalent to the pattern <syntaxhighlight lang = "Haskell" inline>"6 [7 8] 9"</syntaxhighlight>. But why?
  
 
<!--T:4-->
 
<!--T:4-->
The two patterns line up over time like this:
+
Lets look cloesr. The two patterns line up over time like this:
  
 
<!--T:5-->
 
<!--T:5-->
Line 21: Line 25:
  
 
<!--T:6-->
 
<!--T:6-->
Unlike in previous versions of Tidal, by default the structure now comes from _both sides_. This means you end up with _four_ events, because the 5 lines up both with the <syntaxhighlight lang="Haskell" inline>2</syntaxhighlight> and the <syntaxhighlight lang="Haskell" inline>3</syntaxhighlight>. So the result is equivalent to <syntaxhighlight lang="Haskell" inline>"6 [7 8] 9"</syntaxhighlight>:
+
Unlike in previous versions of Tidal, when you combine two patterns in this way, by default the structure now comes from _both patterns_. This means you end up with _four_ events, because the <syntaxhighlight lang="Haskell" inline>5</syntaxhighlight> in the middle lines up both with the <syntaxhighlight lang="Haskell" inline>2</syntaxhighlight> and the <syntaxhighlight lang="Haskell" inline>3</syntaxhighlight>, and gets split in half between them. We can add the resulting pattern to our table:
  
 
<!--T:7-->
 
<!--T:7-->
Line 31: Line 35:
  
 
<!--T:8-->
 
<!--T:8-->
You can see that the event with the value of <syntaxhighlight lang="Haskell" inline>4</syntaxhighlight> fits in the event
+
You can see that the <syntaxhighlight lang="Haskell" inline>4</syntaxhighlight> fits inside <syntaxhighlight lang="Haskell" inline>2</syntaxhighlight>, so where they intersect, you get a new event equal to their sum <syntaxhighlight lang="Haskell" inline>6</syntaxhighlight>.
with value of <syntaxhighlight lang="Haskell" inline>2</syntaxhighlight>, so you get a new event equalling their sum <syntaxhighlight lang="Haskell" inline>6</syntaxhighlight>. You
 
can see that the onset and duration is the interection, which in this
 
case is just the onset and duration of the original event with the
 
value <syntaxhighlight lang="Haskell" inline>4</syntaxhighlight>.
 
  
 
<!--T:9-->
 
<!--T:9-->
 
Also see that the event with value <syntaxhighlight lang="Haskell" inline>5</syntaxhighlight> is cut in half, to create two,
 
Also see that the event with value <syntaxhighlight lang="Haskell" inline>5</syntaxhighlight> is cut in half, to create two,
 
shorter events. Half matches with the <syntaxhighlight lang="Haskell" inline>2</syntaxhighlight> event and the other half
 
shorter events. Half matches with the <syntaxhighlight lang="Haskell" inline>2</syntaxhighlight> event and the other half
matches with the <syntaxhighlight lang="Haskell" inline>3</syntaxhighlight> event. Again, the onset and duration of both
+
matches with the <syntaxhighlight lang="Haskell" inline>3</syntaxhighlight> event.
events comes from the intersections.
 
  
 
<!--T:10-->
 
<!--T:10-->
Line 50: Line 49:
  
 
<!--T:12-->
 
<!--T:12-->
The old behaviour was to take the structure from the left. You can
+
In previous versions of Tidal, the structure always came from the left. You can still do this, but in this case using <syntaxhighlight lang="Haskell" inline>|+`</syntaxhighlight>.  
still do this, but in this case using <syntaxhighlight lang="Haskell" inline>|+`.  
 
  
 
<!--T:13-->
 
<!--T:13-->
Line 62: Line 60:
  
 
<!--T:15-->
 
<!--T:15-->
In the above example, you end up with structure from the first, leftmost pattern, like this:
+
In the above example, you end up with structure from the first (leftmost) pattern, like this:
 
 
  
 
<!--T:16-->
 
<!--T:16-->

Revision as of 16:47, 7 November 2018

This does not describe current behaviour - this is upcoming in version 1.0.0.

A core feature of Tidal is the ease in which two patterns can be combined.

For example, these are two patterns being combined by adding together their elements:

"2 3" + "4 5 6"

The result of the above is equivalent to the pattern "6 [7 8] 9". But why?

Lets look cloesr. The two patterns line up over time like this:

  |  2  |  3  |
+ | 4 | 5 | 6 |

Unlike in previous versions of Tidal, when you combine two patterns in this way, by default the structure now comes from _both patterns_. This means you end up with _four_ events, because the 5 in the middle lines up both with the 2 and the 3, and gets split in half between them. We can add the resulting pattern to our table:

  |  2  |  3  |
+ | 4 | 5 | 6 |
= | 6 |7|8| 9 |

You can see that the 4 fits inside 2, so where they intersect, you get a new event equal to their sum 6.

Also see that the event with value 5 is cut in half, to create two, shorter events. Half matches with the 2 event and the other half matches with the 3 event.

The fourth and final event comes from the intersection of 3 and 6, giving a value of 9.

Structure from the left

In previous versions of Tidal, the structure always came from the left. You can still do this, but in this case using |+`.

For example:

"2 3" |+ "4 5 6"

In the above example, you end up with structure from the first (leftmost) pattern, like this:

   |  2  |  3  |
|+ | 4 | 5 | 6 |
 = |  6  |  8  |

You can see the structure comes from the 2 and 3. 2 lines up with 4, and the start of 3 is in 5, so you end up with 2+4=6 and 3+5=8.

Structure from the right

Likewise, you can take the structure from the right, with +|. So "2 3" +| "4 5 6" looks like:

   |  2  |  3  |
+| | 4 | 5 | 6 |
 = | 6 | 7 | 9 |

All the operators

Note that + is actually an alias for |+|. So |+ is to take the structure from the left, +| from the right, and |+| or + for both. Here are all the basic operators you can use to combine structure:

Function Both Left Right
Add |+| (or +) |+ +|
Subtract |-| (or -) |- -|
Multiply |*| (or *) |* *|
Divide |/| (or /) |/ /|
Modulo |%| |% %|
Left values |<| |< <|
Right values |>| |> >|

The last two are interesting, they let you only take values from one side. So for example you could take structure from the left, but values from the right with |>, for example:

   |  2  |  3  |
|> | 4 | 5 | 6 |
 = |  4  |  5  |

This is very similar to how |+| used to work in the versions of tidal prior to 1.0.0 - it took structure from the left, but values from the right. Accordingly and # maintains this behaviour in the new tidal.