I am working on a Poly-Rhythm generator and need to be able to have running cycle of ever changing onsets. For example, one of my series of poly-ryhthm’s base is 5. I want to cycle through that series with an onset on the 4th note. I then want the next onset to start 3 notes later, then the next 2 notes later. I want to be able to set this up for large scale running patterns. Just not sure how to do the calculations.
Hi, I’m having a bit of trouble with the terminology, but do you mean that you’ll be running a cycle that is:
0 0 0 X 0
And then another one that is:
0 0 X 0 0 ?
"then the next 2 notes later"… do you mean that you want to alternate between these patterns?
That is it but I want to nest them inside different groupings of say 5, 4, and 3.
I need to be able to generate and nest multiple patterns such as these:
5 tuplet = X O O O O - O X O O O - O O X O O - O O O X O etc.
4 tuplet = X O O O – O X O O – O O X O etc.
3 tuplet = X O O – O X O – O O X etc.
I would choose from a "reservoir" of patterns and apply this principle across a wide spectrum of durational/rhythmic patterns.
All your examples seem to conform to the formula: choose a division d, and articulate every a attack points of that division. Off the top of my head I’d probably use a metro synched to the transport to specify the divisions (or the tempo object, if you prefer), and then use a counter (or a % object with the output of tempo) to specify the articulation points. If that’s not clear enough, let me know and I’ll cook up an example.
Chris Dobrian could do better but I just built this starter kit using some of the objects he mentioned
----------begin_max5_patcher---------- 1281.3oc0Zs0jaaBE9Yu+JXzj9liWAnq8kll2adqO0oSFrMVqRsAO.JYayj+ 6kKx6hS7EgsV7lY20RfQnCemON7cf8q2MIYN+QpLA7qf+BLYxWuaxDaUlJlz WdRxFxiKVSj1lkrfuYCkoRl59NE8Qks9OvU.YmfBTOzJA5e+xCDEPwAK4.lo Q8Ov5VFcAuiYeJTeky6lOeM0TCrulsBpT+ZHpVN6iB5BkyFwkvYoSA3hLykz 9O.+c+Sw51v6TqoJqsl1W6JQyba4Y6pYKQs3gVVieOWUOqL2z0oyzWfU41WT 498dKaWmuyPWwYJY6+4LdzSug1kVTgO+SuMqNwqsLxFaaS9cQKYch4K91c2Y 9X5.8.L5Wzc6O3.jz0.XxAABzwG1PXsYbhxJc3psP5wFz65HWeq92sTWujLm vZRlBRRd54F.tTMt3xwXlqIhFpTAZD7tsFFora9x1O2tj9aIgx+PvzYHCKIs ZrIfnTK3ig1Nsm+gxFA9WYT3e+B.eX1G7Di4hJyjsrTjcniLEt.1WqIZR.DO bj.jrfADXoc5XrADTT.DEn08yggkriCK0N3nvEqpBaiTebbAdJbY5gtDBXAi D6IOX1iClhL4AO1Ku0sYNUj7znTn6QEU7QJizGiNM3E4JR8Bslmd5E4NG6wt VWH.zHuN2FpTRZn+.iAFdzF2h+83hiv.qBlvDDXTDkYOVElTA.BJtzfMYXyk R7oIK4mgrr6uPmTkEGsQumHj2+dJQIu+OYsJIXAgAlSAbFEH4chETvJt.zPY TgVKDqYm3IoVWjbbzziz.tQSErtbz0Tsqq0h6Mp1xRGKQ8XbbbP6v5iqT8Jf mLHzBO8p+c4VMFRNwirfhNM1zMjkDZUzM8oyl.YKMy7lZ9.x7tU8z8HulfXd 29bSx7ZRFy61maRkWSpXd29bSfE9FSAy+du.C66KwmHa0bnSCjyykWO6pDDE Zpa4wQCj1KK3f2oDDlbKWn.evjG26HcJtTQzkgdETsanfzKTyDxo6FUWeMI. GR.9z3D+fytmuZUnQObsSpSQ1mGNrXJtzWc4GWTNVQTPirJSEuoYMMbUlmRM UZo2PGcMpLe5Q7QfxwjW7GDoQejcPCHrk.cfys7.WP+Z1tsdMmEVMm4i15xn 7aU1HGScC1spZJd.haNQNLHrcCgf0U2hbXP3WYvZ+9iAcArubXEVgukvJ50e ty3aJ.Au8BIy50pU0eEVDtdMjKaxLKoMu35.wPUqA+IXGZp8wmHSxfUQQM6V x+D9Fj61glxxqZG8BBLJhytUYjqKaa.uABdC5RwkdsVUH2Ql7hBL0+rDpNq3 VLIJORzFiLUMoI785zANtYREvHPXhyoLsexwGFVpO+x641IRPT4El+69Goxp 0bxQt4PsJn3SCCUs8nMOlu6+tAKFXpeen1sYm8ClcGyC3YTXoFbaYVUndMxb 1GdM5g1kKoL+4tKakloyVyO8fN8frG3YrGyA4ES6AcN6AGM6wri4m0e8cN0W T7oZH7mhnYOnxgfOUwyeULD7IaOR1Kp8TMT6IKN1S5Psm33uxGR7GqQCe8vm i2z8gDMDgip4bNmEBEUy4b9JT7bV0utnNCIRX7DZX1sfyxcr1bblnCGRfYX7 VHMeHwki2xnufTYmFZx1selJj8co0PzIl7ItvTrXpsXKyUzl+Uhf1el06RXH gHz4cnzIczIb50erHSqVW+d91c+exMAju -----------end_max5_patcher-----------
Here’s what I meant.
----------begin_max5_patcher---------- 1116.3oc0YssaaiCD8Y6uBBg9n2.wa5RdJ62whhBZaVG0JQoUh1MsE8eeIot DkD2HJYRUr.IhlzTjm4nYNyPqetcSv9xm3MAf6A+CXyletcyFyP5A1z0eSPA 6oC4rFyzBNTVTvExfcsemj+jzLNEvpkYGNmyjYkhFPSE6.+HfegKx+Nn7BuF DA1yYxl9aMOSvOTdVXteT2fet9zdc+v6B6FQbtHSjyklsG1OsRgTvJ3ls9uq yX48qZUMuQgOCJ9TM+fr03HQT0JBPTntIr6B3iOuIkmk86R+VWwjGdLSb5Eq C4NDUsPjD8Z.QlFLdzZowVS1OLXChFririFvVt+K+ELJPO1u1tUeY2Mx7joY d5Zv7VygXjg+uMJjtDJTv+l5leCC1vyAgAWypQyzpQ+dqlZLD.LNxXtlqnw9 fsKi76U71aHXOSbJXGHHXN7Bzg7hwGQ49DBnWkcnyjcHSyNTSSLdZ1ISGJnH mt+0cmAOQbHMUvk0kfGxzb0EVNHMBnhG+ZC3g+8LSHU3XXHm3jAmlF6ivHV5 kMClC4PlSTJ4J.AfWO5C6NMmtvNTjgQhheCuLsgiicops7wrFf5O58QAqtBL IM7NcRLTKa.WBaD4C1fbOc8YCLN9t3ajNPI9fNjOxMYt+CvIFcjNFIIYILRj KkXYekqEKzJaJrIbhbAZZ4hVZ.BoSqi947RlIiT6GlCSsnjQE7lF1I9anp33 UJICJzjjQQQpXGXx6wMyhMvNkMh7MafodkMfNkMndmM7IY.SWBYnhGUve37g rZkEppT6SbAaeNerN3MIl9NpInvjQUkQCmgXxbqNC5TsDIunpD7Anu8Z5IHx nDvNzsA47h8IhQE2SDqSTUm+CDSceU8pJv+e14o6zc874oS8xwoI993z8jyZ cb5DmGgAiFGho5sR4w6CxHotOHK1wwXPeGigRFm3xWwXK5fBxxSmx4KNqt0t Ec5KOeDHaBjF91QVI0kIlC8dF4tm7sAEttPNrCCDj0LQSUYsD7Pa4JotgbRm zmnuACsVdsq4UmUb7Gt1rlUh7wTq49L+b+u5c7XLJ83ujuaJOWenGxsgl6.O aUG4MxLg40LLZNpjY.zvbdL63QtXb7WQ1wpRkI0AATZrwYhP0MTRxPum2mrF cPrwnBupmhs3mZA9QuXNSheXhA3PH1feDbnmGvODZiAfmvBbGdHV.mWgYeBG jktmqCZRs4Y05QNIV.mzUCMwVfljUCMQVhlkoqoyXlLnqE5AcAav+5oJXiJa 7snxhi7pJqM3OZw3WWaPmuAD6EuAavu9Urs7G.j+37+5oahsDMv0IEmMobww qWJWxKL82AOvYnclX7uPTSXBJLcnmG71P17.FQlW3RWcf5WXl4jRzgd9vBfd vB5zXWGK.l5AKfrlFfUUBiVsvRHxAZnuNpD1l0JJYDgZ54CBMzFCXo0q1dPX VU0EdcS2ZZfRPA6Kk05tQ6LcyDscMqXPM+RV+7S1pWses8+fA+n1p -----------end_max5_patcher-----------
Ah, so you are basically looking to generate a database of sorts of these permutations in order to recombine them?
As in, right now it’s not about polyrhythmicality at all, it’s just about generating the patterns, yeah?
X O O O O – O X O O O – O O X O O – O O O X O == X 0 0 0 0 0 repeated
X O O O – O X O O – O O X O == X 0 0 0 0 repeated.
In our class, we were presented with this article on change ringing that may be helpful (attached as pdf). A very talented classmate of mine was successful in creating a max algorithm but he would have to explain it.
Sorry, that pdf did not upload. The article is "Composing Algorithms II by means of Change-Ringing" by Lejaren Hiller and Raveesh Kumra.
Yes. Chris Dobrian’s gets right to the point. Notice his example mixes notevalue time arguments and ticks time arguments. In Max every 4n has 480 ticks. This is necessary when programming divisions other than duple and triple. [translate] is helpful for generating time syntax arguments.
The seq~ object is also handy, since you can add event values in floating point values. (and then scale the overall tempo via changing the speed of the phasor~)
@freddiemas: could you please upload it somewhere? all I could find was for-pay photocopies and such.
Been away from the computer today but this is great help. Will try and work on this over the weekend. Christopher’s suggestion is headed the right way and Peter’s idea taps into that I am already using seq~ with phasor~. Got something in the works but need to work it out and haven’t been able to focus on it at length today.
I’ll post my patch soon once I get somewhere with it.
I would also like to see the Hiller article. JSTOR doesn’t seem to have it even.