Sunday 3 December 2017

Complex timing generator for Max For Live and Ableton Live

The first presentation at Loop 2017 was Andrey Smirnov's wonderful talk and demo of Leon Theremin's 'Rhythmicon', ending with a superb live performance piece. It was an inspiring opener to a wonderful event, and it got me thinking...

Probably GENerator

If you've been following my 'Probably' series of MaxForLive devices, then you may have noticed that they have gradually been influenced more and more by modular synthesisers. ProbablyLFO could easily have some radical graphics, a name suggesting 'West Coast' influences, and be a hardware module in a rack, except that it is only in software in Ableton Live at the moment. Producing hardware is a time-consuming process, and I'm still considering what my next device will be...

But, as we have just passed through one annual winter 'holiday' event, and with another looming, this seemed like a good time to release yet another unusual giveaway, and with the 'Rhythmicon' still tucked away at the back of my mind, I wondered what I could do that was exploratory rather than just a dull copy... And, trust me, some of my previous M4L giveaways at this time of year have been useful, but just a little bland. 

The result is ProbablyGEN, (GEN is short for Generator, not Max's 'gen'!), and it is a three channel (after dFreez_mr, I've temporarily given up on trying to squeeze four channels in!) asynchronous / synchronous note generator. Each channel has a choice of free-running (async) or synchronous (divided from Live's transport), a probabilistic 'velocity' grid (with a special variation on the previous user interface specially for this type of application), length control per grid, direction controls (forwards, backwards, scanner), and completely straight-forward (gasp!) MIDI Note output selection. So you get three note polyphony (or use the 'Chord' MIDI plug-in) which is ideal for simple drum sounds, or simple three-part monophonic music.

The screenshot above shows three synchronised channels, all running at 1:1 (i.e., the same as Live's transport), and all playing 16 column grids (more on this in a moment). The far right hand side shows the MIDI Notes which are being generated, which is a giveaway for what this is doing: 36 is Kick, 38 is Snare, and 42 is Closed Hi-Hat. I did consider calling this ProbablyD, or ProbablyDrum, but then I realised that you could use it for other purposes than just drums, and so I went for the generic name of 'GENerator'.

The 'Columns' setting and the direction buttons on the right might need some explanation. Why is the middle channel 'Columns' control set to 17 instead of 16? Actually, this is a consequence of it running back and forth in a 'scanner' type pattern - the little '+' is there to remind you that when you choose the 'scanner' direction then you need to increment the 'Columns' control by 1 (or not, as you prefer!). So, actually, all of these channels have 16 columns in the active part of the grid - but there's more later on this... 

With these settings, from the lowest channel upwards: the bass drum is playing four 'on the beat' hits, with the final column (or the 16) exploiting the new UI twist that I have added: the upper white cell is indeed a '66' velocity. but the lower white cell is a '0' velocity on the black row, which doesn't mean 'zero velocity' (that would be a Note Off...), but means 'don't play this note. Now because the probability grid takes multiple instances of white cells in a vertical column as providing choices for that event, this means that there are two things that can happen here: a kick drum played at a velocity of 66, or no kick drum, and with each having the same probability - so the kick drum will play about half of the time. When you listen to this, then you hear that 'the drummer' keeps putting in extra little appoggiatura ('pick-ups') at random, just before the main beat at the start of the bar. So here we have a software emulation of an impatient foot...

The middle 'snare' channel is scanning back and forth, and so we get a single snare (at 33,66 or 99 velocity) or a cluster of 2 or 3 snares on alternate repeats. Again, the 'zero' bar is used to make that middle snare in the cluster happen about half of the time.

The 'hi-hat' channel has 'on the beat' hits, with off-beats at half probability using the 'zero' row again, and a cluster of 'sometimes' at the end of the bar, followed by an end of bar tick that always happens.

A rhythm less ordinary... 

The screenshot above shows a slightly more unusual setup. This time, the bass is as before, whilst the snare is playing slower, at 0.889:1 to Live's transport, and the active part of the grid is only 15 columns long (wide?). The hi-hat is now faster, at 1.333:1, and there are 22 columns in the active part of the grid. In this example, I have deliberately chosen the values of Divide and Column so that the lengths are the same duration in time, but this does reveal an interesting side-effect. It is quite difficult to change the Divide control and the Columns control at the same time, and so you will find that the timing gets out of alignment, as you can see by the three vertical cursor lines not being aligned in a vertical line. There are two ways to fix this: stop Live's transport and restart it; or hit the 'In' button in the top left hand corner, just underneath the 'start' light circle. This forces a reset of the internal counters, but doesn't sync it back to the bar or beat of Live's transport, which can be a useful effect. Either way, you get to control the channel timing alignment as you want.

The hi-hat is also busier in this last few columns, with 25% and 33% probabilities from the page of the 'zero' row. But you've probably not got the time to concentrate too much on this, with all of the timing complexity that this setup gives. Each of the channels is outputting notes in its own synced time, but the timing isn't the 'four-to-the-floor' many ears are used to hearing. Nope, this could perhaps be interpreted as being simultaneously an emulation in software of the best AND/OR the worst software drummer in the world...

This is only scratching the surface of the timing options that ProbablyGEN gives you - the 'Divide' range is deliberately set wide, so you can go fast and very slow (try increasing Live's tempo too!). And if you use the 'Free' button, then the tempo of that channel is completely independent of Live's transport, and so is totally asynchronous. For hi-hats, this can sound pretty cool! (This is also where tempo-aligned echo can be useful to explore...) But hey, that's enough presents given away in one blog article!


If you replace a drum kit with a synthesiser, then ProbablyGEN becomes a three channel monophonic step sequencer with potentially independent timing of the three channels (or any degree of sync that you want). As I said earlier, this is the sort of thing that many people associate with modular synthesiser racks, and not a laptop running Ableton Live.

By using the 'Chord' MIDI effect plug-in, then one, two or all of these notes can be expanded into chords. Depending on how you set this up, it can be described with words like 'jazzy', or 'obtuse'... (and if you've ever listened to the 'ChromatixT' demos on SoundCloud, then...)

As usual, ProbablyGEN is available for free from Enjoy doing interesting things away from 4:4 timing as we move into 2018!

Unexpected surprises!

ProbablyGEN outputs all three notes when you first instantiate it in a track, so beware!

Did someone mention a Parappa the Rapper reference?
5 Minutes of Parappa the Rapper Remastered Gameplay - YouTube 2mins 10 seconds


Update: version 0.04: Asynchronous timing generator for Max For Live in ...

Update: version 0.05: Constraint-driven modification grids in asynchronous drum timing generator

Buy me a coffeeBuy me a coffee

No comments:

Post a Comment