Algorithmic Suggestions

grehan's icon

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.

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

Thanks :)

John's icon

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",
                "text" : "loadmess 72",
                "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",
                                "text" : "loadbang",
                                "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-----------

metamax's icon

Check out Chris Dobrian's blog... http://algocomp.blogspot.com

He has a knack for simplifying complex subjects.

grehan's icon

Cool, thanks guys, thanks for the suggestions, will look into these in my exploration of more algorithms in music ;)

grehan's icon

John for some reason I cant paste your patch.

Wetterberg's icon

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.

grehan's icon

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.

Wetterberg's icon

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.

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

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.

grehan's icon

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.

John's icon

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.

metamax's icon

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?

Wetterberg's icon

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"...

The OP asked about algorithms.. which don’t necessarily entail randomness.

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!

metamax's icon

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

Wetterberg's icon

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? :)

metamax's icon

I think I’ve made that patch, though. Is that a good thing? :)

Story of my life.. hehe

grehan's icon

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 ;)

Roman Thilenius's icon

i can only warn about using too much random.

just as repetition, randomness is something the human brain will detect very easily.

maybe you want to look into this old post: https://cycling74.com/forums/techniques-for-generative-music/

-110

Wetterberg's icon

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.

Wetterberg's icon

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.

Roman Thilenius's icon

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

Roman Thilenius's icon

oh and about your footsteps and bicycle example. :)

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

Wetterberg's icon

Nice how you avoided the clock example ;)

Roman Thilenius's icon

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.

Wetterberg's icon

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.

endless's icon

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.

Roman Thilenius's icon

funny how someone mentioned "generative grammar" in a musical context above. before i knew this term from chomsky only.

Roman Thilenius's icon

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

metamax's icon

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.

Wetterberg's icon

Now that's an application I can totally endorse, for what it's worth.

John's icon

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.

Roman Thilenius's icon

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

Peter McCulloch's icon

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.