ctcutler3669
How Mini-notation in Tidal Cycles approaches rhythm
I like making music. I'm interested in exploring ways we can synthesize sound, musically and in ways of writing music. One of my hobby projects for some months now has been to write software helps people write music as though it were code (or perhaps code as though it were music). That sounds a bit grand but it comes from a recognition that both code and written music tend to do is represent a series of actions that frequently have patterns and repetitions but also variations on those patterns. So if I'm looking for a way to compose/store/play music on my modular sythesizer, why don't I build a python library that enables me to write the music in python in a way that reveals the underlying musical structure of the piece (harmonic relationships, rhythmic patterns) in ways that traditional music notattion does not?
That's not what this writing is about, however. This is about another approach to roughly the same idea, although, with an emphasis on livecoding music such that musician is improvising in front of an audience with code. This software is called Tidal Cycles. This is intriguing. But what really turned my head about it is how it approaches the representation of rhythm.
My software (and I think this is fairly typical of music software in general) assumes that when you write down a sequence of notes and rests there is a assumed and fixed relationship between the written notes speed at which they will be played back. E.g. if I write 8 symbols like this: C3 D3 E3 F3 G3 A3 B3 C4
and specify a bpm of 120 and 2 symbols per beat it allocates a quarter second to each note (120 bpm is 2 beats per second or .5 seconds per beat and there are two symbols per beat giving us .25 seconds per symbol).
Tidal Cycles, and in particular its way of representing patterns (called mini-notation) takes a different approach. You just give it a "cycles per second" value and it assumes that each pattern you provide should play in exactly one cycle. The length of a 4/4 bar of music played at 120 bpm is 2 seconds so the cycles per second is the inverse of that: .5.
So if I write a pattern like this: C3
it will hold that C3 for the whole 2 second cycle. But if I put two notes in the pattern, C3 D3
then the two notes are both half notes, each taking up half the cycle. And if I write [C3 E3] D3
the brackets indicate that that element of the pattern should be subdivided between the their contents. So C3 and E3 are quarter notes, followed by a D3 half note.
There are probably better ways to explain this but the key insight for me is that musical rhythms I have encountered tend to work by this process of subdivision of a consistent whole so it makes sense that a representational scheme would work this way as well.