Karplus-Strong is easy and fun to mess around with (and a great way to learn) Max. What KP patchers have people made?
Here’s my simple starting template for when I get the itch to futz around with this:
(Patcher JSON)
{
"patcher" : {
"fileversion" : 1,
"appversion" : {
"major" : 8,
"minor" : 6,
"revision" : 2,
"architecture" : "x64",
"modernui" : 1
}
,
"classnamespace" : "box",
"rect" : [ 491.0, 696.0, 581.0, 480.0 ],
"bglocked" : 0,
"openinpresentation" : 0,
"default_fontsize" : 12.0,
"default_fontface" : 0,
"default_fontname" : "Arial",
"gridonopen" : 1,
"gridsize" : [ 15.0, 15.0 ],
"gridsnaponopen" : 1,
"objectsnaponopen" : 1,
"statusbarvisible" : 2,
"toolbarvisible" : 1,
"lefttoolbarpinned" : 0,
"toptoolbarpinned" : 0,
"righttoolbarpinned" : 0,
"bottomtoolbarpinned" : 0,
"toolbars_unpinned_last_save" : 0,
"tallnewobj" : 0,
"boxanimatetime" : 200,
"enablehscroll" : 1,
"enablevscroll" : 1,
"devicewidth" : 0.0,
"description" : "",
"digest" : "",
"tags" : "",
"style" : "",
"subpatcher_template" : "",
"assistshowspatchername" : 0,
"boxes" : [ {
"box" : {
"id" : "obj-74",
"linecount" : 2,
"maxclass" : "comment",
"numinlets" : 1,
"numoutlets" : 0,
"patching_rect" : [ 108.0, 152.0, 82.0, 33.0 ],
"presentation_linecount" : 2,
"text" : "Noise \nTrigger"
}
}
, {
"box" : {
"id" : "obj-73",
"linecount" : 2,
"maxclass" : "comment",
"numinlets" : 1,
"numoutlets" : 0,
"patching_rect" : [ 231.0, 152.0, 82.0, 33.0 ],
"presentation_linecount" : 3,
"text" : "Pitch\n(Delay Time)"
}
}
, {
"box" : {
"floatoutput" : 1,
"id" : "obj-71",
"maxclass" : "slider",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "" ],
"parameter_enable" : 0,
"patching_rect" : [ 209.0, 45.0, 20.0, 140.0 ],
"size" : 20.0
}
}
, {
"box" : {
"id" : "obj-69",
"linecount" : 2,
"maxclass" : "comment",
"numinlets" : 1,
"numoutlets" : 0,
"patching_rect" : [ 362.0, 152.0, 76.0, 33.0 ],
"presentation_linecount" : 2,
"text" : "Dampening\n(Feedback)"
}
}
, {
"box" : {
"id" : "obj-68",
"linecount" : 2,
"maxclass" : "comment",
"numinlets" : 1,
"numoutlets" : 0,
"patching_rect" : [ 493.0, 152.0, 76.0, 33.0 ],
"text" : "Brightness\n(Cutoff)"
}
}
, {
"box" : {
"id" : "obj-64",
"maxclass" : "slider",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "" ],
"parameter_enable" : 0,
"patching_rect" : [ 471.0, 45.0, 20.0, 140.0 ],
"size" : 8000.0
}
}
, {
"box" : {
"id" : "obj-58",
"maxclass" : "newobj",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "signal" ],
"patching_rect" : [ 123.0, 367.0, 58.0, 22.0 ],
"text" : "onepole~"
}
}
, {
"box" : {
"floatoutput" : 1,
"id" : "obj-23",
"maxclass" : "slider",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "" ],
"parameter_enable" : 0,
"patching_rect" : [ 340.0, 45.0, 20.0, 140.0 ],
"size" : 1.0
}
}
, {
"box" : {
"id" : "obj-18",
"maxclass" : "newobj",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "signal" ],
"patching_rect" : [ 209.0, 334.0, 29.5, 22.0 ],
"text" : "*~"
}
}
, {
"box" : {
"id" : "obj-14",
"maxclass" : "newobj",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "signal" ],
"patching_rect" : [ 123.0, 334.0, 49.0, 22.0 ],
"text" : "tapout~"
}
}
, {
"box" : {
"id" : "obj-13",
"maxclass" : "newobj",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "tapconnect" ],
"patching_rect" : [ 123.0, 290.0, 42.0, 22.0 ],
"text" : "tapin~"
}
}
, {
"box" : {
"id" : "obj-9",
"maxclass" : "message",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 76.0, 163.0, 29.5, 22.0 ],
"text" : "1"
}
}
, {
"box" : {
"id" : "obj-6",
"maxclass" : "ezdac~",
"numinlets" : 2,
"numoutlets" : 0,
"patching_rect" : [ 62.0, 482.0, 45.0, 45.0 ]
}
}
, {
"box" : {
"id" : "obj-5",
"maxclass" : "gain~",
"multichannelvariant" : 0,
"numinlets" : 1,
"numoutlets" : 2,
"outlettype" : [ "signal", "" ],
"parameter_enable" : 0,
"patching_rect" : [ 65.0, 308.0, 22.0, 140.0 ]
}
}
, {
"box" : {
"id" : "obj-3",
"maxclass" : "newobj",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "signal" ],
"patching_rect" : [ 65.0, 259.0, 29.5, 22.0 ],
"text" : "*~"
}
}
, {
"box" : {
"id" : "obj-2",
"maxclass" : "newobj",
"numinlets" : 5,
"numoutlets" : 4,
"outlettype" : [ "signal", "signal", "", "" ],
"patching_rect" : [ 76.0, 226.0, 89.0, 22.0 ],
"text" : "adsr~ 0 10 0. 0"
}
}
, {
"box" : {
"id" : "obj-1",
"maxclass" : "newobj",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "signal" ],
"patching_rect" : [ 26.0, 226.0, 44.0, 22.0 ],
"text" : "noise~"
}
}
],
"lines" : [ {
"patchline" : {
"destination" : [ "obj-3", 0 ],
"source" : [ "obj-1", 0 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-14", 0 ],
"source" : [ "obj-13", 0 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-5", 0 ],
"order" : 1,
"source" : [ "obj-14", 0 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-58", 0 ],
"order" : 0,
"source" : [ "obj-14", 0 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-13", 0 ],
"source" : [ "obj-18", 0 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-3", 1 ],
"source" : [ "obj-2", 0 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-18", 1 ],
"source" : [ "obj-23", 0 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-13", 0 ],
"order" : 0,
"source" : [ "obj-3", 0 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-5", 0 ],
"order" : 1,
"source" : [ "obj-3", 0 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-6", 1 ],
"order" : 0,
"source" : [ "obj-5", 0 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-6", 0 ],
"order" : 1,
"source" : [ "obj-5", 0 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-18", 0 ],
"source" : [ "obj-58", 0 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-58", 1 ],
"source" : [ "obj-64", 0 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-14", 0 ],
"source" : [ "obj-71", 0 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-2", 0 ],
"source" : [ "obj-9", 0 ]
}
}
],
"dependency_cache" : [ ],
"autosave" : 0
}
}
but I know people get way more crazy with it.
What weird patchers have you made? What tips for patching in Max? What questions do you have about getting it to work?