Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/main'
Browse files Browse the repository at this point in the history
  • Loading branch information
rlafuente committed May 26, 2024
2 parents 771db40 + 4249e4a commit f6ce104
Show file tree
Hide file tree
Showing 14,785 changed files with 654 additions and 760,005 deletions.
The diff you're trying to view is too large. We only load the first 3000 changed files.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,6 @@ This command generates static content into the `build` directory and can be serv

There is a github action which automatically deploys changes to the main branch.

## Archives

This site was migrated from the legacy wiki-based user documentation site. Access to these archives is available on the [wiki-export branch](https://github.com/tidalcycles/Tidal-doc/tree/wiki-export)
8 changes: 0 additions & 8 deletions blog/2019-05-30-welcome.md

This file was deleted.

46 changes: 17 additions & 29 deletions blog/about.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,29 @@
---
title: Tidal Blog Info
date: 2023-01-01
date: 2023-10-01
---

## Purpose
The Tidal Cycles blog is intended to be **by -- for -- about** the Tidal community.
Anyone engaged with Tidal Cycles is encouraged to submit a blog post. Topics can be about Tidal practices, music made with Tidal, live coding, event coverage, new developments & releases, community, etc. Topics can also be broader -- anything that would be of interest to this community, and it doesn't have to be limited to just about Tidal!
Anyone engaged with Tidal Cycles is encouraged to submit a blog post. Topics can be about Tidal practices, music made with Tidal, live coding, event coverage, new developments & releases, community, etc. Topics can also be broader -- anything that would be of interest to this community, and it doesn't have to be limited to Tidal!

## Templates
To make participation and submitting posts easier, there are a set if templates. These produce a set of patterned blog posts. Each template includes a suggested set of content sections, but consider this just a starting point. The most important thing is to provide content that reflects your unique perspective.
To make submitting posts easier, there are a set if templates. Each template includes a suggested set of content sections, but consider this just a starting point. The most important thing is to provide content that reflects your unique perspective.

Templates are maintained in GitHub in the [tidalcycles/tidal-doc](https://github.com/tidalcycles/tidal-doc/) repo / templates branch.

- [Tidal Blog Profile](https://github.com/tidalcycles/tidal-doc/blob/templates/templates/blog_tidal_profile.md) Intended to highlight your livecoding practices, music, and use of tidal. Contains a set of questions to respond to.a

- [Tidal music](https://github.com/tidalcycles/tidal-doc/blob/templates/templates/blog_tidal_music.md) Use this to describe a music project such as a new album or music release, a review of a music project, Algorave or concert, or discussion of music made with Tidal or other live coding program.a
- [Tidal Blog Profile](https://github.com/tidalcycles/tidal-doc/blob/templates/templates/blog_tidal_profile.md) Intended to highlight your livecoding practices, music, and use of tidal. It contains a set of questions to respond to.

- [Blog Topic](https://github.com/tidalcycles/tidal-doc/blob/templates/templates/blog_topic.md) Open topic. Use this for a more free-form approach. One option is to present your own approach to Tidal and live coding (see [Working with Samples the Heavy Lifting way](https://tidalcycles.org/blog/tidal_profile_heavylifting)). Other topics could be discussion of a new release and the coding behind it, or discussion of other environments like Strudel, Vortex, Sardine, etc.
- [Tidal music](https://github.com/tidalcycles/tidal-doc/blob/templates/templates/blog_tidal_music.md) Use this to describe a music project such as a new album or music release, a review of a music project, Algorave or concert, or discussion of music made with Tidal or other live coding program. Examples:
- [Xuixo EP by Relyt R](https://tidalcycles.org/blog/blog_topic_relyt_r_xuixo)
- [QBRNTHSS - making a live coding album](https://tidalcycles.org/blog/blog_topic_qbrnthss)

- [Playlist](https://github.com/tidalcycles/tidal-doc/blob/templates/templates/blog_playlist.md) Use this to create a new playlist. See the [Tidal Eclectic Playlist](https://tidalcycles.org/blog/tidal_playlist-eclectic) for an example.
- [Blog Topic](https://github.com/tidalcycles/tidal-doc/blob/templates/templates/blog_topic.md) Open topic. Use this for a more free-form approach. One option is to present your own approach to Tidal and live coding. Other topics could be discussion of a new release and the coding behind it, or discussion of other environments like Strudel. Examples:
- [Working with Samples the Heavy Lifting way](https://tidalcycles.org/blog/tidal_profile_heavylifting)
- [How Link became Tidal's scheduler](https://tidalcycles.org/blog/link_as_scheduler)
- [Visualization with Didactic Pattern Visualizer](https://tidalcycles.org/blog/blog_topic_visualizer)

- [Playlist](https://github.com/tidalcycles/tidal-doc/blob/templates/templates/blog_playlist.md) Use this to create a new playlist. See the [Tidal Eclectic Playlist](https://tidalcycles.org/blog/tidal_playlist-eclectic).

We encourage posts to include:
- code sections with Tidal examples
Expand Down Expand Up @@ -57,37 +62,20 @@ When using admonitions - be sure to add empty lines before and after your text l

<details>
<summary>Toggle to see more</summary>
<div>
<div>This is the detail revealed. This is useful for a long code block, allowing users flexibility in how they read through your post. </div>
<br/>
</div>
</details>

<details>
<summary>Toggle for code block</summary>
<div>
<div>
```
h1 $ s "sound"
h2
h3
```
</div>
<br/>
</div>
</details>
Another "details" segment, with code:

<details>
<summary>Toggle for code block - (no div)</summary>
```

```haskell
h1 $ s "sound"
h2
h3
```

</details>

:::info
Expand Down
189 changes: 189 additions & 0 deletions blog/blog_topic_mandalas.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,189 @@
---
title: Mandalas and Tidal Cycles
date: 2023-10-29
---

| Tidal Cyclist | Saachi Kaup |
|--------------:|:---------------------------------------------------------|
| aka | SaachiKaup |
| Comments | [Club Tidal Forum Thread](https://club.tidalcycles.org/) |

This year, I made a project involving Tidal Cycles and Mandalas for [Summer of Haskell](https://summer.haskell.org/). As you may well know by now, TidalCycles (or Tidal for short) is a software for making patterns with code. It is used to create patterns of many kinds, from music and visualisations to dance moves for robots. Tidal uses a paradigm called Functional Reactive Programming ([FRP](https://wiki.haskell.org/Functional_Reactive_Programming)) under the hood. This is useful for acts involving continuous time, including composing [music](https://www.cs.yale.edu/homes/hudak/Papers/HSoM.pdf) and [animations](http://conal.net/papers/icfp97/icfp97.pdf).

## Mandalas

[Mandalas](https://en.wikipedia.org/wiki/Mandala) are geometric designs, created with circles and repeated simple shapes. Weaved squares, concentric circles, intricate triangles and squiggly lines form the piece. They are common in south east asian art, showing up in temples and sand paintings alike. Today they are widely used, to the extent that you find them on shirts and household items.

All the Tidal visualizations I saw were linear. Notes playing forward with time. But mandala art remains _in the same place_. The shapes morph in place, accompanying the rhythms and cycles of the music. The periodic nature of music should reflect in its visuals as well. Thus came the project idea:

> Map the underlying structures of Tidal to mandala patterns.

## Background
From all that I found out about mandalas, they are general patterns. They are not really particular to India or any other country. Native American art has some mandalas, so does Tibetan sand art.

![](images/mandalas/sand.png)

_Tibetan monks take days to painstakingly make these sand paintings. After a while, they let the tides wash over them_

Not unlike [euclidean rhythms](https://cgm.cs.mcgill.ca/~godfried/publications/banff.pdf), the underlying structures make the art universal. However, their mathematical symmetry, though obvious, remains undefinable. Mandala art in computers is formed usually through an exploratory process, going back as far as we have generated graphics. Speaking of computers generating graphics:

### Fractals

Some mandalas are fractal. It's an aspect of their underlying
mathematics. Arthur C Clarke noted an odd coincidence when he wrote
about mandalas -

> "\[..\] but indeed the Mandelbrot set does seem to contain an enormous
> number of mandalas."
![](images/mandalas/11695295665168.png)


_Mandalas and Fractals: Visual similarity is obvious._

### Languages

Languages like [Processing](https://processing.org/) or libraries such as
[p5.js](https://p5js.org/) can produce mandala graphics.\
So why Haskell?
No doubt, the heavy workload should be handled by languages more suited
to the task. Even Haskell animation libraries are built as thin wrappers
on top of the C animation library [OpenGL](https://www.opengl.org/).

But [Haskell](https://tidalcycles.org/docs/innards/haskell/) is particularly well suited to representing these abstract
patterns. Mapping its type system with simple shapes could lead to
varying results. How could it be used to map Mandalas onto the existing
structures of Tidal Cycles?

## Turtle Graphics
Turtle Graphics are a simple graphics system. Typical commands include
move forwards, move left, right and so on. Some of you might be familiar
with it from Python\'s Turtle graphics library. For the old school ones,
Microsoft\'s Visual Logo might ring a bell.

![](images/mandalas/71695295665170.png)

_MSWLogo Interface_

Alex and I thought a simple turtle notation might be a good place
to start. I explored animation libraries like Gloss, Reanimate and
WorldTurtle. [WorldTurtle](https://hackage.haskell.org/package/worldturtle-0.3.1.0/docs/Graphics-WorldTurtle.html#t:TurtleCommand) seemed most suited to the task.

We integrated a basic Turtle Notation within Tidal\'s parser.
Understanding the basics of [monadic parsers](https://www.cmi.ac.in/~spsuresh/teaching/prgh15/papers/monadic-parsing.pdf) proved useful.
The system needed to be portable to other libraries, so we created an
intermediate notation. Thus began the patterns.

### Basic Patterns

```
“f”: pattern, moves forward with time
```
![](images/mandalas/image-21696056162615.png)


```
“f r”: Moves forward in the first half of the cycle, and then moves by 90 degrees in the second.
```

![](images/mandalas/resized.png)

### Mini-notation Magic

Tidal's [Mini-notation](https://tidalcycles.org/docs/reference/mini_notation/) is used for writing patterns of various sorts
(notes, samples, parameters).

Internally, the mini-notation is parsed as a *shortcut* for a function.
You could otherwise write it using longer *function compositions*.

```
“f <l r>”: Alternatively moves left and right in each cycle's second half.
```
![](images/mandalas/31695295665169.png)


```
“f [f f l]”: Starts forming Mandala like patterns.
```

![](images/mandalas/image-61696055979382.png)

But there was a problem.

The system is not real time. WorldTurtle's API does not give low level
access to the time at which the pattern is produced. This leads to
graphics that are only theoretically in sync with music. [Gloss](https://hackage.haskell.org/package/gloss-1.13.2.2/docs/), on top
of which WorldTurtle is built, does provide access to time.

There was also the problem of changing patterns in real time. But, by
storing patterns in mutable, shared variables, we could handle this with
threads. This is a work in progress.

Meanwhile, Some more patterns:

### Ninja Star
```
"f l l [f r r f l l f r r] f l l": Mini-notation magic at hand, again.
```

![](images/mandalas/01695295665169.png)

### Honeycomb

```
"f <l r> f <r l r>"
```

![](images/mandalas/71695295665166.png)

### Demonic

```
append (slowSqueeze "1 3 1" ("[l f, f r]")
```

![](images/mandalas/41695295665168.png)

### ChaosMap

```
slow “1 1 2 3 5 8” “f l l”: Everything is patternable.
```
At it's base, `“f l l”` on its own produces a simple triangle.

This pattern will slow down each cycle by the first pattern. Slow the first
and second parts of the cycle by 1, third part by 2 and so on.

![](images/mandalas/21695295665169.png)

_A friend who likes physics said it looks like Brownian motion._

You can find more patterns
[here](https://accidental-microwave-56b.notion.site/Documenting-Patterns-3bd08d813de34185ae517f35adc6909f?pvs=4 "null")


## ANIMATION AND TIME

A [talk](https://www.youtube.com/watch?v=rfmkzp76M4M) by Conal Elliot on [Functional Reactive
Animation](http://conal.net/papers/icfp97/icfp97.pdf) specifies what graphics systems do. They
abstract the pixels away. Keep continuous space to work at a higher
level. This allows for better composition too. You can scale and morph
images without too much difficulty. The task is to use the same methods
for time.

Regardless, some things I have learnt in this time: The rich variety of
[mandala art](https://accidental-microwave-56b.notion.site/Mandalas-Shared-Refs-bf817a8230ca4cfbaa97b95793f5c083) in many continents; \
[L-systems](http://algorithmicbotany.org/papers/abop/abop.pdf)
that produce tree-like structures using grammars and \
Music theory: tones, scales, chord progressions and their mathematical underpinnings.

## What Next?
There is the intuition we have that fields of knowledge are interlinked.
That these patterns are present in many areas. But you can't work on
intuition alone. So how do you confirm it?

Well, you can see it. As you watch the pattern form chaotic shapes on a screen, the connection is confirmed. These patterns still have a long way to go. An [FFI](https://ghc.gitlab.haskell.org/ghc/doc/users_guide/javascript.html) could allow JavaScript libraries to produce the animations instead. The new version of Tidal could lead to a new world of possibilities.

However, the current system does show the structure of Tidal. The ChaosMap pattern, after going haywire in all directions, comes back to its original point. Seemingly random, until the very end when the pattern is visible. It showcases the underlying mathematical beauty at work. This was the central goal to accomplish.
4 changes: 2 additions & 2 deletions blog/blog_topic_visualizer.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ date: 2023-07-01
| ---------------------: | :-------------- |
| Source code | [GitHub](https://github.com/ivan-abreu/didacticpatternvisualizer/tree/main) |
| Visualizing Application | [Processing](https://processing.org/) |
| Blog post | hh |
| Blog post | HighHarmonics |

## Introduction
Didactic Pattern Visualizer (DPV) is an easy way to visualize sound patterns from Tidal Cycles. It was created by the artist and creative technologist Iván Abreu "...to study the potential and complexity of the syntax of the pattern system for sequencing Tidal Cycles sounds." It utilizes the open source visualization program *[Processing](https://processing.org/)* to provide a scrolling grid where colored shapes appear in rhythm reflecting the flow of Tidal events (notes). The GitHub materials also includes Tidal Cycles examples using DPV by the musician and digital Artist [CNDSD](http://www.malitzincortes.net/).
Expand Down Expand Up @@ -128,4 +128,4 @@ So that's it!

Check out Iván's [Didactic Pattern Visualizer](https://github.com/ivan-abreu/didacticpatternvisualizer/tree/main)

hh
HighHarmonics
Binary file added blog/images/mandalas/01695295665169.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added blog/images/mandalas/11695295665168.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added blog/images/mandalas/21695295665169.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added blog/images/mandalas/31695295665169.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added blog/images/mandalas/41695295665168.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added blog/images/mandalas/71695295665166.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added blog/images/mandalas/71695295665170.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added blog/images/mandalas/image-21696056162615.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added blog/images/mandalas/image-61696055979382.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added blog/images/mandalas/resized.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added blog/images/mandalas/sand.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit f6ce104

Please sign in to comment.