## Algorithmic Suggestions

Nov 02 2013 | 9:15 pm
Hi I have been working on the below patch I followed with one of the BAZ Tutorials. Simple Probability. Just wondering if anyone has any ideas how I can maybe move on from here and go further with the patch.
Im trying to get further into using algorithms in my music so any suggestions are welcome.
Thanks :)

• Nov 02 2013 | 10:52 pm
The first step might be getting into weighted probability or trying out different random number distributions. Check out the Litter externals for generating different kinds of random values. Also, try playing around with applying probabilities to various parameters in music. It's a pretty short leap to go from probabilities to Markov chains, so that might be something to check out as well. Here's a little tutorial on it from the algorithmic composer blog. I also made a little patch that implements a weighted random probability table using the prob object.
----------begin_max5_patcher----------
{
"boxes" : [ {
"box" : {
"maxclass" : "comment",
"text" : "Create a weighted probability table, double click to see inside ",
"linecount" : 3,
"numinlets" : 1,
"patching_rect" : [ 446.0, 375.0, 154.0, 48.0 ],
"fontsize" : 12.0,
"numoutlets" : 0,
"id" : "obj-129",
"fontname" : "Arial"
}
}
, {
"box" : {
"maxclass" : "comment",
"text" : "Using weighted random numbers to determine the speed of the sequence. ",
"linecount" : 3,
"numinlets" : 1,
"patching_rect" : [ 629.0, 244.0, 155.0, 48.0 ],
"fontsize" : 12.0,
"numoutlets" : 0,
"id" : "obj-127",
"fontname" : "Arial"
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "metro 1000",
"numinlets" : 2,
"patching_rect" : [ 456.0, 158.0, 71.0, 20.0 ],
"fontsize" : 12.0,
"numoutlets" : 1,
"outlettype" : [ "bang" ],
"id" : "obj-125",
"fontname" : "Arial"
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "if \$i1 < 3 then 300 else 500",
"numinlets" : 1,
"patching_rect" : [ 456.0, 244.0, 155.0, 20.0 ],
"fontsize" : 12.0,
"numoutlets" : 1,
"outlettype" : [ "" ],
"id" : "obj-124",
"fontname" : "Arial"
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "random 5",
"numinlets" : 2,
"patching_rect" : [ 456.0, 195.0, 61.0, 20.0 ],
"fontsize" : 12.0,
"numoutlets" : 1,
"outlettype" : [ "int" ],
"id" : "obj-123",
"fontname" : "Arial"
}
}
, {
"box" : {
"maxclass" : "newobj",
"numinlets" : 1,
"patching_rect" : [ 408.0, 518.0, 79.0, 20.0 ],
"fontsize" : 12.0,
"numoutlets" : 1,
"outlettype" : [ "" ],
"id" : "obj-113",
"fontname" : "Arial"
}
}
, {
"box" : {
"maxclass" : "number",
"numinlets" : 1,
"patching_rect" : [ 456.0, 284.0, 50.0, 20.0 ],
"fontsize" : 12.0,
"parameter_enable" : 0,
"numoutlets" : 2,
"outlettype" : [ "int", "bang" ],
"id" : "obj-99",
"fontname" : "Arial"
}
}
, {
"box" : {
"maxclass" : "number",
"numinlets" : 1,
"patching_rect" : [ 408.0, 605.0, 50.0, 20.0 ],
"fontsize" : 12.0,
"parameter_enable" : 0,
"numoutlets" : 2,
"outlettype" : [ "int", "bang" ],
"id" : "obj-97",
"fontname" : "Arial"
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "p weights",
"numinlets" : 1,
"patching_rect" : [ 366.0, 372.798828, 61.0, 20.0 ],
"fontsize" : 12.0,
"numoutlets" : 1,
"outlettype" : [ "int" ],
"id" : "obj-87",
"fontname" : "Arial",
"patcher" : {
"fileversion" : 1,
"appversion" : {
"major" : 6,
"minor" : 0,
"revision" : 3
}
,
"rect" : [ 70.0, 208.0, 640.0, 480.0 ],
"bglocked" : 0,
"openinpresentation" : 0,
"default_fontsize" : 12.0,
"default_fontface" : 0,
"default_fontname" : "Arial",
"gridonopen" : 0,
"gridsize" : [ 15.0, 15.0 ],
"gridsnaponopen" : 0,
"statusbarvisible" : 2,
"toolbarvisible" : 1,
"boxanimatetime" : 200,
"imprint" : 0,
"enablehscroll" : 1,
"enablevscroll" : 1,
"devicewidth" : 0.0,
"description" : "",
"digest" : "",
"tags" : "",
"boxes" : [ {
"box" : {
"maxclass" : "comment",
"text" : "Message format = This number... going to that number... has a weight of...\n\nex. 1 2 1\n\nThe probability of 1 going to 2 has a weight of 1. If a value has more than one transition value, then the probabilities are summed\n\nex. 1 2 1; 1 3 2; \n\nThe probability of 1 going to 2 is 0.33 (1 / (1 + 2)) and the probability of 1 going to 3 is 0.67 (2 / (1 + 2))",
"linecount" : 16,
"numinlets" : 1,
"patching_rect" : [ 187.0, 170.201172, 208.0, 227.0 ],
"fontsize" : 12.0,
"numoutlets" : 0,
"id" : "obj-42",
"fontname" : "Arial"
}
}
, {
"box" : {
"maxclass" : "message",
"text" : "reset 2",
"numinlets" : 2,
"patching_rect" : [ 563.0, 135.0, 47.0, 18.0 ],
"fontsize" : 12.0,
"numoutlets" : 1,
"outlettype" : [ "" ],
"id" : "obj-39",
"fontname" : "Arial"
}
}
, {
"box" : {
"maxclass" : "button",
"numinlets" : 1,
"patching_rect" : [ 50.0, 106.0, 20.0, 20.0 ],
"numoutlets" : 1,
"outlettype" : [ "bang" ],
"id" : "obj-35"
}
}
, {
"box" : {
"maxclass" : "message",
"text" : "3 2 2",
"numinlets" : 2,
"patching_rect" : [ 497.0, 135.0, 37.0, 18.0 ],
"fontsize" : 12.0,
"numoutlets" : 1,
"outlettype" : [ "" ],
"id" : "obj-30",
"fontname" : "Arial"
}
}
, {
"box" : {
"maxclass" : "message",
"text" : "3 1 1",
"numinlets" : 2,
"patching_rect" : [ 445.0, 135.0, 37.0, 18.0 ],
"fontsize" : 12.0,
"numoutlets" : 1,
"outlettype" : [ "" ],
"id" : "obj-28",
"fontname" : "Arial"
}
}
, {
"box" : {
"maxclass" : "message",
"text" : "dump",
"numinlets" : 2,
"patching_rect" : [ 115.0, 106.0, 41.0, 18.0 ],
"fontsize" : 12.0,
"numoutlets" : 1,
"outlettype" : [ "" ],
"id" : "obj-26",
"fontname" : "Arial"
}
}
, {
"box" : {
"maxclass" : "newobj",
"numinlets" : 1,
"patching_rect" : [ 162.0, 61.0, 60.0, 20.0 ],
"fontsize" : 12.0,
"numoutlets" : 1,
"outlettype" : [ "bang" ],
"id" : "obj-18",
"fontname" : "Arial"
}
}
, {
"box" : {
"maxclass" : "message",
"text" : "2 1 2",
"numinlets" : 2,
"patching_rect" : [ 389.0, 135.0, 37.0, 18.0 ],
"fontsize" : 12.0,
"numoutlets" : 1,
"outlettype" : [ "" ],
"id" : "obj-14",
"fontname" : "Arial",
"presentation_rect" : [ 390.0, 132.0, 0.0, 0.0 ]
}
}
, {
"box" : {
"maxclass" : "message",
"text" : "2 3 1",
"numinlets" : 2,
"patching_rect" : [ 315.0, 135.0, 37.0, 18.0 ],
"fontsize" : 12.0,
"numoutlets" : 1,
"outlettype" : [ "" ],
"id" : "obj-15",
"fontname" : "Arial",
"presentation_rect" : [ 316.0, 132.0, 0.0, 0.0 ]
}
}
, {
"box" : {
"maxclass" : "message",
"text" : "1 3 2",
"numinlets" : 2,
"patching_rect" : [ 236.0, 135.0, 37.0, 18.0 ],
"fontsize" : 12.0,
"numoutlets" : 1,
"outlettype" : [ "" ],
"id" : "obj-13",
"fontname" : "Arial"
}
}
, {
"box" : {
"maxclass" : "message",
"text" : "1 2 1",
"numinlets" : 2,
"patching_rect" : [ 162.0, 135.0, 37.0, 18.0 ],
"fontsize" : 12.0,
"numoutlets" : 1,
"outlettype" : [ "" ],
"id" : "obj-11",
"fontname" : "Arial"
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "prob",
"numinlets" : 1,
"patching_rect" : [ 50.0, 170.201172, 35.0, 20.0 ],
"fontsize" : 12.0,
"numoutlets" : 2,
"outlettype" : [ "int", "bang" ],
"id" : "obj-68",
"fontname" : "Arial",
"save" : [ "#N", "prob", ";" ]
}
}
, {
"box" : {
"maxclass" : "inlet",
"numinlets" : 0,
"patching_rect" : [ 50.0, 61.0, 25.0, 25.0 ],
"numoutlets" : 1,
"outlettype" : [ "bang" ],
"id" : "obj-85",
"comment" : ""
}
}
, {
"box" : {
"maxclass" : "outlet",
"numinlets" : 1,
"patching_rect" : [ 50.0, 330.074219, 25.0, 25.0 ],
"numoutlets" : 0,
"id" : "obj-86",
"comment" : ""
}
}
],
"lines" : [ {
"patchline" : {
"source" : [ "obj-18", 0 ],
"destination" : [ "obj-39", 0 ],
"hidden" : 0,
"midpoints" : [ 171.5, 107.5, 572.5, 107.5 ],
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-39", 0 ],
"destination" : [ "obj-68", 0 ],
"hidden" : 0,
"midpoints" : [ 572.5, 161.100586, 59.5, 161.100586 ],
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-35", 0 ],
"destination" : [ "obj-68", 0 ],
"hidden" : 0,
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-85", 0 ],
"destination" : [ "obj-35", 0 ],
"hidden" : 0,
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-18", 0 ],
"destination" : [ "obj-30", 0 ],
"hidden" : 0,
"midpoints" : [ 171.5, 107.5, 506.5, 107.5 ],
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-18", 0 ],
"destination" : [ "obj-28", 0 ],
"hidden" : 0,
"midpoints" : [ 171.5, 107.5, 454.5, 107.5 ],
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-30", 0 ],
"destination" : [ "obj-68", 0 ],
"hidden" : 0,
"midpoints" : [ 506.5, 161.100586, 59.5, 161.100586 ],
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-28", 0 ],
"destination" : [ "obj-68", 0 ],
"hidden" : 0,
"midpoints" : [ 454.5, 161.100586, 59.5, 161.100586 ],
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-26", 0 ],
"destination" : [ "obj-68", 0 ],
"hidden" : 0,
"midpoints" : [ 124.5, 146.600586, 59.5, 146.600586 ],
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-18", 0 ],
"destination" : [ "obj-14", 0 ],
"hidden" : 0,
"midpoints" : [ 171.5, 107.5, 398.5, 107.5 ],
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-18", 0 ],
"destination" : [ "obj-15", 0 ],
"hidden" : 0,
"midpoints" : [ 171.5, 107.5, 324.5, 107.5 ],
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-18", 0 ],
"destination" : [ "obj-13", 0 ],
"hidden" : 0,
"midpoints" : [ 171.5, 107.5, 245.5, 107.5 ],
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-18", 0 ],
"destination" : [ "obj-11", 0 ],
"hidden" : 0,
"midpoints" : [ 171.5, 107.5, 171.5, 107.5 ],
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-14", 0 ],
"destination" : [ "obj-68", 0 ],
"hidden" : 0,
"midpoints" : [ 398.5, 161.100586, 59.5, 161.100586 ],
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-15", 0 ],
"destination" : [ "obj-68", 0 ],
"hidden" : 0,
"midpoints" : [ 324.5, 161.100586, 59.5, 161.100586 ],
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-13", 0 ],
"destination" : [ "obj-68", 0 ],
"hidden" : 0,
"midpoints" : [ 245.5, 161.100586, 59.5, 161.100586 ],
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-11", 0 ],
"destination" : [ "obj-68", 0 ],
"hidden" : 0,
"midpoints" : [ 171.5, 161.100586, 59.5, 161.100586 ],
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-68", 0 ],
"destination" : [ "obj-86", 0 ],
"hidden" : 0,
"disabled" : 0
}
}
],
"dependency_cache" : [ ]
}
,
"saved_object_attributes" : {
"globalpatchername" : "",
"default_fontsize" : 12.0,
"fontface" : 0,
"fontsize" : 12.0,
"description" : "",
"tags" : "",
"default_fontface" : 0,
"fontname" : "Arial",
"digest" : "",
"default_fontname" : "Arial"
}
}
}
, {
"box" : {
"maxclass" : "toggle",
"numinlets" : 1,
"patching_rect" : [ 366.0, 125.0, 20.0, 20.0 ],
"parameter_enable" : 0,
"numoutlets" : 1,
"outlettype" : [ "int" ],
"id" : "obj-82",
"presentation_rect" : [ 880.0, 73.0, 0.0, 0.0 ]
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "select 32",
"numinlets" : 2,
"patching_rect" : [ 366.0, 85.0, 59.0, 20.0 ],
"fontsize" : 12.0,
"numoutlets" : 2,
"outlettype" : [ "bang", "" ],
"id" : "obj-83",
"fontname" : "Arial",
"presentation_rect" : [ 880.0, 33.0, 0.0, 0.0 ]
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "key",
"numinlets" : 0,
"patching_rect" : [ 366.0, 54.0, 59.5, 20.0 ],
"fontsize" : 12.0,
"numoutlets" : 4,
"outlettype" : [ "int", "int", "int", "int" ],
"id" : "obj-84",
"fontname" : "Arial",
"presentation_rect" : [ 880.0, 2.0, 0.0, 0.0 ]
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "metro 1000",
"numinlets" : 2,
"patching_rect" : [ 366.0, 327.0, 71.0, 20.0 ],
"fontsize" : 12.0,
"numoutlets" : 1,
"outlettype" : [ "bang" ],
"id" : "obj-80",
"fontname" : "Arial"
}
}
, {
"box" : {
"maxclass" : "number",
"numinlets" : 1,
"patching_rect" : [ 366.0, 482.0, 50.0, 20.0 ],
"fontsize" : 12.0,
"parameter_enable" : 0,
"numoutlets" : 2,
"outlettype" : [ "int", "bang" ],
"id" : "obj-77",
"fontname" : "Arial",
"presentation_rect" : [ 874.0, 271.0, 0.0, 0.0 ]
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "table",
"numinlets" : 2,
"patching_rect" : [ 366.0, 447.0, 37.0, 20.0 ],
"fontsize" : 12.0,
"numoutlets" : 2,
"outlettype" : [ "int", "bang" ],
"id" : "obj-78",
"fontname" : "Arial",
"presentation_rect" : [ 874.0, 236.0, 0.0, 0.0 ],
"showeditor" : 0,
"embed" : 0,
"editor_rect" : [ 746.0, 80.0, 280.0, 246.0 ],
"saved_object_attributes" : {
"embed" : 0,
"parameter_enable" : 0,
"name" : "",
"size" : 4,
"range" : 128,
"showeditor" : 0
}
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "noteout 1",
"numinlets" : 3,
"patching_rect" : [ 366.0, 660.0, 61.0, 20.0 ],
"fontsize" : 12.0,
"numoutlets" : 0,
"id" : "obj-62",
"fontname" : "Arial"
}
}
],
"lines" : [ {
"patchline" : {
"source" : [ "obj-82", 0 ],
"destination" : [ "obj-125", 0 ],
"hidden" : 0,
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-125", 0 ],
"destination" : [ "obj-123", 0 ],
"hidden" : 0,
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-124", 0 ],
"destination" : [ "obj-99", 0 ],
"hidden" : 0,
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-123", 0 ],
"destination" : [ "obj-124", 0 ],
"hidden" : 0,
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-113", 0 ],
"destination" : [ "obj-62", 1 ],
"hidden" : 0,
"midpoints" : [ 417.5, 550.0, 396.5, 550.0 ],
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-77", 0 ],
"destination" : [ "obj-62", 0 ],
"hidden" : 0,
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-99", 0 ],
"destination" : [ "obj-80", 1 ],
"hidden" : 0,
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-97", 0 ],
"destination" : [ "obj-62", 2 ],
"hidden" : 0,
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-82", 0 ],
"destination" : [ "obj-80", 0 ],
"hidden" : 0,
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-80", 0 ],
"destination" : [ "obj-87", 0 ],
"hidden" : 0,
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-87", 0 ],
"destination" : [ "obj-78", 0 ],
"hidden" : 0,
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-84", 0 ],
"destination" : [ "obj-83", 0 ],
"hidden" : 0,
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-83", 0 ],
"destination" : [ "obj-82", 0 ],
"hidden" : 0,
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-78", 0 ],
"destination" : [ "obj-77", 0 ],
"hidden" : 0,
"disabled" : 0
}
}
],
"appversion" : {
"major" : 6,
"minor" : 0,
"revision" : 3
}
}
-----------end_max5_patcher-----------
• Nov 02 2013 | 11:34 pm
Check out Chris Dobrian's blog... http://algocomp.blogspot.com
He has a knack for simplifying complex subjects.
• Nov 02 2013 | 11:38 pm
Cool, thanks guys, thanks for the suggestions, will look into these in my exploration of more algorithms in music ;)
• Nov 02 2013 | 11:46 pm
John for some reason I cant paste your patch.
• Nov 02 2013 | 11:52 pm
do make sure to go do the regular max tutorials for a take on non-random systems too.
I dunno, I think algo patches focus too much on randomness.
• Nov 02 2013 | 11:55 pm
Really? I thought getting into probability and such would get me away from randomness. Definitely want to have good control over the outcomes and to be able to change the rules.
• Nov 03 2013 | 12:57 am
Probability is probably (heh) the closest relative to randomness. If you want something that goes beyond that, try [drunk] which is already MUCH better than random and most probability things, in my opinion.
But what I really love is basically the output of complex systems. Take this patch:
Now, it's not random. And you can *totally* hear it's not random. But the thing is, there's this underlying musicality and *control* over the way it progresses, in my humble opinion. Can ya tell I love analogue sequencers? Yeah.
oh, and it sounds like this:
• Nov 03 2013 | 1:21 am
Thanks Wetterberg, Nice patch, I have a bit of research to do anyway. I will definietly give drunk a look too, used it before for a few other things. Nice to make these beats flow more with more differing rhythms.
• Nov 03 2013 | 6:31 am
I agree with Wetterberg that dealing with probability is going to be really close to randomness. If you're trying to move away from that, maybe try some generative systems such as fractals or generative grammars.
• Nov 03 2013 | 7:25 am
The OP asked about algorithms.. which don't necessarily entail randomness. Either way, I'm not sure I see the contradiction. Randomness is just even odds. The less even they are, the less random it is. Too much or too little is unnatural. So is randomness really the problem? Or like most things, it is the lack of creative (un)balance? And how do you get better at that?
I know I'm not saying anything new, but the guy is just starting out. Seems like it would be most relevant to offer a range of examples, from popcorn percussion to list processing. And given the nature of how to build stuff in Max, what isn't an algorithm?
• Nov 03 2013 | 10:06 am
The less even they are, the less random it is. Too much or too little is unnatural.
too little randomness is unnatural? - or am I misinterpreting the sentence?
I would posit that if you sit by a piano and reach out to play a key, *any* random occurence of a note other than the one you intended to play would be perceived as "unnatural"...
Exactly. My own interpretation of this lead me to post a complex system made with simple elements and repetition (there's only a little handful of objects, copied out a buncha times, ending in makenote+noteout)
I personally feel that knowing how to wrangle simple elements in this way can be done almost at tutorial no. 1, and they can be *analysed*, so that the beginner - or even intermediate - can sit down and look at the wiring and fully grok the patch. I feel that grokking is needed to learn and move forward, and stochastic processes are more of a "black box" than anything.
But I also concede that many do use max to do large random or pseudorandom processes, and that's perfectly fine too - horses for courses!
• Nov 03 2013 | 11:04 am
too little randomness is unnatural? – or am I misinterpreting the sentence?
No, I meant both.. Of course, the dialectical nature of randomness/predictability makes it impossible to exclude one from the other.. but generally - experientially - too little randomness is sterile, predictable, dead. There are no straight lines in nature... only the chaotic interplay of perceived organization and apparent randomness. The confluence of the two is the sweet spot of creative intelligence.
I would posit that if you sit by a piano and reach out to play a key, *any* random occurence of a note other than the one you intended to play would be perceived as “unnatural”…
Well.. if we consider the measure of information as a measure of what we don't expect.. and intelligence as our capacity to process the unexpected, then I suppose it depends on who is playing the piano. :) That single note could serve to engender a creative response. Or not. It's when there is one bad note after another that our natural intelligence is truly tested. :D
• Nov 03 2013 | 11:26 am
It’s when there is one bad note after another that our natural intelligence is truly tested. :D
lol :)
I think I've made that patch, though. Is that a good thing? :)
• Nov 03 2013 | 12:21 pm
I think I’ve made that patch, though. Is that a good thing? :)
Story of my life.. hehe
• Nov 03 2013 | 1:01 pm
Thanks guys. I see generative systems Mentioned above. This is interesting to me. Are there any good articles on generative systems in MAX MSP?
Also any other examples are greatly welcome ;)
• Nov 03 2013 | 4:44 pm
i can only warn about using too much random.
just as repetition, randomness is something the human brain will detect very easily.
-110
• Nov 03 2013 | 5:48 pm
Very astute point, Roman - but the difference between repetition and randomness is that repetition is, in large part, musical in itself.
We hear rhythms in clocks and broken bicyclewheel spokes and squeaky shoes... which may have been broken in a pseudo-random occurrence, but it's the periodicity we latch on to.
• Nov 03 2013 | 5:50 pm
Actually, the Turing Machine device discussed in the BEAP thread right now is a good example of using randomness and capturing it, making it repeat. I think it nicely spans the gamut from chaos to music, in some sense.
• Nov 03 2013 | 6:34 pm
repetition is musical? well yes, but not much more than linear randomness.
musically they are almost the same thing, IMO.
repetition == cosine
randomness == white noise
both will be pissing you on sooner or later.
lets create three slightly higher level examples.
1.)
a piece of music which consists of 1 note, C3, played on the piano, repeating every 500 milliseconds, lasting for 10 minutes.
2.)
a piece of music which consists of differently tuned notes, based on linear or normal distributed randomness in a range between C3 and C7, repeating every 500 milliseconds, lasting 10 minutes.
3.)
a piece of music which consists of randomly tuned notes in a range between C3 and C7, randomly switching between piano, marimba, and bells, appearing randomly in a range of 250-750 milliseconds, whose length is randomly somewhere between 8 and 12 minutes.
if you listen to these three songs you will find that they are basically telling you the same story and transporting the same emotions.
the only difference between them is that listening to 1.) will get boring after 2 minutes, to 2.) will get boring at 3 minutes, and song 3.) will be boring after 4 minutes.
-110
• Nov 03 2013 | 6:42 pm
well, that is exactly the point.
because they are neither random nor repetitions. they are chaotic. they are organic.
the sounds your shoes make when you walk are similar to each other, but they are not exact copies.
this is how the chaos, the order of the nature, is built upon, and this is why music should at least contain such patterns in addition to random and copy, in order to be nice to your ears.
-110
• Nov 03 2013 | 7:41 pm
Nice how you avoided the clock example ;)
• Nov 03 2013 | 8:57 pm
damn, he noticed it.
well that is because they modeled the clock rhythm after musical beats.
if music would not have existed, they probably would have ended up with a nonlinear, unpredictable beat when inventing the clock.
look back and see what is been first. linearity, which has been found when playing with maths, is not as old as man clapping with his hands.
the clock is artificial and therefore imperfect. as you know, it has to be corrected every once in a while, because it does not really fit to the universe´s timeline.
• Nov 03 2013 | 10:07 pm
I want some of what you're smoking, Roman! I don't disagree, neccesarily... on a philosophical level.
Anyway; generative. Generative is where it's at. Not linear, not random, but inbetween.
• Nov 03 2013 | 11:12 pm
thanks for sharing your patch WETTERBERG. I'm starting to explore algorithmic approaches to music a bit atm and your patch sparked some ideas for me.
• Nov 03 2013 | 11:14 pm
funny how someone mentioned "generative grammar" in a musical context above. before i knew this term from chomsky only.
• Nov 03 2013 | 11:28 pm
I know I’m not saying anything new, but the guy is just starting out
an it is not so uncommon that at the beginning you dont know eher to start off.
you know that you can produce musical events by setting and replaying them. and you know how to create events in realtime using out-of-the-box modifiers such as random, counter, and simple arithmetics. but this does not yet make a toolset to create music.
so what is the next step?
i believe that one should very early learn that possible rulesets for music (or for math in general) are often, at least partially, are selfcontained and selfgenerating/modifying (there are probably better words for it?).
or in other words: use what they call "analysis". say you have a given melody and want to modify it. you could make decisions upon the note numbers. if input is C3, then transpose it to C4. if input is a chord, insert a rest. randomize pitch, but only for every 5th note. learn how to make useful abstractions and subpatches. modularize everything. and when you do it, dont let maxmsp influence your thinking structure, instead try to build what is in your head.
-110
• Nov 04 2013 | 1:07 am
Roman, I very much agree. Those are the kinds of rules and structures that come to mind when I think of 'algorithmic composition'.
I also think it's important to mention even more transparent and ubiquitous applications of randomness... such as slight deviations of a pitch over time to create a more analog tone or similar uses of distributed 'imperfection' over some range of values.... such that randomness is not distinguished explicitly but perceived implicitly.
• Nov 04 2013 | 1:32 am
Now that's an application I can totally endorse, for what it's worth.
• Nov 04 2013 | 4:03 am
Roman, I had originally heard it from Chomsky as well. Most of the papers that I've read regarding using generative grammars in composition tend to use them in the original way that Chomsky formulated them, just substituting things like pitch and rhythm for linguistic constructs. Pretty fascinating stuff IMO.
• Nov 05 2013 | 1:32 am
it is quite difficult to think of a musical composition as something on a pure symbolic layer such as "grammar", mainly because programming max patches will force you to create interfaces and modules which are not congruent with those symbols.
maybe it would be an interesting project to create a toolset in max, which is such a completely custom grammar thing, ignoring any other paradigms of programming languages, max, math, or traditional musical notation including time (so that it probably not make a realtime app)
-110
• Nov 05 2013 | 3:26 am
There's the classic Lerdahl and Jackendoff book A Generative Theory of Tonal Music that's a good starting point for the idea of grammar in music. (course that's analyzing, not running it forward...)
There are some corpus based composition examples in OpenMusic, IIRC, and they might also be in PWGL, if you're looking for programming tools.