Techniques For Generative Music?
Hi – I am interested in creating generative systems within Max. I’m wondering what techniques people here employ to create self evolving, varying systems? So far with Max, I’ve done a lot with phasing of sequencers, and done some stuff with probability (though I personally am reluctant to use [random] – I’d much rather have the system work as a set of rules without the need for chance). Beyond phasing and weighting with [random], what other approaches are there to creating generative music?
Thanks for any input!
> …I am interested in creating generative systems within Max. I’m wondering what techniques people here employ to create self evolving, varying systems? So far with Max, I’ve done a lot with phasing of sequencers, and done some stuff with probability (though I personally am reluctant to use [random] – I’d much rather have the system work as a set of rules without the need for chance). Beyond phasing and weighting with [random], what other approaches are there to creating generative music?
> Thanks for any input!
There’s nothing wrong with randomness per se – it’s what you do with it. Peter Castine’s Litter Power objects contain a variety of kinds of generators. Markov processes, Genetic algorithms, weighted averaging, chaotic attractors, neural networks, and so on – they’ve all been used with varying results by all kinds of people. My own view is that (to quote my friend Luke Dubois) "Mapping is everything."
In a way, this is a sort of "Hi! Can you send me a synth patch?" request – the question is sufficiently general that it’s difficult to know how to answer. What kind of variety do you want to generate/organize?
you could use jit.conway as a starting point for composition decisions.
On Dec 23, 2008, at 6:52 PM, Kyle Kaplan wrote:
> Hi – I am interested in creating generative systems within Max. I’m
> wondering what techniques people here employ to create self
> evolving, varying systems? So far with Max, I’ve done a lot with
> phasing of sequencers, and done some stuff with probability (though
> I personally am reluctant to use [random] – I’d much rather have the
> system work as a set of rules without the need for chance). Beyond
> phasing and weighting with [random], what other approaches are there
> to creating generative music?
> Thanks for any input!
Theres a good introductory book on algorithmic composition called Composing Music with Computers. Its a bit expensive, but comes with a software cd.
I posted a markov utility a while back that you might find
It allows you to create tables of symbols that have associated
probabilities with it. Give it a try.
thanks for the responses! i’ll look into all these things. i have been considering purchasing litter power, and think i’ll just go ahead and do it.
i realized another form of generative music could just be a giant chain of [metro]‘s, [counter]‘s, [selects]‘s [delay]‘s, [onebang]‘s, [switch]‘s and [gate]‘s. It’s like that game mouse trap – a bang gets sent into this giant, tangled system, and leads to a certain results. These results supply new values to certain variables (i.e. metro speed, delay time, gate toggles, etc) so that when the bang gets relaunched into the system, something different (yet similar, if you so choose) happens.
to gTaylor – indeed, it is quite a general question, but that was my intention. To go with your synth analogy, if someone said "what kind of synthesis technqiues exist?" one could say additive, FM, granular, waveshaping, etc. I’m looking for an answer equally as general (no need for people to post patches). I also just realized that your LFO tutorials are another example of a generative system.
I know it seems simple, but [drunk].
Use a bunch of these as bpatches and chain the out put of one to the range of the next and the rate of the one after that.
this off topic and I still feel the need to ask- my copy of max5 takes foreeeeever to load up. (i’m typing this as I wait for the file to open so I can copy the patch. . .
is anybody else having this issue? Is my computer getting old and saggy?
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
----------begin_max5_patcher---------- 2038.3oc6akzciZDD9r7uBFcJShrldkt6bJGy+A+lWdHIFahk.+PnwSx7l+6 A5tAgrXojXwXm4fkYQntpuZuplueyr4qh9l+94N+tycNyl88alMSeorKLyd9 r467915sd60es4g9OGs5umuvbqD+uknu7Gt0ghP4WN7vtnCIa8SzOC1dUykR 9mm7MK37fvzG9y169jWx5GBBu+uh8WmX9BXFaIZgCg6l8Op9DLeIp3YB1nW7 TB5Vd9Z+knvjPuc50X9e5u8q9IAq8Je28A+q9tpzeuB5MHLmbIYW6G2bS1GK tJT4qdwETvAIJEXPHh3LLy6PRTJWmD67GYGl8HN3pgPVcP37Ek9qIrz0.hHM Fh3MAkrdCJyk7qi1FEanCzRpfvYpLRgQUDra1QTNQwvojTIJJ1eeRTruE0sv 9r4aB71ZYIZ92MkX1Fktx2Q+rUy43uiljV4aWdBk+xabG19PJk538h2uMXS9 SkBVmbyjn6ueqUDfc9r9pZMlto2TnYrMxayN+86c3WnEUip.bhrj4DWzjN.s +zAF.XAkpBewdaZDantZrQogFgpIng7pBM5mtO4blgmsZEDd9mUw5R57p3CT gY9tc9gFYUrWhuSPnyt8Nq7Sd12Ozg33EtQGln+TIND9j25GcBbBpFSHME6Y Q6gfnTMrXiDgYtKkRkBIqW8P9NS+vh.JHpGXvpG+x1f8IYhsENOGjjtjZK5O 5D6Edu+0neXXppYbTCgE0xUJA0N2ITyaNFWItC+oTd4YusO5XCULdbD20Di2 EBKIgyRe4iN6W6MprBAocJKbk.XEAXVQKWRofqgSVcHIMSspRz6z6.zxaUp5 NjX1XanaT9mUBA74SVuHbiCTI.kRWEbuHcQorsjLvK6U.PTxMJuwDLbkSwju 90zzzuP.IMobuVBuJMU3wPF2vK4M.KhITIdCLrXh4BCVbmhvxmzwyGNjwDYf JazNh++JjwZJABYXupHioX8pBhdrL9bFM1eep2dujfnvxcFxvrZljYXU2Rr5 CYn8IMcvUwvX4hJOpbSG.V8fQbr3kAvOaYotHgjsnxiJur0GwzF4mSOiIKCM k0cJ2TLEL47CIwAmP27rlzvWT4Qko6UQwa7iuJjtrtEFUnb8vp6O4mSpjHpR +nG+nr357b8dIyH4RIQC8mezILCnUdhG5vZ+6JksG5f+5FQU2IuJbBT950X+ Sn3kJkRJjVm.oLp8yZLkygzPe+Ma8uJM1T1UypEHvUHdx61hrNpFhU8wH9Wh sRF0FDdJqKIBFGunxiZ0NKWkflFNCcMlEl9xVgFvwFydUM0o0ppXLYox9YjF Gr.u2aG9KbzTzV9AvGyu4z2Ckw5fwpHSYM4fg0esQlT0nD5GjqE0vARGLe3V Bs1GG03DYHSwJB0cdEsLKe1dsTYqFls0GRZiHC5sfFVMcZH0abso.PachePf PaWWZDBo8WV.zwFBGphoxwOEoTEF0geS7hoH.KlhvFopoBtOLJc02Fr9Q.ho AsHq7NLa5pv0UjEEXPtzxRR4CyXiQ+rvqWwBu9vs8dVQ1LJyyquwrhn32.wr 58I.XK7gvZeB.TD7I.zGSZqUWn3Vcgx0AJTVgOQIkR0Kz.N2MJTi8Iuaz7dO JpKbI.2nX2WA2nq8BSYF8LmKWe14NW4HrxUWdbUGUsyUUs9VysPy+3xbqJXJ DYQkGTiO0S7jZ+dCfcRKFIloYnpQE48r4gcnEcx7f+SyiIt4QMYaryOINJqN k9duAX6.CR660swsyG90sFEan4Jbbb5cpwwgrXVOfay6Em.mprIJ18rBAV+f +5G82bUYbCw7tnHhNjYOjlMl8XB8dt87it1bEsaU1JDumdmFiKPXk2nctsJg g5eGTc9B25VbHxth74eLLZUeUNGzhmZr075tifF5xrhqWAH9Bz.jvT.HM1YL Halybos3rcSEDoMplou.0Jsuj0jJj0Csjtss+VsiroyQ4HnZbLWdCvMef638 l3CgOpAZGRe2.AjYu9XJjDia7Mz.+FnisO4E521XbOtTkxMtFydTqkexwjR6 XB8+tDCaQQAnwQGB23quCFOPwV0TldD.u30uRyeYW+Trcezg304JS12Rmr28 DKkrweeRPXA6c2wVS5TpDqfMa7COsUJWwKlytfMOEkpOaI7ZzN5S9HKB66B9 f+NgObeevGh2Irwa.0J7othpQuh0BizyzDF.MQGWZJaf1sSShwklHPkc3oEM oAyKflvbZ1faHJSkARbwYcUSiAfZGWgp.hL8R7q.sHld1FFhZvEkFz4Y+VMg yPpL0ClY2UPvhhy5HKQgvSb9PvScjxeAQUuREdpQ3t.Ibx34fiB0A2TSKfBx 0BdJR4PbSyGW+zbHnYqE50yzjBJNAzPGCVByMgncElcP.EaF9AuydccA4BfO p3rKHKI2omr2cHk8DpN8LFxjkFs6omAimbGddhZdyP6CdJ6sHscaT0ko6vkb 8NahX1zxFZWeVWoV0.PscM0RDfZucuvxCYBCloL6UH0wy5JBxfZWdATqk9rt YKeVefssRsir2VNTu.SLushwEmDfxxG8Fn1QHF3zoX8JfLenCRJ1TlND.wrs SXb6PTO4LtL+Lt8rwfe0ULgGH9EqLavWpYOhq5NOQgTfmPLAc2HGUZhBQ1iG 2Bf.0Maw3lthDRaijjwklH8QnhAflvPnowqa1RH5S7wM0CxzScZBhRPxEhMt nDnlY1kTFSO4G27e.rwld9. -----------end_max5_patcher-----------
Quote: ComfortableInClouds wrote on Tue, 23 December 2008 15:52
> Hi – I am interested in creating generative systems within Max. I’m wondering what techniques people here employ to create self evolving, varying systems? … I’d much rather have the system work as a set of rules without the need for chance).
Oooh, this is one of my favorite topics! Many of the things I build for Max surround this idea of deterministic (non-random) generative music.
I start with techniques from serialism: short patterns that repeat over and over again. It is very easy to take some simple patterns and make them interact with each other in complex ways in Max.
A basic technique you are probably already familiar with is to take multiple note sequences of different lengths and play them against each other (like 15 vs 16). Each pattern repeats at a different time, so the sequence as a whole will take a long time before it repeats exactly. Steve Reich did a lot with this technique.
On top of that approach you can try some more interesting things. Instead of simply sequencing pitches, you can sequence an interval to be added to the base pitch sequence. If you have a few pairs of pitch+interval sequences, all at different lengths, it can get very unpredictable (and also sound awful if you are not careful!)
I also like separating out the rhythm sequence from the pitch sequence. So you can have some pitch sequence like C D E B, and a rhythm like quarter quarter eighth quarter eighth. Since they are different lengths, it can generate patterns more complex than the simple patterns you start with.
Taking this idea even further, in Max you can devise ways to sequence a pattern of instructions that modify your base patterns (like change their length or insert/delete notes). And of course you can even have sequences that modify the sequences that modify the patterns. Even though each pattern may be very simple, the results can become chaotic. It can be hard to control this kind of approach, but it’s fun to play with.
Then you can start to introduce some controlled randomness into all of this too…
Hopefully that gives you some ideas. In Max 5 it’s possible to do a lot of this will the [zl] object and some [counter]s. You may also want to check out my Max objects. I’m about to release a new version, you can get the "beta" here:
Sorry that’s Max 5 only! There’s an older Max 4 version on my site.
A couple examples of things I mentioned are in the help files. In ajm.seq’s help, check the "chords" subpatch for an example of sequencing instructions to modify a sequence. In ajm.rseq, see the "basic example" in the upper right for a rhythm & pitch sequence of different lengths. I also wrote a bit about these ideas here: http://compusition.com/web/articles/musical-decoupling
Also, if what I am saying interests you may want to check out the program Numerology at http://five12.com/
And take a look at Karlheinz Essl’s real time composition library: http://www.essl.at/works/rtc.html
I never delved into it personally, but it looks very interesting and I’ve heard good things about it. It’s on my todo list…
Okay I can open that one. Interesting stuff, I will definitely
have to do some experimenting with it. Thanks!
yeah, making music with max. :)
i have done some "generative" stuff some years ago and i figured out that it needs a lo0t of efort to provide yourself a user interface where you just choose from a set of rules …
start making some simple rules, and you will find out some rules about how to make rules.
my basic method of autocomposing has always been sequencing numbers. this need at first a set of "fixed" events.
that can be counting up, that can be a midifile, that can be bang bang bang, or a list of numbers which can be dynamic.
you can also play the melody from a coll. coll offers, besides other thing, the wonderfull "swap" command (see subpatch in coll.help)
then you need rules for filtering (mainly deciding which parts of the fixed or repetive events should be changed), and lastly you need processes which are able changing input.
before dealing with markov chains, fibonacci numbers, keplers theorems, fast fourier, the scala archive or live video input
for modulation, it is strongly recommended to start building really basic things.
let me give an example; this can be a tutorial.
1. build something which can play chords.
2. build something which can find all notes G in incoming chords, seperate them from the chord and output them on another oupt.
2. build something which can transpose notes, delays notes in time, and record data and numbers in a buffer/coll/mtr/seq.
3. build a simple arp which can break up chords into single 1/16th notes
4. build something which can check if two subsequential notes are even. block them when two same notes com in, but only from 2-10 notes. the 11th identical numbers should be allowed to pass.
those sound boring? you need them! such simple processes are the basis for the strange and interesting things.
|vanille b_chamel wrote on Fri, 23 January 2009 09:59|
I know : "- il faut faire simple !", but who cares about rules ?
Here last version (with an exemple) of what i’m working on ; (almost the same but NOT compatible with previous, so don’t have them both in your filepath). You need max 5 AND JITTER.
Next step is to make interaction with my doublebass…
I read stuff about neural networks, but i have no idea using it for generative music, somebody ?
by making rules. music consists of math and math consist of rules. no rules = no music. the more rules, the better the music.
(or 2*55, or 10*11, or two times 1 then one time one number smaller, or…(insert custom cadence here, then repeat for 110 times but substract cos(4Hz/nyquist) from the second 1 every 7th loop.))
|vanille béchamel wrote on Fri, 27 February 2009 00:51|
"music consists of math and math consist of rules."
my english is too bad to discuss philosophy, sorry
but for neural networks my question was how do people use neural network (or self organized map), if you prefer which kind of RULES do THEY use. The problem is not to implement it (even if it is) but for what ? Neural networks are great to RECOGNIZE stuff, group stuff, gesture, key of a song… but how GENERATE tonal (what an ugly word) music ?
my answer was less philosophical than you think.
melody, harmony, tonal scale systems, and synthetic sound design also involve a lot of math.
and as a result of this, it is not wrong to look at the composing part as a programmer!
i dont believe in "the rules they use", i believe in the unique and new ruleset YOU will create today.
start dividing that rule thing into basic rules.
how can we start? with a coll:
patch a coll, and have a starting melody.
what can we do to it? we could change the pitch:
program something which can do pitch changes to the coll content, and you have the first possibilty to change the melody.
now do the same to the time domain.
then program the next set of rules, this time rules which decide when any why the pitches and times will be changed.
the application is the music. so program the patch and you will end up with a song because the patch is a song.
PATCH = RULES
SONG = RULES
PATCH = SONG
SONG = PATCH
ICH BIN DU UND DU BIST ICH.
- convert decimal to binary, tertiary, quartiery
– change every nth input
– compare two streams to make decisions
– probability for events
– randomness for events
– human interface for events
– all kinds of scaling and range distortion
– chord progressions
– population growth
– lorenz attractor
– markov chains
– modulation around center: linear/gauss/drunk
– cellular automatas
– multiplication and addition
– controlled errors
– distribution of data onto different channels
– recogisation of certain numbers/chords/rythms
– filter for certain numbers/chords/rythms
– physical movement/modelling
– magic square
– golden mean
– control amount of data, lenght of lists
– counting, repeating, looping
– remebering and forgetting
– seperate and combine operations across musical elements
– the 70ies classics: autochord, arpeggio,…
– all kind of mutations of and morphs between values/streams
– multiple and nonlinear masterclocks (very important)
– different tuning scales (very important)
– mapping tables, where calculation no longer work
– realtime time manipulation (delays, "shuffle", "humanize")
– checks for similarity or "contrast"
– linking events or excluding events
– fold, wrap, limit, mean, average and weighten numbers/lists
Bump. What a list, roman :)