Creating cross rhythms and tick divisions...
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?
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.
I'd do it in Gen.
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 :)
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 ...
you can easily calculate line ramp time from time signature and tempo
P.S. I updated initial posted patch
@sourceaudio - sorry I've been away, thanks so much for the reply, I'm taking a look at the patch now!
I was a bit short on time when i posted that patch.
here is added line calculation from time sig & tempo
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.
i would calculate everything in float and do the midi ticks stuff only at the output.