I’ve been rewriting Tidal again for a while but resisting actually using it, mostly out of a weird sense of delayed gratification.. Ideas expressed as code can get fixed once they become instrumentalised in a end-user interface..
But I’m finally starting to get a feel for Tidal 2.0. It’ll have two sides to it, the existing cycle-oriented pattern transformations, and a new realm of beat-oriented transformations. I wasn’t sure how both could be contained in the same interface, but just by renaming a function from toCycle
to beatMode
, I can start to get a feel for it. Here’s a tech test (not intended to sound nice!):
In ‘beat mode’, most things will look the same, but act differently. E.g. when you reverse a pattern in beatmode, the whole sequence gets reversed, rather than every cycle reversed independently. Even the mini-notation works, but becomes beat-oriented.
There’s a lot of reworking that’s gone into this. There’s now a Signal type which is like the old Pattern type, as well as a new Sequence type. Both Signals and Sequences are instances of a new Pattern typeclass. The nice thing is that the Signal and Sequences definitions are becoming mostly concerned with how to align and combine things of their type, most of the pattern operations can then be defined in terms of the more abstract Pattern typeclass.
This is only just starting to work, and already it’s fun to play with beatMode with its very strong polymetric affordance. It reminds me of early days of Tidal, when it was only beat-oriented. I love polymeter, and although the mininotation has always made it fairly easy to play with, it feels good to be able to do that outside of the mininotation without having to calculate ratios by hand.
Really though the payoffs for all this work are still to come. Coming up with a nice code interface for doing Carnatic-style addition/subtraction/manipulation of beats fluidly, following Aravind’s work. Also exciting are the possibilities of formalising alignment of sequences before combining them – I’ve been feeling my way around alignment of patterns for a while, including some prototyping in Strudel, and the possibilities feel limitless at the moment..
Of course beat representation is normally the very first thing you would implement in a music tech, using lists/2d arrays etc. It’s fun though to push against the usual grid-based approach, which tends towards score-like representations that are very much geared towards recording/transcribing, and not manipulating or indeed live coding with.. I continue to feel that staff notation, piano roll and all those DAW music interfaces that have flowed from them have really limited music, wherever they dominate. Lets see how it goes.
Hi Alex,
Thank you for this blog post! I am a producer and composer, and was introduced with TidalCycles last October. Intuitively, I instantly sensed a resonance with Carnatic thinking (I’ve studied composing and performing with South Indian rhythmical structures for 5 years), and was so happily surprised to then find Aravind’s article in the forum. To read here that you’ve continued exploring the possible relationship between TC and Carnatic music is so exciting.
If useful, I’d be happy to share any knowledge I’ve gained on Carnatic music. I’ve studied with Rafael Reina, who invested lots of time in making Carnatic music accessible for music makers with a Western understanding of music. As a result, I’ve become able to explain a lot of Carnatic rhythms in formulaic form. I agree that it would be very interesting to find ways to make those useable in live coding.
If this is interesting to you, please let me know.
Hi Brechtje, thanks for the note! I’m still struggling with this and would be very happy to learn more and hear about your Carnatic formulae. I’ll drop you an email.