Difference between revisions of "Combining pattern structure"

From TidalCycles userbase
Jump to: navigation, search
Line 36: Line 36:
 
giving a value of <syntaxhighlight lang="Haskell" inline>9</syntaxhighlight>.
 
giving a value of <syntaxhighlight lang="Haskell" inline>9</syntaxhighlight>.
  
## Structure from the left
+
== Structure from the left ==
  
 
The old behaviour was to take the structure from the left. You can
 
The old behaviour was to take the structure from the left. You can
Line 60: Line 60:
 
and <syntaxhighlight lang="Haskell" inline>3+5=8</syntaxhighlight>.
 
and <syntaxhighlight lang="Haskell" inline>3+5=8</syntaxhighlight>.
  
## Structure from the right
+
== Structure from the right ==
  
 
Likewise, you can take the structure from the right, with <syntaxhighlight lang="Haskell" inline>+|</syntaxhighlight>. So <syntaxhighlight lang="Haskell" inline>"2
 
Likewise, you can take the structure from the right, with <syntaxhighlight lang="Haskell" inline>+|</syntaxhighlight>. So <syntaxhighlight lang="Haskell" inline>"2
Line 71: Line 71:
 
</pre>
 
</pre>
  
## All the operators
+
== All the operators ==
  
 
Note that <syntaxhighlight lang="Haskell" inline>+</syntaxhighlight> is actually an alias for <syntaxhighlight lang="Haskell" inline>|+|</syntaxhighlight>. So <syntaxhighlight lang="Haskell" inline>|+</syntaxhighlight> is to take the
 
Note that <syntaxhighlight lang="Haskell" inline>+</syntaxhighlight> is actually an alias for <syntaxhighlight lang="Haskell" inline>|+|</syntaxhighlight>. So <syntaxhighlight lang="Haskell" inline>|+</syntaxhighlight> is to take the
Line 78: Line 78:
 
structure:
 
structure:
  
