Difference between revisions of "Combining pattern structure"
Line 1: | Line 1: | ||
'''This does not describe current behaviour - this is upcoming in version 1.0.0.''' | '''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: | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | For example, these are two patterns being combined by adding together their elements: | ||
<syntaxhighlight lang = "Haskell"> | <syntaxhighlight lang = "Haskell"> | ||
Line 13: | Line 7: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | The two patterns line up over time like this: | |
<pre> | <pre> | ||
Line 20: | Line 14: | ||
</pre> | </pre> | ||
− | + | 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>: | |
<pre> | <pre> |
Revision as of 13:31, 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:
``` "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 `|+|`/`+` `|+` `+|` Multiply `|*|`/`*` `|*` `*|` Subtract `|-|`/`-` `|-` `-|` Divide `|/|`/`/` `|/` `/|` 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 |
= | 2 | 9 |
```
This is actually how `#` works in the current tidal.