Creating cross rhythms and tick divisions...

Hector MacInnes's icon

Hi all,

looking for some pointers if anyone has any...

I have been doing some work on a couple of ways of creating drum machines, but have hit a wall and just thought someone might have an example to share. The point of the specific machine I'm working on atm is that I can easily punch in different step divisions of the bar for each midi channel. So for example if I select 16 steps for the hats I get semiquavers, but I can select only 8 quavers for the kick, and then I can select e.g. 12 for the rimshots to get a nice cross-rhythm (NB the bar stays the same length for each channel).

I have been doing this by dividing different metros synced to a master transport, and then using tick divisions [!/ 1920] for each channel's step sequencer metro interval and quantize value.

This all fine until I want a kick in 4/4 and a cross rhythm clap in 7/8 because there's no integer number of ticks for 7/8 unless I change the timesig of the master transport which is not what I want. So as things stand if I select 7 or 9 steps for a channel then it drifts against the others. As far as I can tell max time syntax doesn't allow for this either as its all 4s and 3s.

I'm building a parallel version of this in which everything is clocked by a phasor~ which makes this possible, but it has its own set of problems...

So that's it really - I need concurrent 4/4, 12/8 and 7/8 (and whatever else) step seqs with bars marching in step to a tempo value that refers to a nominal 4/4 sig... must it by definition use a phasor~ in order to use the float timing values implied?

broc's icon

The drifting could be avoided with 2 metros: metro 1 runs at interval 1 bar synced to transport, metro 2 is re-started from metro 1 on each bar and runs at interval 1920/x ticks for x steps within the bar.

Gregory Taylor's icon

I'd do it in Gen.

Hector MacInnes's icon

Thanks both! @broc that's basically what I have at the moment, sorry I should have been clearer... but it drifts enough inside a bar that it is noticeable (and generates double-triggered notes on first beat of bar sometimes, if the number has rounded down, although I can see how I could fudge a workaround for that...).

I'll look into the possibilities of doing this in gen - have mostly been avoiding it so far, but if it's time, then it's time :)

Source Audio's icon

If you need just what you stated :
4/4, 12/8 and 7/8 (and whatever else) step seqs with bars marching in step to a tempo value that refers to a nominal 4/4 sig
For me that means - Live runs at steady tempo, without tempo automation, in 4/4
If you can accept syncing only at bar beginning ...

Max Patch
Copy patch and select New From Clipboard in Max.

you can easily calculate line ramp time from time signature and tempo

P.S. I updated initial posted patch

Hector MacInnes's icon

@sourceaudio - sorry I've been away, thanks so much for the reply, I'm taking a look at the patch now!

Source Audio's icon

I was a bit short on time when i posted that patch.
here is added line calculation from time sig & tempo

Max Patch
Copy patch and select New From Clipboard in Max.

Christopher Dobrian's icon

It sounds like maybe what you want is septuplets, not 7/8 time (which is just eighth notes, after all). For septuplets — e.g., a 7:8 (or 7:4) ratio — you can use a float for the number of ticks and Max will understand that. It'll take a good long time before you'd be even so much as a tick out of sync.

Max Patch
Copy patch and select New From Clipboard in Max.

Roman Thilenius's icon


i would calculate everything in float and do the midi ticks stuff only at the output.