Levels of patterning

When I was looking into patterns in general, I came across the article “Performing with Patterns of Time” by Thor Magnusson and @yaxu long time ago to get started (published in the Oxford Handbook of Algorithmic Music). There is a subsection with “Levels of patterning”.
I found the concept of building levels of patterning very exciting and they are called sequences (1), symmetry (2), deviation (3), composition (4) and interference (5) in ascending order.
I just wonder if these levels are complete. Especially I wonder if conditional jumps and temporal transformations (stretching, compressing and time shifts) should play a role here (at least they are not addressed in the mentioned levels of patterning).


I’ve read this article too when I took interest in “patterning” and knowing what it means. Now that you talk about it, I never tried to really understand what these levels of patterning could be. Here are some thoughts that helped me make sense of this sub-section.

I think that most of these levels have something to do with the Tidal way of thinking about time. Tidal is giving time a special treatment, and makes possible to think and play with the reversal of time, elongation or compression of time, both on the sonic and event level. The more intriguing aspect of it is that there is a kind of arithmetic of time: you can add, substract, multiply and divide “slices of time” and the events that are embedded in them. These parts can be moved and shifted, making it even more abstract and mind-boggling.

This is a departure from the traditional way of thinking about transformations and mutations of a musical structure in both classical and electronic music. The transformational techniques of counterpoint never really implied that playing with patterns was, on a deeper level, a way to play with the passage of time. Tidal is the first “musical notation” I’ve seen that makes possible to play with time itself, or with our perception of time.

A lot of “transformational” theories are taking the assumption that patterns are sequences of atomic events, generally having four characteristics (pitch, length, timbre, expression). Transforming a sequence means reorganizing each atomic event in a linear-sequence fashion. However, Tidal is expressing things in a different manner, with each parameter / information being its own slice of time that is combined, in the end, in a pattern that gets expressed in the real world.

All that to say that the way I understand this passage is: Tidal is weaving functions of time with an arithmetic of time. It is also both possible to change a sequence at a precise point in time or change the sequence as a whole. Most of the time, you do not really change the events themselves as they are being written, but their position in time.

I’m not really sure that I understood it right. I would love to know what @yaxu thinks about that as it may change how I understand it all.


It was a while since we wrote that! Here’s the paper: https://zenodo.org/record/1193251#.YAXDrFP7Q-U

I haven’t looked at it for a while but I remember thinking at the time that it didn’t get as deep into patterns as I’d have liked.

I’d forgotten about considering ‘composition’ and ‘interference’ are such different categories, I guess they’re closely related? The Laurie Spiegel paper which we read offers a different way of categorising things.

Conditional jumps and a lot of transformations could be considered in terms of symmetry, e.g. reflection, rotation and so on. Maybe not all the transformations can though. When it comes to thinking about the individual transformations in something like tidal, they don’t necessarily conform to these levels, usually there’s multiple things going on at once, so I haven’t found these 'level’s have much descriptive power… But maybe that is indeed because the levels aren’t well developed.


Yes that sounds reasonable! I’ve not had a formal education in music so don’t know about traditional musics but feel probably Tidal’s approach is closer to Indian classical music traditions. I was very inspired by reading the papers around the bol processor which has origins as tabla notation. I was also inspired by work in functional programming especially work on what is now called euterpea by Paul Hudak and Donya Quick, allowing time to be manipulated independently from values as you say. Normally in computer music patterns are represented as sequences rather than functions of time, and that has a huge impact on how it is used. This is definitely a trade-off though…

There’s a lot of noise around this piece by Mark Fell and Rian Treanor but I find myself agreeing with it. I’ve never learned staff notation properly and it does afford a certain linear way to work with time.

1 Like

I’m curious. I’m not quite sure to understand the nature of the trade-off you are thinking about. Could you tell more about it?

I mean a trade-off between different approaches to representing pattern. More ‘traditional’ approaches would be to represent patterned events in lists, for example where each event has some kind of timestamp, or where each element in a list represents a discrete step. Tidal represents a pattern as a function, from continuous (rational) time to events. In particular the function takes a time range as input, and returns the events that are active during that time, each which has it’s own timespan. Manipulating a pattern is then a case of making a new function that internally calls the existing one, but manipulates time on the way in or out of the existing function, or manipulates values on the way out.

This offers big advantages over the list processing approach, in that you can manipulate time and events freely, without calculating anything until it comes to scheduling events. It has big disadvantages too - list processing is all about stateful transisitions, and Tidal patterns have no state at all, so for example you can’t directly implement markov chains. I’m thinking of ways around this though.