Function     Both     Left Right  
+
{|
--------    --------- ----- ------
+
! Function
Add         <syntaxhighlight lang="Haskell" inline>|+|</syntaxhighlight>/</syntaxhighlight>+</syntaxhighlight> <syntaxhighlight lang="Haskell" inline>|+</syntaxhighlight> <syntaxhighlight lang="Haskell" inline>+|</syntaxhighlight>
+
! Both
Multiply    <syntaxhighlight lang="Haskell" inline>|*|</syntaxhighlight>/</syntaxhighlight>*</syntaxhighlight> <syntaxhighlight lang="Haskell" inline>|*</syntaxhighlight> <syntaxhighlight lang="Haskell" inline>*|</syntaxhighlight>
+
! Left
Subtract    <syntaxhighlight lang="Haskell" inline>|-|</syntaxhighlight>/</syntaxhighlight>-</syntaxhighlight> <syntaxhighlight lang="Haskell" inline>|-</syntaxhighlight> <syntaxhighlight lang="Haskell" inline>-|</syntaxhighlight>
+
! Right  
Divide       <syntaxhighlight lang="Haskell" inline>|/|</syntaxhighlight>/</syntaxhighlight>/</syntaxhighlight> <syntaxhighlight lang="Haskell" inline>|/</syntaxhighlight> <syntaxhighlight lang="Haskell" inline>/|</syntaxhighlight>
+
|-
Modulo       <syntaxhighlight lang="Haskell" inline>|%|</syntaxhighlight>     <syntaxhighlight lang="Haskell" inline>|%</syntaxhighlight> <syntaxhighlight lang="Haskell" inline>%|</syntaxhighlight>
+
|Add  
Left values <syntaxhighlight lang="Haskell" inline>|<|</syntaxhighlight>     <syntaxhighlight lang="Haskell" inline>|<</syntaxhighlight> <syntaxhighlight lang="Haskell" inline><|</syntaxhighlight>
+
| <syntaxhighlight lang="Haskell" inline>|+|</syntaxhighlight>/<syntaxhighlight lang="Haskell">+</syntaxhighlight>  
Right values <syntaxhighlight lang="Haskell" inline>|>|</syntaxhighlight>/</syntaxhighlight>#</syntaxhighlight>  <syntaxhighlight lang="Haskell" inline>|></syntaxhighlight> <syntaxhighlight lang="Haskell" inline>>|</syntaxhighlight>
+
| <syntaxhighlight lang="Haskell" inline>|+</syntaxhighlight>  
 +
| <syntaxhighlight lang="Haskell" inline>+|</syntaxhighlight>
 +
|-
 +
|Subtract
 +
| <syntaxhighlight lang="Haskell" inline>|-|</syntaxhighlight>/<syntaxhighlight lang="Haskell">-</syntaxhighlight>  
 +
| <syntaxhighlight lang="Haskell" inline>|-</syntaxhighlight>  
 +
| <syntaxhighlight lang="Haskell" inline>-|</syntaxhighlight>
 +
|-
 +
|Multiply
 +
| <syntaxhighlight lang="Haskell" inline>|*|</syntaxhighlight>/<syntaxhighlight lang="Haskell">*</syntaxhighlight>  
 +
| <syntaxhighlight lang="Haskell" inline>|*</syntaxhighlight>  
 +
| <syntaxhighlight lang="Haskell" inline>*|</syntaxhighlight>
 +
|-
 +
|Divide
 +
| <syntaxhighlight lang="Haskell" inline>|/|</syntaxhighlight>/<syntaxhighlight lang="Haskell">/</syntaxhighlight>  
 +
| <syntaxhighlight lang="Haskell" inline>|/</syntaxhighlight>  
 +
| <syntaxhighlight lang="Haskell" inline>/|</syntaxhighlight>
 +
|-
 +
|Modulo
 +
| <syntaxhighlight lang="Haskell" inline>|%|</syntaxhighlight>
 +
| <syntaxhighlight lang="Haskell" inline>|%</syntaxhighlight>  
 +
| <syntaxhighlight lang="Haskell" inline>%|</syntaxhighlight>
 +
|-
 +
|Left values
 +
| <syntaxhighlight lang="Haskell" inline>|&lt;|</syntaxhighlight>
 +
| <syntaxhighlight lang="Haskell" inline>|&lt;</syntaxhighlight>  
 +
| <syntaxhighlight lang="Haskell" inline>&lt;|</syntaxhighlight>
 +
|-
 +
|Right values
 +
| <syntaxhighlight lang="Haskell" inline>|&gt;|</syntaxhighlight>
 +
| <syntaxhighlight lang="Haskell" inline>|&gt;</syntaxhighlight>  
 +
| <syntaxhighlight lang="Haskell" inline>&gt;|</syntaxhighlight>
 +
|}
  
 
The last two are interesting, they let you only take values from one
 
The last two are interesting, they let you only take values from one

Revision as of 13:45, 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. 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:

"2 3" + "4 5 6"

The two patterns line up over time like this:

  |  2  |  3  |
+ | 4 | 5 | 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 2 and the 3. So the result is equivalent to "6 [7 8] 9":

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

You can see that the event with the value of 4 fits in the event with value of 2, so you get a new event equalling their sum 6. 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 4.

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. Again, the onset and duration of both events comes from the intersections.

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

Structure from the left

The old behaviour was to take the structure from the left. You can still do this, but in this case using |+`. For example: <syntaxhighlight lang="Haskell"> "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 |+|/
+
|+ +|
Subtract |-|/
-
|- -|
Multiply |*|/
*
|* *|
Divide |/|/
/
|/ /|
Modulo |%| |% %|
Left values |&lt;| |&lt; &lt;|
Right values |&gt;| |&gt; &gt;|

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 |
 = |  2  |  9  |

This is actually how # works in the current tidal.