{ "patcher" : { "fileversion" : 1, "appversion" : { "major" : 9, "minor" : 1, "revision" : 0, "architecture" : "x64", "modernui" : 1 } , "classnamespace" : "box", "rect" : [ 52.0, 116.0, 470.0, 595.0 ], "gridsize" : [ 15.0, 15.0 ], "assistshowspatchername" : 0, "commentary" : "", "showcommentary" : 0, "boxes" : [ { "box" : { "attr" : "voice/glidemode", "id" : "obj-2", "maxclass" : "attrui", "numinlets" : 1, "numoutlets" : 1, "outlettype" : [ "" ], "parameter_enable" : 0, "patching_rect" : [ 38.325983374696165, 144.666667222976685, 152.348033250607671, 22.0 ], "text_width" : 108.325983374696165 } } , { "box" : { "bubblepoint" : 0.0, "bubbleside" : 2, "bubbleusescolors" : 1, "fontname" : "Lato Light", "id" : "obj-14", "linecount" : 7, "maxclass" : "comment", "numinlets" : 1, "numoutlets" : 0, "patching_rect" : [ 33.5, 461.0, 409.0, 107.0 ], "text" : "For monophonic synth patchers, we sometimes want to control the voice mode for classic glissando/glide/portamento effects. \n\nEven though only a single voice is sounding at once - we can buffer the input to create a range of customised legato modes. \n\nSome of the implementation is also in the synth patcher below the codebox." } } , { "box" : { "attr" : "voice/glissando", "id" : "obj-13", "maxclass" : "attrui", "numinlets" : 1, "numoutlets" : 1, "outlettype" : [ "" ], "parameter_enable" : 0, "patching_rect" : [ 38.325983374696165, 120.666667222976685, 152.348033250607671, 22.0 ], "text_width" : 108.325983374696165 } } , { "box" : { "attr" : "stealmode", "id" : "obj-7", "maxclass" : "attrui", "numinlets" : 1, "numoutlets" : 1, "outlettype" : [ "" ], "parameter_enable" : 0, "patching_rect" : [ 38.325983374696165, 96.666667222976685, 152.348033250607671, 22.0 ], "text_width" : 86.325983374696165 } } , { "box" : { "fontname" : "Lato Light", "id" : "obj-46", "maxclass" : "comment", "numinlets" : 1, "numoutlets" : 0, "patching_rect" : [ 206.49265004136285, 93.666667222976685, 102.0, 21.0 ], "text" : "MIDI Portamento " } } , { "box" : { "appearance" : 1, "id" : "obj-44", "maxclass" : "live.text", "numinlets" : 1, "numoutlets" : 2, "outlettype" : [ "", "" ], "parameter_enable" : 1, "patching_rect" : [ 268.492650041362822, 137.166667222976685, 35.0, 31.0 ], "saved_attribute_attributes" : { "valueof" : { "parameter_enum" : [ "val1", "val2" ], "parameter_longname" : "live.text", "parameter_mmax" : 1, "parameter_modmode" : 0, "parameter_shortname" : "live.text", "parameter_type" : 2 } } , "text" : "off", "texton" : "on", "varname" : "live.text" } } , { "box" : { "id" : "obj-40", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 1, "outlettype" : [ "" ], "patcher" : { "fileversion" : 1, "appversion" : { "major" : 9, "minor" : 1, "revision" : 0, "architecture" : "x64", "modernui" : 1 } , "classnamespace" : "box", "rect" : [ 59.0, 117.0, 477.0, 392.0 ], "gridsize" : [ 15.0, 15.0 ], "assistshowspatchername" : 0, "commentary" : "", "showcommentary" : 0, "boxes" : [ { "box" : { "id" : "obj-1", "linecount" : 2, "maxclass" : "comment", "numinlets" : 1, "numoutlets" : 0, "patching_rect" : [ 322.0, 125.0, 111.0, 33.0 ], "text" : "CC 65 : Portamento on/off" } } , { "box" : { "id" : "obj-27", "linecount" : 3, "maxclass" : "comment", "numinlets" : 1, "numoutlets" : 0, "patching_rect" : [ 322.0, 74.0, 111.0, 47.0 ], "text" : "CC 37 : Portamento glide time (fine) LSB" } } , { "box" : { "id" : "obj-2", "linecount" : 2, "maxclass" : "comment", "numinlets" : 1, "numoutlets" : 0, "patching_rect" : [ 322.0, 36.0, 111.0, 33.0 ], "text" : "CC 5 : Portamento glide time (coarse)" } } , { "box" : { "id" : "obj-36", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 1, "outlettype" : [ "int" ], "patching_rect" : [ 218.5, 100.0, 37.0, 22.0 ], "text" : "* 127" } } , { "box" : { "id" : "obj-35", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 218.5, 136.0, 69.0, 22.0 ], "text" : "prepend 65" } } , { "box" : { "id" : "obj-32", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 123.0, 136.0, 69.0, 22.0 ], "text" : "prepend 37" } } , { "box" : { "id" : "obj-29", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 50.0, 136.0, 63.0, 22.0 ], "text" : "prepend 5" } } , { "box" : { "id" : "obj-23", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 1, "outlettype" : [ "int" ], "patching_rect" : [ 123.0, 100.0, 40.0, 22.0 ], "text" : "& 127" } } , { "box" : { "id" : "obj-19", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 1, "outlettype" : [ "int" ], "patching_rect" : [ 50.0, 100.0, 33.0, 22.0 ], "text" : ">> 7" } } , { "box" : { "comment" : "", "id" : "obj-37", "index" : 1, "maxclass" : "inlet", "numinlets" : 0, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 50.0, 40.0, 30.0, 30.0 ] } } , { "box" : { "comment" : "", "id" : "obj-38", "index" : 2, "maxclass" : "inlet", "numinlets" : 0, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 218.5, 40.0, 30.0, 30.0 ] } } , { "box" : { "comment" : "", "id" : "obj-39", "index" : 1, "maxclass" : "outlet", "numinlets" : 1, "numoutlets" : 0, "patching_rect" : [ 50.0, 329.255371000000025, 30.0, 30.0 ] } } ], "lines" : [ { "patchline" : { "destination" : [ "obj-29", 0 ], "source" : [ "obj-19", 0 ] } } , { "patchline" : { "destination" : [ "obj-32", 0 ], "source" : [ "obj-23", 0 ] } } , { "patchline" : { "destination" : [ "obj-39", 0 ], "source" : [ "obj-29", 0 ] } } , { "patchline" : { "destination" : [ "obj-39", 0 ], "source" : [ "obj-32", 0 ] } } , { "patchline" : { "destination" : [ "obj-39", 0 ], "source" : [ "obj-35", 0 ] } } , { "patchline" : { "destination" : [ "obj-35", 0 ], "source" : [ "obj-36", 0 ] } } , { "patchline" : { "destination" : [ "obj-19", 0 ], "order" : 1, "source" : [ "obj-37", 0 ] } } , { "patchline" : { "destination" : [ "obj-23", 0 ], "order" : 0, "source" : [ "obj-37", 0 ] } } , { "patchline" : { "destination" : [ "obj-36", 0 ], "source" : [ "obj-38", 0 ] } } ] } , "patching_rect" : [ 210.49265004136285, 201.666667222976685, 77.0, 22.0 ], "text" : "p midi" } } , { "box" : { "appearance" : 3, "id" : "obj-31", "maxclass" : "live.dial", "numinlets" : 1, "numoutlets" : 2, "outlettype" : [ "", "float" ], "parameter_enable" : 1, "patching_rect" : [ 210.49265004136285, 121.166667222976685, 50.0, 63.0 ], "saved_attribute_attributes" : { "valueof" : { "parameter_longname" : "glide time course", "parameter_mmax" : 16383.0, "parameter_modmode" : 0, "parameter_shortname" : "glide time", "parameter_type" : 0, "parameter_unitstyle" : 0 } } , "varname" : "live.dial" } } , { "box" : { "id" : "obj-10", "maxclass" : "newobj", "numinlets" : 7, "numoutlets" : 2, "outlettype" : [ "int", "" ], "patching_rect" : [ 123.674016625303835, 248.0, 67.0, 22.0 ], "text" : "midiformat" } } , { "box" : { "id" : "obj-102", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 1, "outlettype" : [ "" ], "patcher" : { "fileversion" : 1, "appversion" : { "major" : 9, "minor" : 1, "revision" : 0, "architecture" : "x64", "modernui" : 1 } , "classnamespace" : "box", "rect" : [ 84.0, 144.0, 640.0, 480.0 ], "gridsize" : [ 15.0, 15.0 ], "assistshowspatchername" : 0, "commentary" : "", "showcommentary" : 0, "boxes" : [ { "box" : { "id" : "obj-5", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 2, "outlettype" : [ "", "" ], "patching_rect" : [ 50.0, 142.0, 38.0, 22.0 ], "text" : "spray" } } , { "box" : { "id" : "obj-94", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 50.0, 100.0, 154.0, 22.0 ], "text" : "jstrigger ([a[0]-1\\, a[1] == 0])" } } , { "box" : { "comment" : "", "id" : "obj-97", "index" : 1, "maxclass" : "inlet", "numinlets" : 0, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 50.0, 40.0, 30.0, 30.0 ] } } , { "box" : { "comment" : "", "id" : "obj-98", "index" : 1, "maxclass" : "outlet", "numinlets" : 1, "numoutlets" : 0, "patching_rect" : [ 50.0, 213.0, 30.0, 30.0 ] } } ], "lines" : [ { "patchline" : { "destination" : [ "obj-98", 0 ], "source" : [ "obj-5", 0 ] } } , { "patchline" : { "destination" : [ "obj-5", 0 ], "source" : [ "obj-94", 0 ] } } , { "patchline" : { "destination" : [ "obj-94", 0 ], "source" : [ "obj-97", 0 ] } } ] } , "patching_rect" : [ 326.325983374696193, 326.0, 101.5, 22.0 ], "text" : "p" } } , { "box" : { "id" : "obj-82", "maxclass" : "toggle", "numinlets" : 1, "numoutlets" : 1, "outlettype" : [ "int" ], "parameter_enable" : 0, "patching_rect" : [ 326.325983374696193, 358.0, 24.0, 24.0 ] } } , { "box" : { "id" : "obj-65", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 2, "outlettype" : [ "", "" ], "patching_rect" : [ 326.325983374696193, 297.0, 99.0, 22.0 ], "text" : "route voicestatus" } } , { "box" : { "hidden" : 1, "id" : "obj-28", "maxclass" : "newobj", "numinlets" : 4, "numoutlets" : 1, "outlettype" : [ "" ], "patcher" : { "fileversion" : 1, "appversion" : { "major" : 9, "minor" : 1, "revision" : 0, "architecture" : "x64", "modernui" : 1 } , "classnamespace" : "box", "rect" : [ 0.0, 0.0, 640.0, 480.0 ], "gridsize" : [ 15.0, 15.0 ], "assistshowspatchername" : 0, "commentary" : "", "showcommentary" : 0, "boxes" : [ { "box" : { "id" : "obj-19", "linecount" : 2, "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 434.0, 100.0, 79.0, 35.0 ], "text" : "prepend voice/release" } } , { "box" : { "id" : "obj-18", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 307.0, 100.0, 125.0, 22.0 ], "text" : "prepend voice/sustain" } } , { "box" : { "id" : "obj-17", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 177.0, 100.0, 119.0, 22.0 ], "text" : "prepend voice/decay" } } , { "box" : { "id" : "obj-14", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 50.0, 100.0, 119.0, 22.0 ], "text" : "prepend voice/attack" } } , { "box" : { "comment" : "", "id" : "obj-23", "index" : 1, "maxclass" : "inlet", "numinlets" : 0, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 50.0, 40.0, 30.0, 30.0 ] } } , { "box" : { "comment" : "", "id" : "obj-24", "index" : 2, "maxclass" : "inlet", "numinlets" : 0, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 177.0, 40.0, 30.0, 30.0 ] } } , { "box" : { "comment" : "", "id" : "obj-25", "index" : 3, "maxclass" : "inlet", "numinlets" : 0, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 307.0, 40.0, 30.0, 30.0 ] } } , { "box" : { "comment" : "", "id" : "obj-26", "index" : 4, "maxclass" : "inlet", "numinlets" : 0, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 434.0, 40.0, 30.0, 30.0 ] } } , { "box" : { "comment" : "", "id" : "obj-27", "index" : 1, "maxclass" : "outlet", "numinlets" : 1, "numoutlets" : 0, "patching_rect" : [ 236.0, 195.0, 30.0, 30.0 ] } } ], "lines" : [ { "patchline" : { "destination" : [ "obj-27", 0 ], "source" : [ "obj-14", 0 ] } } , { "patchline" : { "destination" : [ "obj-27", 0 ], "source" : [ "obj-17", 0 ] } } , { "patchline" : { "destination" : [ "obj-27", 0 ], "source" : [ "obj-18", 0 ] } } , { "patchline" : { "destination" : [ "obj-27", 0 ], "source" : [ "obj-19", 0 ] } } , { "patchline" : { "destination" : [ "obj-14", 0 ], "source" : [ "obj-23", 0 ] } } , { "patchline" : { "destination" : [ "obj-17", 0 ], "source" : [ "obj-24", 0 ] } } , { "patchline" : { "destination" : [ "obj-18", 0 ], "source" : [ "obj-25", 0 ] } } , { "patchline" : { "destination" : [ "obj-19", 0 ], "source" : [ "obj-26", 0 ] } } ] } , "patching_rect" : [ 38.325983374696165, 202.666667222976685, 45.0, 22.0 ], "text" : "p" } } , { "box" : { "attack_time" : 4.259302567452045, "decay_time" : 5311.288525878447217, "id" : "obj-4", "maxclass" : "live.adsrui", "numinlets" : 10, "numoutlets" : 10, "outlettype" : [ "", "", "", "", "", "", "", "", "", "" ], "patching_rect" : [ 38.325983374696165, 168.0, 152.348033250607671, 56.666667222976685 ], "release_time" : 87.383244392842897, "sustain" : 0.670588228710795 } } , { "box" : { "id" : "obj-21", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 8, "outlettype" : [ "", "", "", "int", "int", "", "int", "" ], "patching_rect" : [ 96.825983374696165, 360.0, 217.5, 22.0 ], "text" : "midiparse" } } , { "box" : { "id" : "obj-11", "ignoreclick" : 1, "maxclass" : "kslider", "mode" : 1, "numinlets" : 2, "numoutlets" : 2, "outlettype" : [ "int", "int" ], "parameter_enable" : 0, "patching_rect" : [ 96.825983374696165, 388.0, 336.0, 53.0 ] } } , { "box" : { "id" : "obj-12", "maxclass" : "ezdac~", "numinlets" : 2, "numoutlets" : 0, "patching_rect" : [ 38.325983374696165, 396.0, 45.0, 45.0 ] } } , { "box" : { "id" : "obj-9", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 1, "outlettype" : [ "int" ], "patching_rect" : [ 59.325983374696165, 248.0, 40.0, 22.0 ], "text" : "midiin" } } , { "box" : { "autosave" : 0, "id" : "obj-1", "inletInfo" : { "IOInfo" : [ { "type" : "midi", "index" : -1, "tag" : "", "comment" : "" } ] } , "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 3, "outletInfo" : { "IOInfo" : [ { "type" : "signal", "index" : 1, "tag" : "out1", "comment" : "" } , { "type" : "midi", "index" : -1, "tag" : "", "comment" : "" } ] } , "outlettype" : [ "signal", "int", "list" ], "patcher" : { "fileversion" : 1, "appversion" : { "major" : 9, "minor" : 1, "revision" : 0, "architecture" : "x64", "modernui" : 1 } , "classnamespace" : "rnbo", "rect" : [ 34.0, 100.0, 999.0, 848.0 ], "default_fontname" : "Lato", "gridsize" : [ 15.0, 15.0 ], "assistshowspatchername" : 0, "commentary" : "", "showcommentary" : 0, "title" : "untitled", "boxes" : [ { "box" : { "bubble" : 1, "bubbleusescolors" : 1, "id" : "obj-8", "maxclass" : "comment", "numinlets" : 1, "numoutlets" : 0, "patching_rect" : [ 276.0, 772.799995183944702, 292.0, 25.0 ], "text" : "The implementation for glide is the synth patcher" } } , { "box" : { "id" : "obj-9", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 2, "outlettype" : [ "", "" ], "patching_rect" : [ 449.499996840953827, 90.399996817111969, 284.0, 23.0 ], "rnbo_classname" : "param", "rnbo_extra_attributes" : { "ctlin" : 0.0 } , "rnbo_serial" : 1, "rnbo_uniqueid" : "stealmode", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "value" : { "attrOrProp" : 1, "digest" : "Parameter value", "defaultarg" : 2, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 1, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number", "defaultValue" : "0" } , "normalizedvalue" : { "attrOrProp" : 1, "digest" : "Set value normalized. ", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number" } , "reset" : { "attrOrProp" : 1, "digest" : "Reset param to initial value", "isalias" : 0, "aliases" : [ ], "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bang" } , "normalized" : { "attrOrProp" : 1, "digest" : "Normalized parameter value.", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "number" } , "maximum" : { "attrOrProp" : 2, "digest" : "Maximum value", "isalias" : 0, "aliases" : [ "max" ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 1, "type" : "number", "defaultValue" : "4", "label" : "Maximum", "displayorder" : 2, "disabledInMaxInspector" : 1 } , "max" : { "attrOrProp" : 2, "digest" : "Maximum value", "isalias" : 1, "aliasOf" : "maximum", "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "4", "label" : "Maximum", "displayorder" : 2 } , "minimum" : { "attrOrProp" : 2, "digest" : "Minimum value", "isalias" : 0, "aliases" : [ "min" ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 1, "type" : "number", "defaultValue" : "0", "label" : "Minimum", "displayorder" : 1, "disabledInMaxInspector" : 1 } , "min" : { "attrOrProp" : 2, "digest" : "Minimum value", "isalias" : 1, "aliasOf" : "minimum", "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "0", "label" : "Minimum", "displayorder" : 1 } , "steps" : { "attrOrProp" : 2, "digest" : "Divide the output into a number of discrete steps", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 1, "type" : "number", "defaultValue" : "5", "label" : "Steps", "displayorder" : 8, "disabledInMaxInspector" : 1 } , "exponent" : { "attrOrProp" : 2, "digest" : "Scale values exponentially", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 1, "type" : "number", "defaultValue" : "1", "label" : "Exponent", "displayorder" : 7, "disabledInMaxInspector" : 1 } , "name" : { "attrOrProp" : 2, "digest" : "Name of the parameter", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "label" : "Parameter Name", "mandatory" : 1 } , "enum" : { "attrOrProp" : 2, "digest" : "Use an enumerated output", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "list", "label" : "Enum Values", "displayorder" : 6 } , "displayName" : { "attrOrProp" : 2, "digest" : "DEPRECATED: Use the lower case 'displayname' instead", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 1, "touched" : 0, "type" : "symbol", "label" : "Display Name" } , "displayname" : { "attrOrProp" : 2, "digest" : "A more readable name for the parameter in an external RNBO target", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Display Name", "displayorder" : 14 } , "unit" : { "attrOrProp" : 2, "digest" : "A symbol to describe the unit of the parameter in an external RNBO target", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Unit", "displayorder" : 15 } , "tonormalized" : { "attrOrProp" : 2, "digest" : "Converts a real parameter value to its normalized form", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "label" : "To Normalized Expression", "displayorder" : 10 } , "fromnormalized" : { "attrOrProp" : 2, "digest" : "Converts a normalized parameter into its actual parameter value", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "label" : "From Normalized Expression", "displayorder" : 9 } , "order" : { "attrOrProp" : 2, "digest" : "Order in which initial parameter values will be sent out on patcher load. The order can be numeric or symbolic ('first' and 'last')", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "0", "label" : "Restore Order", "displayorder" : 12 } , "displayorder" : { "attrOrProp" : 2, "digest" : "Order in which parameters will show up in a list of all parameters. The order can be numeric or symbolic ('first' and 'last')", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "-", "label" : "Display Order", "displayorder" : 13 } , "sendinit" : { "attrOrProp" : 2, "digest" : "Send initial value", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "true", "label" : "Send Init", "displayorder" : 4 } , "ctlin" : { "attrOrProp" : 2, "digest" : "MIDI controller number to control this parameter.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "-1", "label" : "MIDI Controller Number.", "displayorder" : 16 } , "meta" : { "attrOrProp" : 2, "digest" : "A JSON formatted string containing metadata for use by the exported code", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Metadata", "displayorder" : 17 } , "nopreset" : { "attrOrProp" : 2, "digest" : "Do not add this value to the preset [DEPRECATED - USE @preset 0 instead].", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 1, "touched" : 0, "type" : "bool", "defaultValue" : "false" } , "preset" : { "attrOrProp" : 2, "digest" : "Add this value to the preset.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "true", "label" : "Include In Preset", "displayorder" : 11 } } , "inputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "defaultarg" : 2, "hot" : 1, "docked" : 0 } , { "name" : "normalizedvalue", "type" : "number", "digest" : "Set value normalized. ", "docked" : 0 } ], "outputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "defaultarg" : 2, "hot" : 1, "docked" : 0 } , { "name" : "normalized", "type" : "number", "digest" : "Normalized parameter value.", "docked" : 0 } ], "helpname" : "param", "aliasOf" : "param", "classname" : "param", "operator" : 0, "versionId" : -1661410411, "changesPatcherIO" : 0 } , "text" : "param stealmode @enum highest lowest first last off", "varname" : "stealmode" } } , { "box" : { "fontname" : "Lato Light", "fontsize" : 14.0, "id" : "obj-5", "maxclass" : "comment", "numinlets" : 1, "numoutlets" : 0, "patching_rect" : [ 18.400000095367432, 54.400000035762787, 367.0, 23.0 ], "text" : "Custom Voice modes with Codebox : Mono legato modes" } } , { "box" : { "fontname" : "Lato", "fontsize" : 24.0, "id" : "obj-92", "maxclass" : "comment", "numinlets" : 1, "numoutlets" : 0, "patching_rect" : [ 18.400000095367432, 17.400000035762787, 236.0, 35.0 ], "text" : "RNBO : Polyphony " } } , { "box" : { "id" : "obj-91", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 0, "patching_rect" : [ 70.000001430511475, 720.199995398521423, 49.0, 23.0 ], "rnbo_classname" : "midiout", "rnbo_serial" : 1, "rnbo_uniqueid" : "midiout_obj-91", "text" : "midiout" } } , { "box" : { "id" : "obj-2", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 0, "patching_rect" : [ 247.400000095367432, 815.799995183944702, 111.0, 23.0 ], "rnbo_classname" : "outport", "rnbo_serial" : 1, "rnbo_uniqueid" : "outport_obj-2", "text" : "outport voicestatus" } } , { "box" : { "code" : "// Even though only one voice is sounding at once\r\nconst POLYPHONY = 1;\r\n// we can buffer the input to create customised legato modes. \r\nconst NOTEBUFFERSIZE = 128;\r\n\r\nconst MIDINoteStateOff = 0;\nconst MIDINoteStateOn = 1;\r\n\r\nconst MIDINoteOffMask = 0x80;\nconst MIDINoteOnMask = 0x90;\n\r\n// ----- noteBuffer\r\n// 0 ... voice index (>= 1 ... active, 0 ... muted)\r\n// 1 ... note number (MIDI pitch)\r\n// 2 ... velocity\r\n// 3 ... last note on time\r\n// 4 ... MIDI channel\r\n\r\n@state noteBuffer = new FixedNumberArray(NOTEBUFFERSIZE, 5);\n@state parser = new midiparse();\r\n@state mode = 0;\r\n\r\nfunction listin3(v) {\t\r\n\t// NB there isn't currently a method to free the voice \r\n // if the note naturally ends while the note is still held ie: no sustain. \r\n // - both silencedetector and adsr~ wait for the noteoff event\r\n // this means we don't do anything here, it is already handled.\r\n}\r\n\r\nfunction noteBufferIndex(pitch, channel) {\r\n\tfor(let i = 0; i < NOTEBUFFERSIZE; i++) {\r\n\t\tif (noteBuffer[i][1] == pitch && noteBuffer[i][4] == channel) {\r\n\t\t\treturn i;\r\n\t\t}\r\n\t}\r\n\treturn -1;\r\n}\r\n\r\nfunction addBufferedNote(pitch, velocity, channel) {\r\n\tlet existingNote = noteBufferIndex(pitch, channel);\r\n\tif (existingNote > -1) {\r\n\t\t// update the velocity of the existing note\r\n\t\tpost(\"updating existing note\", pitch, velocity, channel);\r\n\t\tnoteBuffer[existingNote][2] = velocity;\r\n\t\treturn -1;\r\n\t}\r\n\r\n\tfor(let i = 0; i < NOTEBUFFERSIZE; i++) {\r\n\t\tif (noteBuffer[i][1] == 0) {\r\n\t\t\tpost(\"adding buffered note\", pitch, velocity, channel);\r\n\t\t\tnoteBuffer[i][0] = assignVoice(i);\r\n \tnoteBuffer[i][1] = pitch;\r\n\t\t\tnoteBuffer[i][2] = velocity;\r\n\t\t\tnoteBuffer[i][3] = currenttime();\r\n\t\t\tnoteBuffer[i][4] = channel;\r\n\t\t\treturn i;\r\n\t\t}\r\n\t}\r\n\treturn -1;\r\n}\r\n\r\nfunction removeBufferedNote(pitch, channel) {\r\n\tpost(\"removing buffered note\", pitch, channel);\r\n\tfor(let i = 0; i < NOTEBUFFERSIZE; i++) {\r\n\t\tif (noteBuffer[i][1] == pitch &&\r\n noteBuffer[i][4] == channel) {\r\n\t\t\t\r\n\t\t\tlet voiceIndex = noteBuffer[i][0];\r\n\t\t\tlet notePitch = noteBuffer[i][1];\r\n\t\t\tlet noteChannel = noteBuffer[i][4];\r\n\t\t\t\r\n\t\t\t// remove note from the notebuffer\r\n\t\t\tnoteBuffer[i][0] = 0;\r\n\t\t\tnoteBuffer[i][1] = 0;\r\n\t\t\tnoteBuffer[i][2] = 0;\r\n\t\t\tnoteBuffer[i][3] = 0;\r\n\t\t\tnoteBuffer[i][4] = 0;\r\n\t\t\t\t\t\r\n\t\t\t// if this note was assigned to a voice\r\n\t\t\t// we need to send the noteoff and clear the voice\t\t\t\r\n\t\t\tif (voiceIndex > 0) {\r\n\t\t\t\tsendNoteOff(voiceIndex, notePitch, noteChannel);\r\n\t\t\t\tlet nextNote = findNextSuitableBufferedNote();\r\n\t\t\t\tif(nextNote > -1) {\r\n\t\t\t\t\tlet nextVoiceIdx = assignVoice(nextNote);\r\n\t\t\t\t\tnoteBuffer[nextNote][0] = nextVoiceIdx;\r\n\t\t\t\t\tsendNoteOn(nextVoiceIdx, noteBuffer[nextNote][1], noteBuffer[nextNote][2], noteBuffer[nextNote][4]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn i;\t\r\n\t\t}\r\n\t}\r\n\treturn -1;\r\n}\r\n\r\nfunction findNextSuitableBufferedNote() {\r\n\tlet targetValue = 0;\r\n\tlet bufferTarget = 0 - 1;\r\n\t// modes 0,1 check against pitch, 2,3 check against time\r\n\tlet targetValueIndex = (mode >= 2) ? 3 : 1; \r\n\tfor(let i = 0; i < NOTEBUFFERSIZE; i++) {\r\n\t\tif (noteBuffer[i][0] == 0 && noteBuffer[i][targetValueIndex] > 0) {\r\n\t\t\tlet candidateValue = noteBuffer[i][targetValueIndex];\r\n\t\t\tif (targetValue == 0) {\r\n\t\t\t\ttargetValue = candidateValue;\r\n\t\t\t\tbufferTarget = i;\r\n\t\t\t\tcontinue;\r\n }\r\n\r\n\t\t\tif (stealMode(candidateValue, targetValue)) {\r\n\t\t\t\ttargetValue = candidateValue;\r\n\t\t\t\tbufferTarget = i;\r\n\t\t\t\tcontinue;\r\n\t\t\t}\t\t\t\r\n\t\t}\r\n\t}\r\n\treturn bufferTarget;\r\n}\r\n\r\nfunction sendNoteOn(voiceTarget, pitch, velocity, channel) {\n // send mute state\n listout2 = [ voiceTarget, 0 ];\n // set target\n out3 = voiceTarget;\n \n // send midi values out\n out1 = MIDINoteOnMask | channel;\n out1 = pitch;\n out1 = velocity; \t\r\n}\r\n\r\nfunction sendNoteOff(voiceTarget, pitch, channel) {\t\r\n\t// set target\r\n\tout3 = voiceTarget; \n // send out MIDI\n out1 = MIDI_NoteOffMask | channel;\n out1 = pitch;\n out1 = 64; // default note off velocity\n}\r\n\r\nfunction stealMode(candidateValue, targetValue) {\r\n\tlet suitable;\r\n\tswitch (mode) {\r\n\t\tcase 0: // higher note steals\r\n\t\t\tsuitable = candidateValue > targetValue;\r\n\t\t\tbreak;\r\n\t\tcase 1: // lower note steals\r\n\t\t\tsuitable = candidateValue < targetValue;\r\n\t\t\tbreak;\r\n\t\tcase 2: // FIFO\r\n\t\t\tsuitable = candidateValue < targetValue;\r\n\t\t\tbreak;\r\n\t\tcase 3: // LIFO\r\n\t\t\tsuitable = candidateValue > targetValue;\r\n\t\t\tbreak;\r\n\t\tdefault: // pass\r\n\t\t\tsuitable = false;\r\n\t}\r\n\treturn suitable;\r\n}\r\n\r\n\r\nfunction assignVoice(bufferedNoteIndex) {\r\n\t\r\n\tlet voiceTarget = 1;\r\n\tlet bufferTarget = 0 - 1;\r\n\t// modes 0,1 check against pitch, 2,3 check against time\r\n\tlet targetValue = 0;\r\n\tlet targetValueIndex = (mode >= 2) ? 3 : 1; \r\n\t\r\n // find the next available voice by determining if there are available voices \r\n\t// or clearing the most suitable note (by mode)\r\n\tfor(let i = 0; i < POLYPHONY; i++) {\r\n\t\tlet candidateVoiceIndex = i + 1;\r\n\t\tfor(let j = 0; j < NOTEBUFFERSIZE; j++) {\r\n\t\t\tif (noteBuffer[j][0] == candidateVoiceIndex) {\r\n\t\t\t\tif (targetValue == 0) {\r\n\t\t\t\t\ttargetValue = noteBuffer[j][targetValueIndex];\r\n\t\t\t\t\tbufferTarget = j;\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet candidateValue = noteBuffer[j][targetValueIndex];\r\n\r\n\t\t\t\tif (stealMode(candidateValue, targetValue)) {\r\n\t\t\t\t\tvoiceTarget = candidateVoiceIndex;\r\n\t\t\t\t\ttargetValue = candidateValue;\r\n\t\t\t\t\tbufferTarget = j;\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t// if there is a voiceTarget to clear, clear it unless stealmode == off\r\n\tif (bufferTarget > -1) {\r\n\t\tif (mode != 4) { \r\n \t\tsendNoteOff(voiceTarget, noteBuffer[bufferTarget][1], noteBuffer[bufferTarget][4]);\r\n\t\t\t// set the voiceState to zero but keep it in the noteBuffer \r\n\t\t\t// it will be removed completely when there is a noteoff from the controller\r\n\t\t\tnoteBuffer[bufferTarget][0] = 0;\r\n\t\t} else {\r\n\t\t\tvoiceTarget = 0;\r\n\t\t}\t\r\n }\r\n\t\t\t\t\r\n\treturn voiceTarget;\r\n}\r\n\r\n\r\nlet midistate = parser.next(in1);\nlet messageType = midistate[0];\r\nmode = in2;\r\n\nlet status = midistate[midistate.length - 3];\nlet byte1 = midistate[midistate.length - 2];\nlet byte2 = midistate[midistate.length - 1];\n\r\nswitch (messageType) {\r\n\tcase -1:\r\n\t\t// nothing detected\r\n\t\tbreak;\n\tcase 0:\t\t\n\t{\t\r\n\t\t// note on or off\n \tlet pitch = midistate[1];\n let velocity = midistate[2];\n let channel = midistate[3];\n\n let isNoteOn = velocity != 0;\r\n\t\t\n if (isNoteOn) {\r\n\t\t\tlet bufferedNote = addBufferedNote(pitch, velocity, channel);\r\n\t\t\tif (bufferedNote > -1) {\r\n\t\t\t\tlet voiceTarget = noteBuffer[bufferedNote][0];\r\n\t\t\t\tif (voiceTarget > 0) {\r\n\t\t\t\t\tsendNoteOn(voiceTarget, pitch, velocity, channel);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tremoveBufferedNote(pitch, channel);\r\n\t\t}\t\r\n\t\tbreak;\r\n\t}\r\n\tdefault:\r\n\t // set target\n out3 = 0;\n\r\n\t\t// default behavior is just forwarding MIDI to everyone\r\n\t\tout1 = status;\r\n\t\tout1 = byte1;\r\n\t\tout1 = byte2;\r\n}\n", "fontface" : 0, "fontname" : "", "fontsize" : 12.0, "id" : "obj-17", "maxclass" : "codebox", "numinlets" : 3, "numoutlets" : 3, "outlettype" : [ "", "", "" ], "patching_rect" : [ 34.400000095367432, 127.599996626377106, 849.199993491172791, 571.799998879432678 ], "rnbo_classname" : "codebox", "rnbo_extra_attributes" : { "safemath" : 1, "code" : "// Even though only one voice is sounding at once\r\nconst POLYPHONY = 1;\r\n// we can buffer the input to create customised legato modes. \r\nconst NOTEBUFFERSIZE = 128;\r\n\r\nconst MIDINoteStateOff = 0;\nconst MIDINoteStateOn = 1;\r\n\r\nconst MIDINoteOffMask = 0x80;\nconst MIDINoteOnMask = 0x90;\n\r\n// ----- noteBuffer\r\n// 0 ... voice index (>= 1 ... active, 0 ... muted)\r\n// 1 ... note number (MIDI pitch)\r\n// 2 ... velocity\r\n// 3 ... last note on time\r\n// 4 ... MIDI channel\r\n\r\n@state noteBuffer = new FixedNumberArray(NOTEBUFFERSIZE, 5);\n@state parser = new midiparse();\r\n@state mode = 0;\r\n\r\nfunction listin3(v) {\t\r\n\t// NB there isn't currently a method to free the voice \r\n // if the note naturally ends while the note is still held ie: no sustain. \r\n // - both silencedetector and adsr~ wait for the noteoff event\r\n // this means we don't do anything here, it is already handled.\r\n}\r\n\r\nfunction noteBufferIndex(pitch, channel) {\r\n\tfor(let i = 0; i < NOTEBUFFERSIZE; i++) {\r\n\t\tif (noteBuffer[i][1] == pitch && noteBuffer[i][4] == channel) {\r\n\t\t\treturn i;\r\n\t\t}\r\n\t}\r\n\treturn -1;\r\n}\r\n\r\nfunction addBufferedNote(pitch, velocity, channel) {\r\n\tlet existingNote = noteBufferIndex(pitch, channel);\r\n\tif (existingNote > -1) {\r\n\t\t// update the velocity of the existing note\r\n\t\tpost(\"updating existing note\", pitch, velocity, channel);\r\n\t\tnoteBuffer[existingNote][2] = velocity;\r\n\t\treturn -1;\r\n\t}\r\n\r\n\tfor(let i = 0; i < NOTEBUFFERSIZE; i++) {\r\n\t\tif (noteBuffer[i][1] == 0) {\r\n\t\t\tpost(\"adding buffered note\", pitch, velocity, channel);\r\n\t\t\tnoteBuffer[i][0] = assignVoice(i);\r\n \tnoteBuffer[i][1] = pitch;\r\n\t\t\tnoteBuffer[i][2] = velocity;\r\n\t\t\tnoteBuffer[i][3] = currenttime();\r\n\t\t\tnoteBuffer[i][4] = channel;\r\n\t\t\treturn i;\r\n\t\t}\r\n\t}\r\n\treturn -1;\r\n}\r\n\r\nfunction removeBufferedNote(pitch, channel) {\r\n\tpost(\"removing buffered note\", pitch, channel);\r\n\tfor(let i = 0; i < NOTEBUFFERSIZE; i++) {\r\n\t\tif (noteBuffer[i][1] == pitch &&\r\n noteBuffer[i][4] == channel) {\r\n\t\t\t\r\n\t\t\tlet voiceIndex = noteBuffer[i][0];\r\n\t\t\tlet notePitch = noteBuffer[i][1];\r\n\t\t\tlet noteChannel = noteBuffer[i][4];\r\n\t\t\t\r\n\t\t\t// remove note from the notebuffer\r\n\t\t\tnoteBuffer[i][0] = 0;\r\n\t\t\tnoteBuffer[i][1] = 0;\r\n\t\t\tnoteBuffer[i][2] = 0;\r\n\t\t\tnoteBuffer[i][3] = 0;\r\n\t\t\tnoteBuffer[i][4] = 0;\r\n\t\t\t\t\t\r\n\t\t\t// if this note was assigned to a voice\r\n\t\t\t// we need to send the noteoff and clear the voice\t\t\t\r\n\t\t\tif (voiceIndex > 0) {\r\n\t\t\t\tsendNoteOff(voiceIndex, notePitch, noteChannel);\r\n\t\t\t\tlet nextNote = findNextSuitableBufferedNote();\r\n\t\t\t\tif(nextNote > -1) {\r\n\t\t\t\t\tlet nextVoiceIdx = assignVoice(nextNote);\r\n\t\t\t\t\tnoteBuffer[nextNote][0] = nextVoiceIdx;\r\n\t\t\t\t\tsendNoteOn(nextVoiceIdx, noteBuffer[nextNote][1], noteBuffer[nextNote][2], noteBuffer[nextNote][4]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn i;\t\r\n\t\t}\r\n\t}\r\n\treturn -1;\r\n}\r\n\r\nfunction findNextSuitableBufferedNote() {\r\n\tlet targetValue = 0;\r\n\tlet bufferTarget = 0 - 1;\r\n\t// modes 0,1 check against pitch, 2,3 check against time\r\n\tlet targetValueIndex = (mode >= 2) ? 3 : 1; \r\n\tfor(let i = 0; i < NOTEBUFFERSIZE; i++) {\r\n\t\tif (noteBuffer[i][0] == 0 && noteBuffer[i][targetValueIndex] > 0) {\r\n\t\t\tlet candidateValue = noteBuffer[i][targetValueIndex];\r\n\t\t\tif (targetValue == 0) {\r\n\t\t\t\ttargetValue = candidateValue;\r\n\t\t\t\tbufferTarget = i;\r\n\t\t\t\tcontinue;\r\n }\r\n\r\n\t\t\tif (stealMode(candidateValue, targetValue)) {\r\n\t\t\t\ttargetValue = candidateValue;\r\n\t\t\t\tbufferTarget = i;\r\n\t\t\t\tcontinue;\r\n\t\t\t}\t\t\t\r\n\t\t}\r\n\t}\r\n\treturn bufferTarget;\r\n}\r\n\r\nfunction sendNoteOn(voiceTarget, pitch, velocity, channel) {\n // send mute state\n listout2 = [ voiceTarget, 0 ];\n // set target\n out3 = voiceTarget;\n \n // send midi values out\n out1 = MIDINoteOnMask | channel;\n out1 = pitch;\n out1 = velocity; \t\r\n}\r\n\r\nfunction sendNoteOff(voiceTarget, pitch, channel) {\t\r\n\t// set target\r\n\tout3 = voiceTarget; \n // send out MIDI\n out1 = MIDI_NoteOffMask | channel;\n out1 = pitch;\n out1 = 64; // default note off velocity\n}\r\n\r\nfunction stealMode(candidateValue, targetValue) {\r\n\tlet suitable;\r\n\tswitch (mode) {\r\n\t\tcase 0: // higher note steals\r\n\t\t\tsuitable = candidateValue > targetValue;\r\n\t\t\tbreak;\r\n\t\tcase 1: // lower note steals\r\n\t\t\tsuitable = candidateValue < targetValue;\r\n\t\t\tbreak;\r\n\t\tcase 2: // FIFO\r\n\t\t\tsuitable = candidateValue < targetValue;\r\n\t\t\tbreak;\r\n\t\tcase 3: // LIFO\r\n\t\t\tsuitable = candidateValue > targetValue;\r\n\t\t\tbreak;\r\n\t\tdefault: // pass\r\n\t\t\tsuitable = false;\r\n\t}\r\n\treturn suitable;\r\n}\r\n\r\n\r\nfunction assignVoice(bufferedNoteIndex) {\r\n\t\r\n\tlet voiceTarget = 1;\r\n\tlet bufferTarget = 0 - 1;\r\n\t// modes 0,1 check against pitch, 2,3 check against time\r\n\tlet targetValue = 0;\r\n\tlet targetValueIndex = (mode >= 2) ? 3 : 1; \r\n\t\r\n // find the next available voice by determining if there are available voices \r\n\t// or clearing the most suitable note (by mode)\r\n\tfor(let i = 0; i < POLYPHONY; i++) {\r\n\t\tlet candidateVoiceIndex = i + 1;\r\n\t\tfor(let j = 0; j < NOTEBUFFERSIZE; j++) {\r\n\t\t\tif (noteBuffer[j][0] == candidateVoiceIndex) {\r\n\t\t\t\tif (targetValue == 0) {\r\n\t\t\t\t\ttargetValue = noteBuffer[j][targetValueIndex];\r\n\t\t\t\t\tbufferTarget = j;\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet candidateValue = noteBuffer[j][targetValueIndex];\r\n\r\n\t\t\t\tif (stealMode(candidateValue, targetValue)) {\r\n\t\t\t\t\tvoiceTarget = candidateVoiceIndex;\r\n\t\t\t\t\ttargetValue = candidateValue;\r\n\t\t\t\t\tbufferTarget = j;\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t// if there is a voiceTarget to clear, clear it unless stealmode == off\r\n\tif (bufferTarget > -1) {\r\n\t\tif (mode != 4) { \r\n \t\tsendNoteOff(voiceTarget, noteBuffer[bufferTarget][1], noteBuffer[bufferTarget][4]);\r\n\t\t\t// set the voiceState to zero but keep it in the noteBuffer \r\n\t\t\t// it will be removed completely when there is a noteoff from the controller\r\n\t\t\tnoteBuffer[bufferTarget][0] = 0;\r\n\t\t} else {\r\n\t\t\tvoiceTarget = 0;\r\n\t\t}\t\r\n }\r\n\t\t\t\t\r\n\treturn voiceTarget;\r\n}\r\n\r\n\r\nlet midistate = parser.next(in1);\nlet messageType = midistate[0];\r\nmode = in2;\r\n\nlet status = midistate[midistate.length - 3];\nlet byte1 = midistate[midistate.length - 2];\nlet byte2 = midistate[midistate.length - 1];\n\r\nswitch (messageType) {\r\n\tcase -1:\r\n\t\t// nothing detected\r\n\t\tbreak;\n\tcase 0:\t\t\n\t{\t\r\n\t\t// note on or off\n \tlet pitch = midistate[1];\n let velocity = midistate[2];\n let channel = midistate[3];\n\n let isNoteOn = velocity != 0;\r\n\t\t\n if (isNoteOn) {\r\n\t\t\tlet bufferedNote = addBufferedNote(pitch, velocity, channel);\r\n\t\t\tif (bufferedNote > -1) {\r\n\t\t\t\tlet voiceTarget = noteBuffer[bufferedNote][0];\r\n\t\t\t\tif (voiceTarget > 0) {\r\n\t\t\t\t\tsendNoteOn(voiceTarget, pitch, velocity, channel);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tremoveBufferedNote(pitch, channel);\r\n\t\t}\t\r\n\t\tbreak;\r\n\t}\r\n\tdefault:\r\n\t // set target\n out3 = 0;\n\r\n\t\t// default behavior is just forwarding MIDI to everyone\r\n\t\tout1 = status;\r\n\t\tout1 = byte1;\r\n\t\tout1 = byte2;\r\n}\n", "hot" : 0, "nocache" : 0 } , "rnbo_serial" : 3, "rnbo_uniqueid" : "codebox_obj-17", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "reset" : { "attrOrProp" : 1, "digest" : "Reset all state and params to initial values", "isalias" : 0, "aliases" : [ ], "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bang" } , "in1" : { "attrOrProp" : 1, "digest" : "in1", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number" } , "in2" : { "attrOrProp" : 1, "digest" : "in2", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number" } , "in3" : { "attrOrProp" : 1, "digest" : "in3", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "list" } , "out1" : { "attrOrProp" : 1, "digest" : "out1", "isalias" : 0, "aliases" : [ ], "settable" : 0, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "number" } , "out2" : { "attrOrProp" : 1, "digest" : "out2", "isalias" : 0, "aliases" : [ ], "settable" : 0, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "list" } , "out3" : { "attrOrProp" : 1, "digest" : "out3", "isalias" : 0, "aliases" : [ ], "settable" : 0, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "number" } , "expr" : { "attrOrProp" : 2, "digest" : "expr", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "doNotShowInMaxInspector" : 1 } , "hot" : { "attrOrProp" : 2, "digest" : "Trigger computation on all inlets.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "false" } , "safemath" : { "attrOrProp" : 2, "digest" : "Use safe math expressions (e.g.: division by 0 will not crash).", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "true" } , "nocache" : { "attrOrProp" : 2, "digest" : "Do not use parsing cache. This is only useful with very very big code sizes. Code generation will then take a looooong time.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "false" } } , "inputs" : [ { "name" : "in1", "type" : "number", "digest" : "in1", "hot" : 1, "docked" : 0 } , { "name" : "in2", "type" : "number", "digest" : "in2", "docked" : 0 } , { "name" : "in3", "type" : "list", "digest" : "in3", "docked" : 0 } ], "outputs" : [ { "name" : "out1", "type" : "number", "digest" : "out1", "docked" : 0 } , { "name" : "out2", "type" : "list", "digest" : "out2", "docked" : 0 } , { "name" : "out3", "type" : "number", "digest" : "out3", "docked" : 0 } ], "helpname" : "codebox", "aliasOf" : "expr", "classname" : "codebox", "operator" : 0, "versionId" : 835263063, "changesPatcherIO" : 0 } } } , { "box" : { "id" : "obj-14", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 0, "patching_rect" : [ 34.400000095367432, 815.799995183944702, 43.0, 23.0 ], "rnbo_classname" : "out~", "rnbo_serial" : 1, "rnbo_uniqueid" : "out~_obj-14", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "in1" : { "attrOrProp" : 1, "digest" : "signal sent to outlet with index 1", "isalias" : 0, "aliases" : [ ], "settable" : 0, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "signal" } , "index" : { "attrOrProp" : 2, "digest" : "outlet number", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "mandatory" : 1 } , "comment" : { "attrOrProp" : 2, "digest" : "mouse over comment", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol" } , "meta" : { "attrOrProp" : 2, "digest" : "A JSON formatted string containing metadata for use by the exported code", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Metadata", "displayorder" : 3 } } , "inputs" : [ { "name" : "in1", "type" : "signal", "digest" : "signal sent to outlet with index 1", "displayName" : "", "hot" : 1, "docked" : 0 } ], "outputs" : [ ], "helpname" : "out~", "aliasOf" : "out~", "classname" : "out~", "operator" : 0, "versionId" : 1989326771, "changesPatcherIO" : 1 } , "text" : "out~ 1" } } , { "box" : { "id" : "obj-3", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 34.400000095367432, 90.399996817111969, 40.0, 23.0 ], "rnbo_classname" : "midiin", "rnbo_serial" : 1, "rnbo_uniqueid" : "midiin_obj-3", "text" : "midiin" } } , { "box" : { "id" : "obj-1", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 2, "outlettype" : [ "signal", "" ], "patcher" : { "fileversion" : 1, "appversion" : { "major" : 9, "minor" : 1, "revision" : 0, "architecture" : "x64", "modernui" : 1 } , "classnamespace" : "rnbo", "rect" : [ 47.0, 105.0, 1074.0, 814.0 ], "default_fontname" : "Lato", "gridsize" : [ 15.0, 15.0 ], "assistshowspatchername" : 0, "commentary" : "", "showcommentary" : 0, "title" : "voice", "boxes" : [ { "box" : { "id" : "obj-9", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 202.5, 547.400000035762787, 29.5, 23.0 ], "rnbo_classname" : "+", "rnbo_serial" : 1, "rnbo_uniqueid" : "+_obj-9", "text" : "+ 1" } } , { "box" : { "id" : "obj-44", "linecount" : 2, "maxclass" : "comment", "numinlets" : 1, "numoutlets" : 0, "patching_rect" : [ 202.5, 470.400000035762787, 221.0, 35.0 ], "text" : "We can convert back to midi and round the input to create a glissando effect" } } , { "box" : { "id" : "obj-42", "maxclass" : "newobj", "numinlets" : 3, "numoutlets" : 1, "outlettype" : [ "signal" ], "patching_rect" : [ 25.0, 604.400000035762787, 74.0, 23.0 ], "rnbo_classname" : "selector~", "rnbo_serial" : 1, "rnbo_uniqueid" : "selector~_obj-42", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "onoff" : { "attrOrProp" : 1, "digest" : "Turns Input Off or Routes to Output", "defaultarg" : 2, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number", "defaultValue" : "1" } , "input1" : { "attrOrProp" : 1, "digest" : "input1", "isalias" : 0, "aliases" : [ ], "settable" : 0, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "signal" } , "input2" : { "attrOrProp" : 1, "digest" : "input2", "isalias" : 0, "aliases" : [ ], "settable" : 0, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "signal" } , "out" : { "attrOrProp" : 1, "digest" : "Output", "isalias" : 0, "aliases" : [ ], "settable" : 0, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "signal" } , "ramptime" : { "attrOrProp" : 1, "digest" : "Sets the ramp time to use for fading connections in milliseconds.", "defaultarg" : 3, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number" } , "choices" : { "attrOrProp" : 2, "digest" : "Number of inputs", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "1" } } , "inputs" : [ { "name" : "onoff", "type" : "auto", "digest" : "Turns Input Off or Routes to Output", "defaultarg" : 2, "hot" : 1, "docked" : 0 } , { "name" : "input1", "type" : "signal", "digest" : "input1", "docked" : 0 } , { "name" : "input2", "type" : "signal", "digest" : "input2", "docked" : 0 } ], "outputs" : [ { "name" : "out", "type" : "signal", "digest" : "Output", "docked" : 0 } ], "helpname" : "selector~", "aliasOf" : "selector~", "classname" : "selector~", "operator" : 0, "versionId" : 86427811, "changesPatcherIO" : 0 } , "text" : "selector~ 2" } } , { "box" : { "id" : "obj-34", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 2, "outlettype" : [ "", "" ], "patching_rect" : [ 202.5, 515.400000035762787, 170.0, 23.0 ], "rnbo_classname" : "param", "rnbo_extra_attributes" : { "ctlin" : 0.0 } , "rnbo_serial" : 1, "rnbo_uniqueid" : "glissando", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "value" : { "attrOrProp" : 1, "digest" : "Parameter value", "defaultarg" : 2, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 1, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number", "defaultValue" : "0" } , "normalizedvalue" : { "attrOrProp" : 1, "digest" : "Set value normalized. ", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number" } , "reset" : { "attrOrProp" : 1, "digest" : "Reset param to initial value", "isalias" : 0, "aliases" : [ ], "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bang" } , "normalized" : { "attrOrProp" : 1, "digest" : "Normalized parameter value.", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "number" } , "maximum" : { "attrOrProp" : 2, "digest" : "Maximum value", "isalias" : 0, "aliases" : [ "max" ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 1, "type" : "number", "defaultValue" : "1", "label" : "Maximum", "displayorder" : 2, "disabledInMaxInspector" : 1 } , "max" : { "attrOrProp" : 2, "digest" : "Maximum value", "isalias" : 1, "aliasOf" : "maximum", "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "1", "label" : "Maximum", "displayorder" : 2 } , "minimum" : { "attrOrProp" : 2, "digest" : "Minimum value", "isalias" : 0, "aliases" : [ "min" ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 1, "type" : "number", "defaultValue" : "0", "label" : "Minimum", "displayorder" : 1, "disabledInMaxInspector" : 1 } , "min" : { "attrOrProp" : 2, "digest" : "Minimum value", "isalias" : 1, "aliasOf" : "minimum", "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "0", "label" : "Minimum", "displayorder" : 1 } , "steps" : { "attrOrProp" : 2, "digest" : "Divide the output into a number of discrete steps", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 1, "type" : "number", "defaultValue" : "2", "label" : "Steps", "displayorder" : 8, "disabledInMaxInspector" : 1 } , "exponent" : { "attrOrProp" : 2, "digest" : "Scale values exponentially", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 1, "type" : "number", "defaultValue" : "1", "label" : "Exponent", "displayorder" : 7, "disabledInMaxInspector" : 1 } , "name" : { "attrOrProp" : 2, "digest" : "Name of the parameter", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "label" : "Parameter Name", "mandatory" : 1 } , "enum" : { "attrOrProp" : 2, "digest" : "Use an enumerated output", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "list", "label" : "Enum Values", "displayorder" : 6 } , "displayName" : { "attrOrProp" : 2, "digest" : "DEPRECATED: Use the lower case 'displayname' instead", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 1, "touched" : 0, "type" : "symbol", "label" : "Display Name" } , "displayname" : { "attrOrProp" : 2, "digest" : "A more readable name for the parameter in an external RNBO target", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Display Name", "displayorder" : 14 } , "unit" : { "attrOrProp" : 2, "digest" : "A symbol to describe the unit of the parameter in an external RNBO target", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Unit", "displayorder" : 15 } , "tonormalized" : { "attrOrProp" : 2, "digest" : "Converts a real parameter value to its normalized form", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "label" : "To Normalized Expression", "displayorder" : 10 } , "fromnormalized" : { "attrOrProp" : 2, "digest" : "Converts a normalized parameter into its actual parameter value", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "label" : "From Normalized Expression", "displayorder" : 9 } , "order" : { "attrOrProp" : 2, "digest" : "Order in which initial parameter values will be sent out on patcher load. The order can be numeric or symbolic ('first' and 'last')", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "0", "label" : "Restore Order", "displayorder" : 12 } , "displayorder" : { "attrOrProp" : 2, "digest" : "Order in which parameters will show up in a list of all parameters. The order can be numeric or symbolic ('first' and 'last')", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "-", "label" : "Display Order", "displayorder" : 13 } , "sendinit" : { "attrOrProp" : 2, "digest" : "Send initial value", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "true", "label" : "Send Init", "displayorder" : 4 } , "ctlin" : { "attrOrProp" : 2, "digest" : "MIDI controller number to control this parameter.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "-1", "label" : "MIDI Controller Number.", "displayorder" : 16 } , "meta" : { "attrOrProp" : 2, "digest" : "A JSON formatted string containing metadata for use by the exported code", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Metadata", "displayorder" : 17 } , "nopreset" : { "attrOrProp" : 2, "digest" : "Do not add this value to the preset [DEPRECATED - USE @preset 0 instead].", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 1, "touched" : 0, "type" : "bool", "defaultValue" : "false" } , "preset" : { "attrOrProp" : 2, "digest" : "Add this value to the preset.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "true", "label" : "Include In Preset", "displayorder" : 11 } } , "inputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "defaultarg" : 2, "hot" : 1, "docked" : 0 } , { "name" : "normalizedvalue", "type" : "number", "digest" : "Set value normalized. ", "docked" : 0 } ], "outputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "defaultarg" : 2, "hot" : 1, "docked" : 0 } , { "name" : "normalized", "type" : "number", "digest" : "Normalized parameter value.", "docked" : 0 } ], "helpname" : "param", "aliasOf" : "param", "classname" : "param", "operator" : 0, "versionId" : -1661410411, "changesPatcherIO" : 0 } , "text" : "param glissando @enum off on", "varname" : "glissando" } } , { "box" : { "id" : "obj-28", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 1, "outlettype" : [ "signal" ], "patching_rect" : [ 80.0, 547.400000035762787, 40.0, 23.0 ], "rnbo_classname" : "mtof~", "rnbo_serial" : 1, "rnbo_uniqueid" : "mtof~_obj-28", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "midivalue" : { "attrOrProp" : 1, "digest" : "MIDI Note Number", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number" } , "tuning" : { "attrOrProp" : 1, "digest" : "Set base frequency", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number" } , "scale" : { "attrOrProp" : 1, "digest" : "Scala scl formatted list", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "list" } , "map" : { "attrOrProp" : 1, "digest" : "Scala kbm formatted list", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "list" } , "ref" : { "attrOrProp" : 1, "digest" : "Reference note for which the 'base' frequency is given", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "69" } , "mid" : { "attrOrProp" : 1, "digest" : "Middle note where the first scale degree is mapped", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "60" } , "base" : { "attrOrProp" : 1, "digest" : "Frequency to tune 'ref' note to", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "440" } , "out" : { "attrOrProp" : 1, "digest" : "Frequency (Hz)", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "signal" } , "scalename" : { "attrOrProp" : 2, "digest" : "Scale Name", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol" } , "filter" : { "attrOrProp" : 2, "digest" : "Filter unmapped values", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "1" } } , "inputs" : [ { "name" : "midivalue", "type" : "auto", "digest" : "MIDI Note Number", "hot" : 1, "docked" : 0 } , { "name" : "tuning", "type" : "number", "digest" : "Set base frequency", "docked" : 0 } ], "outputs" : [ { "name" : "out", "type" : "signal", "digest" : "Frequency (Hz)", "docked" : 0 } ], "helpname" : "mtof~", "aliasOf" : "mtof", "classname" : "mtof~", "operator" : 0, "versionId" : 950896033, "changesPatcherIO" : 0 } , "text" : "mtof~" } } , { "box" : { "id" : "obj-25", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 1, "outlettype" : [ "signal" ], "patching_rect" : [ 80.0, 515.400000035762787, 110.0, 23.0 ], "rnbo_classname" : "ftom~", "rnbo_serial" : 1, "rnbo_uniqueid" : "ftom~_obj-25", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "frequency" : { "attrOrProp" : 1, "digest" : "Frequency (hz)", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number" } , "tuning" : { "attrOrProp" : 1, "digest" : "Inlet version of the 'base' attribute", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number" } , "scale" : { "attrOrProp" : 1, "digest" : "Scala scl formatted list", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "list" } , "map" : { "attrOrProp" : 1, "digest" : "Scala kbm formatted list", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "list" } , "ref" : { "attrOrProp" : 1, "digest" : "Reference note for which the 'base' frequency is given", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "69" } , "mid" : { "attrOrProp" : 1, "digest" : "Middle note where the first scale degree is mapped", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "60" } , "base" : { "attrOrProp" : 1, "digest" : "Frequency to tune 'ref' note to", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "440" } , "out" : { "attrOrProp" : 1, "digest" : "Note Number", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "signal" } , "scalename" : { "attrOrProp" : 2, "digest" : "Scale Name", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol" } , "filter" : { "attrOrProp" : 2, "digest" : "Filter unmapped values", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "1" } , "round" : { "attrOrProp" : 2, "digest" : "Round", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "true" } } , "inputs" : [ { "name" : "frequency", "type" : "auto", "digest" : "Frequency (hz)", "hot" : 1, "docked" : 0 } , { "name" : "tuning", "type" : "number", "digest" : "Inlet version of the 'base' attribute", "docked" : 0 } ], "outputs" : [ { "name" : "out", "type" : "signal", "digest" : "Note Number", "docked" : 0 } ], "helpname" : "ftom~", "aliasOf" : "ftom", "classname" : "ftom~", "operator" : 0, "versionId" : 447626736, "changesPatcherIO" : 0 } , "text" : "ftom~ @round true" } } , { "box" : { "fontname" : "Lato Light", "fontsize" : 14.0, "id" : "obj-5", "maxclass" : "comment", "numinlets" : 1, "numoutlets" : 0, "patching_rect" : [ 33.400000095367432, 69.400000035762787, 367.0, 23.0 ], "text" : "Custom Voice modes with Codebox : Mono legato modes" } } , { "box" : { "fontname" : "Lato", "fontsize" : 24.0, "id" : "obj-92", "maxclass" : "comment", "numinlets" : 1, "numoutlets" : 0, "patching_rect" : [ 33.400000095367432, 32.400000035762787, 236.0, 35.0 ], "text" : "RNBO : Polyphony " } } , { "box" : { "id" : "obj-60", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 4, "outlettype" : [ "", "", "", "" ], "patching_rect" : [ 579.999999999999773, 309.400000035762787, 50.5, 23.0 ], "rnbo_classname" : "notein", "rnbo_serial" : 1, "rnbo_uniqueid" : "notein_obj-60", "text" : "notein" } } , { "box" : { "bgcolor" : [ 0.0, 0.0, 0.0, 0.0 ], "id" : "obj-54", "linecount" : 7, "maxclass" : "comment", "numinlets" : 1, "numoutlets" : 0, "patching_rect" : [ 136.0, 175.400000035762787, 309.0, 107.0 ], "text" : "Linear Constant Time (LCT) uses the glide time value as the time taken to glide between each successive note. The time is constant irrespective of pitch distance.\n\nLinear Constant Rate (LCR) uses the glide time value as the time taken to glide one octave - closer pitch values will have shorter glide times and vice versa." } } , { "box" : { "id" : "obj-51", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 498.0, 361.400000035762787, 54.0, 23.0 ], "rnbo_classname" : "*", "rnbo_serial" : 1, "rnbo_uniqueid" : "*_obj-51", "text" : "* @hot 1" } } , { "box" : { "id" : "obj-49", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 1, "outlettype" : [ "signal" ], "patching_rect" : [ 25.0, 632.400000035762787, 275.5, 23.0 ], "rnbo_classname" : "expr~", "rnbo_serial" : 1, "rnbo_uniqueid" : "expr~_obj-49", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "reset" : { "attrOrProp" : 1, "digest" : "Reset all state and params to initial values", "isalias" : 0, "aliases" : [ ], "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bang" } , "in1" : { "attrOrProp" : 1, "digest" : "in1", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number" } , "in2" : { "attrOrProp" : 1, "digest" : "in2", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number" } , "out1" : { "attrOrProp" : 1, "digest" : "out1", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "signal" } , "expr" : { "attrOrProp" : 2, "digest" : "expr", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol" } , "safemath" : { "attrOrProp" : 2, "digest" : "Use safe math expressions (e.g.: division by 0 will not crash).", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "true" } , "nocache" : { "attrOrProp" : 2, "digest" : "Do not use parsing cache. This is only useful with very very big code sizes. Code generation will then take a looooong time.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "false" } } , "inputs" : [ { "name" : "in1", "type" : "auto", "digest" : "in1", "hot" : 1, "docked" : 0 } , { "name" : "in2", "type" : "auto", "digest" : "in2", "docked" : 0 } ], "outputs" : [ { "name" : "out1", "type" : "signal", "digest" : "out1", "docked" : 0 } ], "helpname" : "expr~", "aliasOf" : "expr~", "classname" : "expr~", "operator" : 0, "versionId" : 527839773, "changesPatcherIO" : 0 } , "text" : "expr~ @expr out1 = in1 + (in1 * (in2/12))" } } , { "box" : { "id" : "obj-47", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 52.5, 404.400000035762787, 33.0, 23.0 ], "rnbo_classname" : "mtof", "rnbo_serial" : 1, "rnbo_uniqueid" : "mtof_obj-47", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "midivalue" : { "attrOrProp" : 1, "digest" : "MIDI Note Number", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "list" } , "tuning" : { "attrOrProp" : 1, "digest" : "Set base frequency", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number" } , "scale" : { "attrOrProp" : 1, "digest" : "Scala scl formatted list", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "list" } , "map" : { "attrOrProp" : 1, "digest" : "Scala kbm formatted list", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "list" } , "ref" : { "attrOrProp" : 1, "digest" : "Reference note for which the 'base' frequency is given", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "69" } , "mid" : { "attrOrProp" : 1, "digest" : "Middle note where the first scale degree is mapped", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "60" } , "base" : { "attrOrProp" : 1, "digest" : "Frequency to tune 'ref' note to", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "440" } , "out" : { "attrOrProp" : 1, "digest" : "Frequency (Hz)", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "list" } , "scalename" : { "attrOrProp" : 2, "digest" : "Scale Name", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol" } , "filter" : { "attrOrProp" : 2, "digest" : "Filter unmapped values", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "1" } } , "inputs" : [ { "name" : "midivalue", "type" : "list", "digest" : "MIDI Note Number", "hot" : 1, "docked" : 0 } , { "name" : "tuning", "type" : "number", "digest" : "Set base frequency", "docked" : 0 } ], "outputs" : [ { "name" : "out", "type" : "list", "digest" : "Frequency (Hz)", "docked" : 0 } ], "helpname" : "mtof", "aliasOf" : "mtof", "classname" : "mtof", "operator" : 0, "versionId" : 950896033, "changesPatcherIO" : 0 } , "text" : "mtof" } } , { "box" : { "id" : "obj-41", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 3, "outlettype" : [ "", "", "" ], "patching_rect" : [ 52.5, 309.400000035762787, 77.0, 23.0 ], "rnbo_classname" : "t", "rnbo_serial" : 1, "rnbo_uniqueid" : "t_obj-41", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "out1" : { "attrOrProp" : 1, "digest" : "Output order 3 (number).", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "number" } , "out2" : { "attrOrProp" : 1, "digest" : "Output order 2 (number).", "defaultarg" : 2, "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "number" } , "out3" : { "attrOrProp" : 1, "digest" : "Output order 1 (number).", "defaultarg" : 3, "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "number" } , "triggers" : { "attrOrProp" : 2, "digest" : "The number of arguments determines the number of outlets. \t\t\t\t\t\tEach outlet sends out either a whole number, float, bang or list, \t\t\t\t\t\tas identified by symbol arguments (i, f, b, l). \t\t\t\t\t\tIf there are no arguments, there are two outlets, both of which send a float.", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "list" } } , "inputs" : [ { "name" : "input", "type" : [ "bang", "number", "list" ], "digest" : "input to distribute", "hot" : 1, "docked" : 0 } ], "outputs" : [ { "name" : "out1", "type" : "number", "digest" : "Output order 3 (number).", "defaultarg" : 1, "docked" : 0 } , { "name" : "out2", "type" : "number", "digest" : "Output order 2 (number).", "defaultarg" : 2, "docked" : 0 } , { "name" : "out3", "type" : "number", "digest" : "Output order 1 (number).", "defaultarg" : 3, "docked" : 0 } ], "helpname" : "trigger", "aliasOf" : "trigger", "classname" : "t", "operator" : 0, "versionId" : 1624904035, "changesPatcherIO" : 0 } , "text" : "t i i i" } } , { "box" : { "id" : "obj-36", "maxclass" : "newobj", "numinlets" : 4, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 111.0, 404.400000035762787, 406.0, 23.0 ], "rnbo_classname" : "expr", "rnbo_serial" : 1, "rnbo_uniqueid" : "expr_obj-36", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "reset" : { "attrOrProp" : 1, "digest" : "Reset all state and params to initial values", "isalias" : 0, "aliases" : [ ], "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bang" } , "in1" : { "attrOrProp" : 1, "digest" : "in1", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number" } , "in2" : { "attrOrProp" : 1, "digest" : "in2", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number" } , "in3" : { "attrOrProp" : 1, "digest" : "in3", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number" } , "in4" : { "attrOrProp" : 1, "digest" : "in4", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number" } , "out1" : { "attrOrProp" : 1, "digest" : "out1", "isalias" : 0, "aliases" : [ ], "settable" : 0, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "number" } , "expr" : { "attrOrProp" : 2, "digest" : "expr", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "doNotShowInMaxInspector" : 1 } , "hot" : { "attrOrProp" : 2, "digest" : "Trigger computation on all inlets.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "false" } , "safemath" : { "attrOrProp" : 2, "digest" : "Use safe math expressions (e.g.: division by 0 will not crash).", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "true" } , "nocache" : { "attrOrProp" : 2, "digest" : "Do not use parsing cache. This is only useful with very very big code sizes. Code generation will then take a looooong time.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "false" } } , "inputs" : [ { "name" : "in1", "type" : "number", "digest" : "in1", "hot" : 1, "docked" : 0 } , { "name" : "in2", "type" : "number", "digest" : "in2", "docked" : 0 } , { "name" : "in3", "type" : "number", "digest" : "in3", "docked" : 0 } , { "name" : "in4", "type" : "number", "digest" : "in4", "docked" : 0 } ], "outputs" : [ { "name" : "out1", "type" : "number", "digest" : "out1", "docked" : 0 } ], "helpname" : "expr", "aliasOf" : "expr", "classname" : "expr", "operator" : 0, "versionId" : 835263063, "changesPatcherIO" : 0 } , "text" : "expr @expr out1 = (in2) ? in4 : (((1.0/12.0) * abs(in2 - in1) + 0.000001) * in3)" } } , { "box" : { "id" : "obj-33", "maxclass" : "newobj", "numinlets" : 3, "numoutlets" : 2, "outlettype" : [ "signal", "" ], "patching_rect" : [ 52.5, 470.400000035762787, 136.0, 23.0 ], "rnbo_classname" : "curve~", "rnbo_serial" : 1, "rnbo_uniqueid" : "curve~_obj-33", "text" : "curve~" } } , { "box" : { "id" : "obj-31", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 498.0, 217.400000035762787, 231.0, 23.0 ], "rnbo_classname" : "expr", "rnbo_serial" : 2, "rnbo_uniqueid" : "expr_obj-31", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "reset" : { "attrOrProp" : 1, "digest" : "Reset all state and params to initial values", "isalias" : 0, "aliases" : [ ], "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bang" } , "in1" : { "attrOrProp" : 1, "digest" : "in1", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number" } , "in2" : { "attrOrProp" : 1, "digest" : "in2", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number" } , "out1" : { "attrOrProp" : 1, "digest" : "out1", "isalias" : 0, "aliases" : [ ], "settable" : 0, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "number" } , "expr" : { "attrOrProp" : 2, "digest" : "expr", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "doNotShowInMaxInspector" : 1 } , "hot" : { "attrOrProp" : 2, "digest" : "Trigger computation on all inlets.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "false" } , "safemath" : { "attrOrProp" : 2, "digest" : "Use safe math expressions (e.g.: division by 0 will not crash).", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "true" } , "nocache" : { "attrOrProp" : 2, "digest" : "Do not use parsing cache. This is only useful with very very big code sizes. Code generation will then take a looooong time.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "false" } } , "inputs" : [ { "name" : "in1", "type" : "number", "digest" : "in1", "hot" : 1, "docked" : 0 } , { "name" : "in2", "type" : "number", "digest" : "in2", "docked" : 0 } ], "outputs" : [ { "name" : "out1", "type" : "number", "digest" : "out1", "docked" : 0 } ], "helpname" : "expr", "aliasOf" : "expr", "classname" : "expr", "operator" : 0, "versionId" : 835263063, "changesPatcherIO" : 0 } , "text" : "expr out1=in1/16383 * 2000 * in2 @hot 1" } } , { "box" : { "id" : "obj-29", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 2, "outlettype" : [ "", "" ], "patching_rect" : [ 169.5, 435.400000035762787, 236.0, 23.0 ], "rnbo_classname" : "param", "rnbo_extra_attributes" : { "ctlin" : 0.0 } , "rnbo_serial" : 2, "rnbo_uniqueid" : "glidecurve", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "value" : { "attrOrProp" : 1, "digest" : "Parameter value", "defaultarg" : 2, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 1, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number", "defaultValue" : "0" } , "normalizedvalue" : { "attrOrProp" : 1, "digest" : "Set value normalized. ", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number" } , "reset" : { "attrOrProp" : 1, "digest" : "Reset param to initial value", "isalias" : 0, "aliases" : [ ], "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bang" } , "normalized" : { "attrOrProp" : 1, "digest" : "Normalized parameter value.", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "number" } , "name" : { "attrOrProp" : 2, "digest" : "Name of the parameter", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "label" : "Parameter Name", "mandatory" : 1 } , "enum" : { "attrOrProp" : 2, "digest" : "Use an enumerated output", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "list", "label" : "Enum Values", "displayorder" : 6 } , "minimum" : { "attrOrProp" : 2, "digest" : "Minimum value", "isalias" : 0, "aliases" : [ "min" ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "0", "label" : "Minimum", "displayorder" : 1 } , "min" : { "attrOrProp" : 2, "digest" : "Minimum value", "isalias" : 1, "aliasOf" : "minimum", "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "0", "label" : "Minimum", "displayorder" : 1 } , "maximum" : { "attrOrProp" : 2, "digest" : "Maximum value", "isalias" : 0, "aliases" : [ "max" ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "1", "label" : "Maximum", "displayorder" : 2 } , "max" : { "attrOrProp" : 2, "digest" : "Maximum value", "isalias" : 1, "aliasOf" : "maximum", "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "1", "label" : "Maximum", "displayorder" : 2 } , "exponent" : { "attrOrProp" : 2, "digest" : "Scale values exponentially", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "1", "label" : "Exponent", "displayorder" : 7 } , "steps" : { "attrOrProp" : 2, "digest" : "Divide the output into a number of discrete steps", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "0", "label" : "Steps", "displayorder" : 8 } , "displayName" : { "attrOrProp" : 2, "digest" : "DEPRECATED: Use the lower case 'displayname' instead", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 1, "touched" : 0, "type" : "symbol", "label" : "Display Name" } , "displayname" : { "attrOrProp" : 2, "digest" : "A more readable name for the parameter in an external RNBO target", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Display Name", "displayorder" : 14 } , "unit" : { "attrOrProp" : 2, "digest" : "A symbol to describe the unit of the parameter in an external RNBO target", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Unit", "displayorder" : 15 } , "tonormalized" : { "attrOrProp" : 2, "digest" : "Converts a real parameter value to its normalized form", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "label" : "To Normalized Expression", "displayorder" : 10 } , "fromnormalized" : { "attrOrProp" : 2, "digest" : "Converts a normalized parameter into its actual parameter value", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "label" : "From Normalized Expression", "displayorder" : 9 } , "order" : { "attrOrProp" : 2, "digest" : "Order in which initial parameter values will be sent out on patcher load. The order can be numeric or symbolic ('first' and 'last')", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "0", "label" : "Restore Order", "displayorder" : 12 } , "displayorder" : { "attrOrProp" : 2, "digest" : "Order in which parameters will show up in a list of all parameters. The order can be numeric or symbolic ('first' and 'last')", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "-", "label" : "Display Order", "displayorder" : 13 } , "sendinit" : { "attrOrProp" : 2, "digest" : "Send initial value", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "true", "label" : "Send Init", "displayorder" : 4 } , "ctlin" : { "attrOrProp" : 2, "digest" : "MIDI controller number to control this parameter.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "-1", "label" : "MIDI Controller Number.", "displayorder" : 16 } , "meta" : { "attrOrProp" : 2, "digest" : "A JSON formatted string containing metadata for use by the exported code", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Metadata", "displayorder" : 17 } , "nopreset" : { "attrOrProp" : 2, "digest" : "Do not add this value to the preset [DEPRECATED - USE @preset 0 instead].", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 1, "touched" : 0, "type" : "bool", "defaultValue" : "false" } , "preset" : { "attrOrProp" : 2, "digest" : "Add this value to the preset.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "true", "label" : "Include In Preset", "displayorder" : 11 } } , "inputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "defaultarg" : 2, "hot" : 1, "docked" : 0 } , { "name" : "normalizedvalue", "type" : "number", "digest" : "Set value normalized. ", "docked" : 0 } ], "outputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "defaultarg" : 2, "hot" : 1, "docked" : 0 } , { "name" : "normalized", "type" : "number", "digest" : "Normalized parameter value.", "docked" : 0 } ], "helpname" : "param", "aliasOf" : "param", "classname" : "param", "operator" : 0, "versionId" : -1661410411, "changesPatcherIO" : 0 } , "text" : "param glidecurve 0 @min -0.99 @max 0.99", "varname" : "glidecurve" } } , { "box" : { "id" : "obj-22", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 2, "outlettype" : [ "", "" ], "patching_rect" : [ 155.0, 309.400000035762787, 233.0, 23.0 ], "rnbo_classname" : "param", "rnbo_extra_attributes" : { "ctlin" : 0.0 } , "rnbo_serial" : 3, "rnbo_uniqueid" : "glidemode", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "value" : { "attrOrProp" : 1, "digest" : "Parameter value", "defaultarg" : 2, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 1, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number", "defaultValue" : "0" } , "normalizedvalue" : { "attrOrProp" : 1, "digest" : "Set value normalized. ", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number" } , "reset" : { "attrOrProp" : 1, "digest" : "Reset param to initial value", "isalias" : 0, "aliases" : [ ], "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bang" } , "normalized" : { "attrOrProp" : 1, "digest" : "Normalized parameter value.", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "number" } , "maximum" : { "attrOrProp" : 2, "digest" : "Maximum value", "isalias" : 0, "aliases" : [ "max" ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 1, "type" : "number", "defaultValue" : "1", "label" : "Maximum", "displayorder" : 2, "disabledInMaxInspector" : 1 } , "max" : { "attrOrProp" : 2, "digest" : "Maximum value", "isalias" : 1, "aliasOf" : "maximum", "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "1", "label" : "Maximum", "displayorder" : 2 } , "minimum" : { "attrOrProp" : 2, "digest" : "Minimum value", "isalias" : 0, "aliases" : [ "min" ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 1, "type" : "number", "defaultValue" : "0", "label" : "Minimum", "displayorder" : 1, "disabledInMaxInspector" : 1 } , "min" : { "attrOrProp" : 2, "digest" : "Minimum value", "isalias" : 1, "aliasOf" : "minimum", "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "0", "label" : "Minimum", "displayorder" : 1 } , "steps" : { "attrOrProp" : 2, "digest" : "Divide the output into a number of discrete steps", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 1, "type" : "number", "defaultValue" : "2", "label" : "Steps", "displayorder" : 8, "disabledInMaxInspector" : 1 } , "exponent" : { "attrOrProp" : 2, "digest" : "Scale values exponentially", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 1, "type" : "number", "defaultValue" : "1", "label" : "Exponent", "displayorder" : 7, "disabledInMaxInspector" : 1 } , "name" : { "attrOrProp" : 2, "digest" : "Name of the parameter", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "label" : "Parameter Name", "mandatory" : 1 } , "enum" : { "attrOrProp" : 2, "digest" : "Use an enumerated output", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "list", "label" : "Enum Values", "displayorder" : 6 } , "displayName" : { "attrOrProp" : 2, "digest" : "DEPRECATED: Use the lower case 'displayname' instead", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 1, "touched" : 0, "type" : "symbol", "label" : "Display Name" } , "displayname" : { "attrOrProp" : 2, "digest" : "A more readable name for the parameter in an external RNBO target", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Display Name", "displayorder" : 14 } , "unit" : { "attrOrProp" : 2, "digest" : "A symbol to describe the unit of the parameter in an external RNBO target", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Unit", "displayorder" : 15 } , "tonormalized" : { "attrOrProp" : 2, "digest" : "Converts a real parameter value to its normalized form", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "label" : "To Normalized Expression", "displayorder" : 10 } , "fromnormalized" : { "attrOrProp" : 2, "digest" : "Converts a normalized parameter into its actual parameter value", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "label" : "From Normalized Expression", "displayorder" : 9 } , "order" : { "attrOrProp" : 2, "digest" : "Order in which initial parameter values will be sent out on patcher load. The order can be numeric or symbolic ('first' and 'last')", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "0", "label" : "Restore Order", "displayorder" : 12 } , "displayorder" : { "attrOrProp" : 2, "digest" : "Order in which parameters will show up in a list of all parameters. The order can be numeric or symbolic ('first' and 'last')", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "-", "label" : "Display Order", "displayorder" : 13 } , "sendinit" : { "attrOrProp" : 2, "digest" : "Send initial value", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "true", "label" : "Send Init", "displayorder" : 4 } , "ctlin" : { "attrOrProp" : 2, "digest" : "MIDI controller number to control this parameter.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "-1", "label" : "MIDI Controller Number.", "displayorder" : 16 } , "meta" : { "attrOrProp" : 2, "digest" : "A JSON formatted string containing metadata for use by the exported code", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Metadata", "displayorder" : 17 } , "nopreset" : { "attrOrProp" : 2, "digest" : "Do not add this value to the preset [DEPRECATED - USE @preset 0 instead].", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 1, "touched" : 0, "type" : "bool", "defaultValue" : "false" } , "preset" : { "attrOrProp" : 2, "digest" : "Add this value to the preset.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "true", "label" : "Include In Preset", "displayorder" : 11 } } , "inputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "defaultarg" : 2, "hot" : 1, "docked" : 0 } , { "name" : "normalizedvalue", "type" : "number", "digest" : "Set value normalized. ", "docked" : 0 } ], "outputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "defaultarg" : 2, "hot" : 1, "docked" : 0 } , { "name" : "normalized", "type" : "number", "digest" : "Normalized parameter value.", "docked" : 0 } ], "helpname" : "param", "aliasOf" : "param", "classname" : "param", "operator" : 0, "versionId" : -1661410411, "changesPatcherIO" : 0 } , "text" : "param glidemode @enum LCR LCT", "varname" : "glidemode" } } , { "box" : { "id" : "obj-103", "linecount" : 2, "maxclass" : "comment", "numinlets" : 1, "numoutlets" : 0, "patching_rect" : [ 746.499999999999773, 716.400000035762787, 150.0, 35.0 ], "text" : "Only glide legato notes, not the first note." } } , { "box" : { "id" : "obj-98", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 697.166666666666288, 725.400000035762787, 32.0, 23.0 ], "rnbo_classname" : "==", "rnbo_serial" : 1, "rnbo_uniqueid" : "==_obj-98", "text" : "== 0" } } , { "box" : { "id" : "obj-97", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 697.166666666666288, 693.400000035762787, 36.333333333333428, 23.0 ], "rnbo_classname" : "latch", "rnbo_serial" : 1, "rnbo_uniqueid" : "latch_obj-97", "text" : "latch" } } , { "box" : { "id" : "obj-37", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 662.499999999999545, 621.400000035762787, 23.0, 23.0 ], "rnbo_classname" : "t", "rnbo_serial" : 2, "rnbo_uniqueid" : "t_obj-37", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "out1" : { "attrOrProp" : 1, "digest" : "Output order 1 (bang).", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "bang" } , "triggers" : { "attrOrProp" : 2, "digest" : "The number of arguments determines the number of outlets. \t\t\t\t\t\tEach outlet sends out either a whole number, float, bang or list, \t\t\t\t\t\tas identified by symbol arguments (i, f, b, l). \t\t\t\t\t\tIf there are no arguments, there are two outlets, both of which send a float.", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "list" } } , "inputs" : [ { "name" : "input", "type" : [ "bang", "number", "list" ], "digest" : "input to distribute", "hot" : 1, "docked" : 0 } ], "outputs" : [ { "name" : "out1", "type" : "bang", "digest" : "Output order 1 (bang).", "defaultarg" : 1, "docked" : 0 } ], "helpname" : "trigger", "aliasOf" : "trigger", "classname" : "t", "operator" : 0, "versionId" : 1624904035, "changesPatcherIO" : 0 } , "text" : "t b" } } , { "box" : { "bubble" : 1, "bubblepoint" : 0.0, "bubbleside" : 0, "bubbleusescolors" : 1, "id" : "obj-55", "linecount" : 3, "maxclass" : "comment", "numinlets" : 1, "numoutlets" : 0, "patching_rect" : [ 646.5, 255.400000035762787, 240.0, 69.0 ], "text" : "We're hard coding the max glide time to 2 seconds here - but you could parameterise this or set it to whatever you like." } } , { "box" : { "id" : "obj-50", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 52.5, 166.400000035762787, 29.5, 23.0 ], "rnbo_classname" : "!=", "rnbo_serial" : 1, "rnbo_uniqueid" : "!=_obj-50", "text" : "!= 0" } } , { "box" : { "id" : "obj-40", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 847.5, 169.400000035762787, 39.0, 23.0 ], "rnbo_classname" : ">=", "rnbo_serial" : 1, "rnbo_uniqueid" : ">=_obj-40", "text" : ">= 64" } } , { "box" : { "id" : "obj-39", "linecount" : 2, "maxclass" : "comment", "numinlets" : 1, "numoutlets" : 0, "patching_rect" : [ 847.5, 69.400000035762787, 111.0, 35.0 ], "text" : "CC 65 : Portamento on/off" } } , { "box" : { "id" : "obj-38", "maxclass" : "newobj", "numinlets" : 3, "numoutlets" : 3, "outlettype" : [ "", "", "" ], "patching_rect" : [ 847.5, 126.400000035762787, 48.0, 23.0 ], "rnbo_classname" : "ctlin", "rnbo_serial" : 1, "rnbo_uniqueid" : "ctlin_obj-38", "text" : "ctlin 65" } } , { "box" : { "id" : "obj-30", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 498.0, 166.400000035762787, 193.0, 23.0 ], "rnbo_classname" : "expr", "rnbo_serial" : 3, "rnbo_uniqueid" : "expr_obj-30", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "reset" : { "attrOrProp" : 1, "digest" : "Reset all state and params to initial values", "isalias" : 0, "aliases" : [ ], "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bang" } , "in1" : { "attrOrProp" : 1, "digest" : "in1", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number" } , "in2" : { "attrOrProp" : 1, "digest" : "in2", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number" } , "out1" : { "attrOrProp" : 1, "digest" : "out1", "isalias" : 0, "aliases" : [ ], "settable" : 0, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "number" } , "expr" : { "attrOrProp" : 2, "digest" : "expr", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "doNotShowInMaxInspector" : 1 } , "hot" : { "attrOrProp" : 2, "digest" : "Trigger computation on all inlets.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "false" } , "safemath" : { "attrOrProp" : 2, "digest" : "Use safe math expressions (e.g.: division by 0 will not crash).", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "true" } , "nocache" : { "attrOrProp" : 2, "digest" : "Do not use parsing cache. This is only useful with very very big code sizes. Code generation will then take a looooong time.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "false" } } , "inputs" : [ { "name" : "in1", "type" : "number", "digest" : "in1", "hot" : 1, "docked" : 0 } , { "name" : "in2", "type" : "number", "digest" : "in2", "docked" : 0 } ], "outputs" : [ { "name" : "out1", "type" : "number", "digest" : "out1", "docked" : 0 } ], "helpname" : "expr", "aliasOf" : "expr", "classname" : "expr", "operator" : 0, "versionId" : 835263063, "changesPatcherIO" : 0 } , "text" : "expr out1 = (in1 << 7) + in2 @hot 1" } } , { "box" : { "id" : "obj-27", "linecount" : 3, "maxclass" : "comment", "numinlets" : 1, "numoutlets" : 0, "patching_rect" : [ 672.0, 69.400000035762787, 111.0, 50.0 ], "text" : "CC 37 : Portamento glide time (fine) LSB" } } , { "box" : { "id" : "obj-26", "maxclass" : "newobj", "numinlets" : 3, "numoutlets" : 3, "outlettype" : [ "", "", "" ], "patching_rect" : [ 672.0, 126.400000035762787, 48.0, 23.0 ], "rnbo_classname" : "ctlin", "rnbo_serial" : 2, "rnbo_uniqueid" : "ctlin_obj-26", "text" : "ctlin 37" } } , { "box" : { "id" : "obj-23", "linecount" : 3, "maxclass" : "comment", "numinlets" : 1, "numoutlets" : 0, "patching_rect" : [ 494.0, 69.400000035762787, 104.0, 50.0 ], "text" : "CC 5 : Portamento glide time (coarse)" } } , { "box" : { "id" : "obj-21", "maxclass" : "newobj", "numinlets" : 3, "numoutlets" : 3, "outlettype" : [ "", "", "" ], "patching_rect" : [ 498.0, 126.400000035762787, 41.0, 23.0 ], "rnbo_classname" : "ctlin", "rnbo_serial" : 3, "rnbo_uniqueid" : "ctlin_obj-21", "text" : "ctlin 5" } } , { "box" : { "id" : "obj-1", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 4, "outlettype" : [ "", "", "", "" ], "patching_rect" : [ 662.499999999999545, 660.400000035762787, 71.000000000000227, 23.0 ], "rnbo_classname" : "voice", "rnbo_serial" : 1, "rnbo_uniqueid" : "voice_obj-1", "text" : "voice" } } , { "box" : { "id" : "obj-6", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 1, "outlettype" : [ "signal" ], "patching_rect" : [ 25.0, 663.400000035762787, 54.0, 23.0 ], "rnbo_classname" : "phasor~", "rnbo_serial" : 1, "rnbo_uniqueid" : "phasor~_obj-6", "text" : "phasor~" } } , { "box" : { "id" : "obj-19", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 52.5, 278.400000035762787, 51.0, 23.0 ], "rnbo_classname" : "gate", "rnbo_serial" : 1, "rnbo_uniqueid" : "gate_obj-19", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "onoff" : { "attrOrProp" : 1, "digest" : "0 Closes gate, non-zero opens the corresponding gate outlet", "defaultarg" : 2, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number", "defaultValue" : "0" } , "outputs" : { "attrOrProp" : 2, "digest" : "Number of outlets", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "1" } } , "inputs" : [ { "name" : "onoff", "type" : "number", "digest" : "0 Closes gate, non-zero opens the corresponding gate outlet", "defaultarg" : 2, "docked" : 0 } , { "name" : "input", "type" : [ "bang", "number", "list" ], "digest" : "Incoming gated message", "hot" : 1, "docked" : 0 } ], "outputs" : [ { "name" : "out1", "type" : [ "bang", "number", "list" ], "digest" : "Gated Output 1", "docked" : 0 } ], "helpname" : "gate", "aliasOf" : "gate", "classname" : "gate", "operator" : 0, "versionId" : -1253073831, "changesPatcherIO" : 0 } , "text" : "gate" } } , { "box" : { "id" : "obj-18", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 1, "outlettype" : [ "signal" ], "patching_rect" : [ 24.0, 726.400000035762787, 254.5, 23.0 ], "rnbo_classname" : "*~", "rnbo_serial" : 1, "rnbo_uniqueid" : "*~_obj-18", "text" : "*~" } } , { "box" : { "id" : "obj-13", "maxclass" : "newobj", "numinlets" : 5, "numoutlets" : 2, "outlettype" : [ "signal", "" ], "patching_rect" : [ 590.499999999999773, 566.400000035762787, 143.000000000000057, 23.0 ], "rnbo_classname" : "adsr~", "rnbo_serial" : 1, "rnbo_uniqueid" : "adsr~_obj-13", "text" : "adsr~" } } , { "box" : { "id" : "obj-4", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 2, "outlettype" : [ "", "" ], "patching_rect" : [ 714.499999999999773, 510.400000035762787, 307.0, 23.0 ], "rnbo_classname" : "param", "rnbo_extra_attributes" : { "ctlin" : 0.0, "order" : "" } , "rnbo_serial" : 4, "rnbo_uniqueid" : "release", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "value" : { "attrOrProp" : 1, "digest" : "Parameter value", "defaultarg" : 2, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 1, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number", "defaultValue" : "50" } , "normalizedvalue" : { "attrOrProp" : 1, "digest" : "Set value normalized. ", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number" } , "reset" : { "attrOrProp" : 1, "digest" : "Reset param to initial value", "isalias" : 0, "aliases" : [ ], "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bang" } , "normalized" : { "attrOrProp" : 1, "digest" : "Normalized parameter value.", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "number" } , "name" : { "attrOrProp" : 2, "digest" : "Name of the parameter", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "label" : "Parameter Name", "mandatory" : 1 } , "enum" : { "attrOrProp" : 2, "digest" : "Use an enumerated output", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "list", "label" : "Enum Values", "displayorder" : 6 } , "minimum" : { "attrOrProp" : 2, "digest" : "Minimum value", "isalias" : 0, "aliases" : [ "min" ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "0", "label" : "Minimum", "displayorder" : 1 } , "min" : { "attrOrProp" : 2, "digest" : "Minimum value", "isalias" : 1, "aliasOf" : "minimum", "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "0", "label" : "Minimum", "displayorder" : 1 } , "maximum" : { "attrOrProp" : 2, "digest" : "Maximum value", "isalias" : 0, "aliases" : [ "max" ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "1", "label" : "Maximum", "displayorder" : 2 } , "max" : { "attrOrProp" : 2, "digest" : "Maximum value", "isalias" : 1, "aliasOf" : "maximum", "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "1", "label" : "Maximum", "displayorder" : 2 } , "exponent" : { "attrOrProp" : 2, "digest" : "Scale values exponentially", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "1", "label" : "Exponent", "displayorder" : 7 } , "steps" : { "attrOrProp" : 2, "digest" : "Divide the output into a number of discrete steps", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "0", "label" : "Steps", "displayorder" : 8 } , "displayName" : { "attrOrProp" : 2, "digest" : "DEPRECATED: Use the lower case 'displayname' instead", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 1, "touched" : 0, "type" : "symbol", "label" : "Display Name" } , "displayname" : { "attrOrProp" : 2, "digest" : "A more readable name for the parameter in an external RNBO target", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Display Name", "displayorder" : 14 } , "unit" : { "attrOrProp" : 2, "digest" : "A symbol to describe the unit of the parameter in an external RNBO target", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Unit", "displayorder" : 15 } , "tonormalized" : { "attrOrProp" : 2, "digest" : "Converts a real parameter value to its normalized form", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "label" : "To Normalized Expression", "displayorder" : 10 } , "fromnormalized" : { "attrOrProp" : 2, "digest" : "Converts a normalized parameter into its actual parameter value", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "label" : "From Normalized Expression", "displayorder" : 9 } , "order" : { "attrOrProp" : 2, "digest" : "Order in which initial parameter values will be sent out on patcher load. The order can be numeric or symbolic ('first' and 'last')", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "0", "label" : "Restore Order", "displayorder" : 12 } , "displayorder" : { "attrOrProp" : 2, "digest" : "Order in which parameters will show up in a list of all parameters. The order can be numeric or symbolic ('first' and 'last')", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "-", "label" : "Display Order", "displayorder" : 13 } , "sendinit" : { "attrOrProp" : 2, "digest" : "Send initial value", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "true", "label" : "Send Init", "displayorder" : 4 } , "ctlin" : { "attrOrProp" : 2, "digest" : "MIDI controller number to control this parameter.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "-1", "label" : "MIDI Controller Number.", "displayorder" : 16 } , "meta" : { "attrOrProp" : 2, "digest" : "A JSON formatted string containing metadata for use by the exported code", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Metadata", "displayorder" : 17 } , "nopreset" : { "attrOrProp" : 2, "digest" : "Do not add this value to the preset [DEPRECATED - USE @preset 0 instead].", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 1, "touched" : 0, "type" : "bool", "defaultValue" : "false" } , "preset" : { "attrOrProp" : 2, "digest" : "Add this value to the preset.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "true", "label" : "Include In Preset", "displayorder" : 11 } } , "inputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "defaultarg" : 2, "hot" : 1, "docked" : 0 } , { "name" : "normalizedvalue", "type" : "number", "digest" : "Set value normalized. ", "docked" : 0 } ], "outputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "defaultarg" : 2, "hot" : 1, "docked" : 0 } , { "name" : "normalized", "type" : "number", "digest" : "Normalized parameter value.", "docked" : 0 } ], "helpname" : "param", "aliasOf" : "param", "classname" : "param", "operator" : 0, "versionId" : -1661410411, "changesPatcherIO" : 0 } , "text" : "param release @minimum 0 @maximum 4000 @value 50", "varname" : "release" } } , { "box" : { "id" : "obj-17", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 2, "outlettype" : [ "", "" ], "patching_rect" : [ 683.499999999999773, 479.400000035762787, 303.0, 23.0 ], "rnbo_classname" : "param", "rnbo_extra_attributes" : { "ctlin" : 0.0, "order" : "" } , "rnbo_serial" : 5, "rnbo_uniqueid" : "sustain", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "value" : { "attrOrProp" : 1, "digest" : "Parameter value", "defaultarg" : 2, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 1, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number", "defaultValue" : "0.2" } , "normalizedvalue" : { "attrOrProp" : 1, "digest" : "Set value normalized. ", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number" } , "reset" : { "attrOrProp" : 1, "digest" : "Reset param to initial value", "isalias" : 0, "aliases" : [ ], "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bang" } , "normalized" : { "attrOrProp" : 1, "digest" : "Normalized parameter value.", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "number" } , "name" : { "attrOrProp" : 2, "digest" : "Name of the parameter", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "label" : "Parameter Name", "mandatory" : 1 } , "enum" : { "attrOrProp" : 2, "digest" : "Use an enumerated output", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "list", "label" : "Enum Values", "displayorder" : 6 } , "minimum" : { "attrOrProp" : 2, "digest" : "Minimum value", "isalias" : 0, "aliases" : [ "min" ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "0", "label" : "Minimum", "displayorder" : 1 } , "min" : { "attrOrProp" : 2, "digest" : "Minimum value", "isalias" : 1, "aliasOf" : "minimum", "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "0", "label" : "Minimum", "displayorder" : 1 } , "maximum" : { "attrOrProp" : 2, "digest" : "Maximum value", "isalias" : 0, "aliases" : [ "max" ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "1", "label" : "Maximum", "displayorder" : 2 } , "max" : { "attrOrProp" : 2, "digest" : "Maximum value", "isalias" : 1, "aliasOf" : "maximum", "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "1", "label" : "Maximum", "displayorder" : 2 } , "exponent" : { "attrOrProp" : 2, "digest" : "Scale values exponentially", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "1", "label" : "Exponent", "displayorder" : 7 } , "steps" : { "attrOrProp" : 2, "digest" : "Divide the output into a number of discrete steps", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "0", "label" : "Steps", "displayorder" : 8 } , "displayName" : { "attrOrProp" : 2, "digest" : "DEPRECATED: Use the lower case 'displayname' instead", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 1, "touched" : 0, "type" : "symbol", "label" : "Display Name" } , "displayname" : { "attrOrProp" : 2, "digest" : "A more readable name for the parameter in an external RNBO target", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Display Name", "displayorder" : 14 } , "unit" : { "attrOrProp" : 2, "digest" : "A symbol to describe the unit of the parameter in an external RNBO target", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Unit", "displayorder" : 15 } , "tonormalized" : { "attrOrProp" : 2, "digest" : "Converts a real parameter value to its normalized form", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "label" : "To Normalized Expression", "displayorder" : 10 } , "fromnormalized" : { "attrOrProp" : 2, "digest" : "Converts a normalized parameter into its actual parameter value", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "label" : "From Normalized Expression", "displayorder" : 9 } , "order" : { "attrOrProp" : 2, "digest" : "Order in which initial parameter values will be sent out on patcher load. The order can be numeric or symbolic ('first' and 'last')", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "0", "label" : "Restore Order", "displayorder" : 12 } , "displayorder" : { "attrOrProp" : 2, "digest" : "Order in which parameters will show up in a list of all parameters. The order can be numeric or symbolic ('first' and 'last')", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "-", "label" : "Display Order", "displayorder" : 13 } , "sendinit" : { "attrOrProp" : 2, "digest" : "Send initial value", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "true", "label" : "Send Init", "displayorder" : 4 } , "ctlin" : { "attrOrProp" : 2, "digest" : "MIDI controller number to control this parameter.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "-1", "label" : "MIDI Controller Number.", "displayorder" : 16 } , "meta" : { "attrOrProp" : 2, "digest" : "A JSON formatted string containing metadata for use by the exported code", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Metadata", "displayorder" : 17 } , "nopreset" : { "attrOrProp" : 2, "digest" : "Do not add this value to the preset [DEPRECATED - USE @preset 0 instead].", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 1, "touched" : 0, "type" : "bool", "defaultValue" : "false" } , "preset" : { "attrOrProp" : 2, "digest" : "Add this value to the preset.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "true", "label" : "Include In Preset", "displayorder" : 11 } } , "inputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "defaultarg" : 2, "hot" : 1, "docked" : 0 } , { "name" : "normalizedvalue", "type" : "number", "digest" : "Set value normalized. ", "docked" : 0 } ], "outputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "defaultarg" : 2, "hot" : 1, "docked" : 0 } , { "name" : "normalized", "type" : "number", "digest" : "Normalized parameter value.", "docked" : 0 } ], "helpname" : "param", "aliasOf" : "param", "classname" : "param", "operator" : 0, "versionId" : -1661410411, "changesPatcherIO" : 0 } , "text" : "param sustain @minimum 0 @maximum 1. @value 0.2", "varname" : "sustain" } } , { "box" : { "id" : "obj-2", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 2, "outlettype" : [ "", "" ], "patching_rect" : [ 652.499999999999773, 443.400000035762787, 317.0, 23.0 ], "rnbo_classname" : "param", "rnbo_extra_attributes" : { "ctlin" : 0.0, "order" : "" } , "rnbo_serial" : 6, "rnbo_uniqueid" : "decay", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "value" : { "attrOrProp" : 1, "digest" : "Parameter value", "defaultarg" : 2, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 1, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number", "defaultValue" : "200" } , "normalizedvalue" : { "attrOrProp" : 1, "digest" : "Set value normalized. ", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number" } , "reset" : { "attrOrProp" : 1, "digest" : "Reset param to initial value", "isalias" : 0, "aliases" : [ ], "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bang" } , "normalized" : { "attrOrProp" : 1, "digest" : "Normalized parameter value.", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "number" } , "name" : { "attrOrProp" : 2, "digest" : "Name of the parameter", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "label" : "Parameter Name", "mandatory" : 1 } , "enum" : { "attrOrProp" : 2, "digest" : "Use an enumerated output", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "list", "label" : "Enum Values", "displayorder" : 6 } , "minimum" : { "attrOrProp" : 2, "digest" : "Minimum value", "isalias" : 0, "aliases" : [ "min" ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "0", "label" : "Minimum", "displayorder" : 1 } , "min" : { "attrOrProp" : 2, "digest" : "Minimum value", "isalias" : 1, "aliasOf" : "minimum", "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "0", "label" : "Minimum", "displayorder" : 1 } , "maximum" : { "attrOrProp" : 2, "digest" : "Maximum value", "isalias" : 0, "aliases" : [ "max" ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "1", "label" : "Maximum", "displayorder" : 2 } , "max" : { "attrOrProp" : 2, "digest" : "Maximum value", "isalias" : 1, "aliasOf" : "maximum", "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "1", "label" : "Maximum", "displayorder" : 2 } , "exponent" : { "attrOrProp" : 2, "digest" : "Scale values exponentially", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "1", "label" : "Exponent", "displayorder" : 7 } , "steps" : { "attrOrProp" : 2, "digest" : "Divide the output into a number of discrete steps", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "0", "label" : "Steps", "displayorder" : 8 } , "displayName" : { "attrOrProp" : 2, "digest" : "DEPRECATED: Use the lower case 'displayname' instead", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 1, "touched" : 0, "type" : "symbol", "label" : "Display Name" } , "displayname" : { "attrOrProp" : 2, "digest" : "A more readable name for the parameter in an external RNBO target", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Display Name", "displayorder" : 14 } , "unit" : { "attrOrProp" : 2, "digest" : "A symbol to describe the unit of the parameter in an external RNBO target", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Unit", "displayorder" : 15 } , "tonormalized" : { "attrOrProp" : 2, "digest" : "Converts a real parameter value to its normalized form", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "label" : "To Normalized Expression", "displayorder" : 10 } , "fromnormalized" : { "attrOrProp" : 2, "digest" : "Converts a normalized parameter into its actual parameter value", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "label" : "From Normalized Expression", "displayorder" : 9 } , "order" : { "attrOrProp" : 2, "digest" : "Order in which initial parameter values will be sent out on patcher load. The order can be numeric or symbolic ('first' and 'last')", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "0", "label" : "Restore Order", "displayorder" : 12 } , "displayorder" : { "attrOrProp" : 2, "digest" : "Order in which parameters will show up in a list of all parameters. The order can be numeric or symbolic ('first' and 'last')", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "-", "label" : "Display Order", "displayorder" : 13 } , "sendinit" : { "attrOrProp" : 2, "digest" : "Send initial value", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "true", "label" : "Send Init", "displayorder" : 4 } , "ctlin" : { "attrOrProp" : 2, "digest" : "MIDI controller number to control this parameter.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "-1", "label" : "MIDI Controller Number.", "displayorder" : 16 } , "meta" : { "attrOrProp" : 2, "digest" : "A JSON formatted string containing metadata for use by the exported code", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Metadata", "displayorder" : 17 } , "nopreset" : { "attrOrProp" : 2, "digest" : "Do not add this value to the preset [DEPRECATED - USE @preset 0 instead].", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 1, "touched" : 0, "type" : "bool", "defaultValue" : "false" } , "preset" : { "attrOrProp" : 2, "digest" : "Add this value to the preset.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "true", "label" : "Include In Preset", "displayorder" : 11 } } , "inputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "defaultarg" : 2, "hot" : 1, "docked" : 0 } , { "name" : "normalizedvalue", "type" : "number", "digest" : "Set value normalized. ", "docked" : 0 } ], "outputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "defaultarg" : 2, "hot" : 1, "docked" : 0 } , { "name" : "normalized", "type" : "number", "digest" : "Normalized parameter value.", "docked" : 0 } ], "helpname" : "param", "aliasOf" : "param", "classname" : "param", "operator" : 0, "versionId" : -1661410411, "changesPatcherIO" : 0 } , "text" : "param decay @minimum 1 @maximum 5000 @value 200", "varname" : "decay" } } , { "box" : { "id" : "obj-3", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 2, "outlettype" : [ "", "" ], "patching_rect" : [ 621.499999999999773, 409.400000035762787, 310.0, 23.0 ], "rnbo_classname" : "param", "rnbo_extra_attributes" : { "ctlin" : 0.0, "order" : "" } , "rnbo_serial" : 7, "rnbo_uniqueid" : "attack", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "value" : { "attrOrProp" : 1, "digest" : "Parameter value", "defaultarg" : 2, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 1, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number", "defaultValue" : "10" } , "normalizedvalue" : { "attrOrProp" : 1, "digest" : "Set value normalized. ", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number" } , "reset" : { "attrOrProp" : 1, "digest" : "Reset param to initial value", "isalias" : 0, "aliases" : [ ], "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bang" } , "normalized" : { "attrOrProp" : 1, "digest" : "Normalized parameter value.", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "number" } , "name" : { "attrOrProp" : 2, "digest" : "Name of the parameter", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "label" : "Parameter Name", "mandatory" : 1 } , "enum" : { "attrOrProp" : 2, "digest" : "Use an enumerated output", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "list", "label" : "Enum Values", "displayorder" : 6 } , "minimum" : { "attrOrProp" : 2, "digest" : "Minimum value", "isalias" : 0, "aliases" : [ "min" ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "0", "label" : "Minimum", "displayorder" : 1 } , "min" : { "attrOrProp" : 2, "digest" : "Minimum value", "isalias" : 1, "aliasOf" : "minimum", "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "0", "label" : "Minimum", "displayorder" : 1 } , "maximum" : { "attrOrProp" : 2, "digest" : "Maximum value", "isalias" : 0, "aliases" : [ "max" ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "1", "label" : "Maximum", "displayorder" : 2 } , "max" : { "attrOrProp" : 2, "digest" : "Maximum value", "isalias" : 1, "aliasOf" : "maximum", "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "1", "label" : "Maximum", "displayorder" : 2 } , "exponent" : { "attrOrProp" : 2, "digest" : "Scale values exponentially", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "1", "label" : "Exponent", "displayorder" : 7 } , "steps" : { "attrOrProp" : 2, "digest" : "Divide the output into a number of discrete steps", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "0", "label" : "Steps", "displayorder" : 8 } , "displayName" : { "attrOrProp" : 2, "digest" : "DEPRECATED: Use the lower case 'displayname' instead", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 1, "touched" : 0, "type" : "symbol", "label" : "Display Name" } , "displayname" : { "attrOrProp" : 2, "digest" : "A more readable name for the parameter in an external RNBO target", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Display Name", "displayorder" : 14 } , "unit" : { "attrOrProp" : 2, "digest" : "A symbol to describe the unit of the parameter in an external RNBO target", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Unit", "displayorder" : 15 } , "tonormalized" : { "attrOrProp" : 2, "digest" : "Converts a real parameter value to its normalized form", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "label" : "To Normalized Expression", "displayorder" : 10 } , "fromnormalized" : { "attrOrProp" : 2, "digest" : "Converts a normalized parameter into its actual parameter value", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "label" : "From Normalized Expression", "displayorder" : 9 } , "order" : { "attrOrProp" : 2, "digest" : "Order in which initial parameter values will be sent out on patcher load. The order can be numeric or symbolic ('first' and 'last')", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "0", "label" : "Restore Order", "displayorder" : 12 } , "displayorder" : { "attrOrProp" : 2, "digest" : "Order in which parameters will show up in a list of all parameters. The order can be numeric or symbolic ('first' and 'last')", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "-", "label" : "Display Order", "displayorder" : 13 } , "sendinit" : { "attrOrProp" : 2, "digest" : "Send initial value", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "true", "label" : "Send Init", "displayorder" : 4 } , "ctlin" : { "attrOrProp" : 2, "digest" : "MIDI controller number to control this parameter.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "-1", "label" : "MIDI Controller Number.", "displayorder" : 16 } , "meta" : { "attrOrProp" : 2, "digest" : "A JSON formatted string containing metadata for use by the exported code", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Metadata", "displayorder" : 17 } , "nopreset" : { "attrOrProp" : 2, "digest" : "Do not add this value to the preset [DEPRECATED - USE @preset 0 instead].", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 1, "touched" : 0, "type" : "bool", "defaultValue" : "false" } , "preset" : { "attrOrProp" : 2, "digest" : "Add this value to the preset.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "true", "label" : "Include In Preset", "displayorder" : 11 } } , "inputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "defaultarg" : 2, "hot" : 1, "docked" : 0 } , { "name" : "normalizedvalue", "type" : "number", "digest" : "Set value normalized. ", "docked" : 0 } ], "outputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "defaultarg" : 2, "hot" : 1, "docked" : 0 } , { "name" : "normalized", "type" : "number", "digest" : "Normalized parameter value.", "docked" : 0 } ], "helpname" : "param", "aliasOf" : "param", "classname" : "param", "operator" : 0, "versionId" : -1661410411, "changesPatcherIO" : 0 } , "text" : "param attack @minimum 1 @maximum 2000 @value 10", "varname" : "attack" } } , { "box" : { "id" : "obj-11", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 1, "outlettype" : [ "signal" ], "patching_rect" : [ 590.499999999999773, 510.400000035762787, 33.0, 23.0 ], "rnbo_classname" : "sig~", "rnbo_serial" : 1, "rnbo_uniqueid" : "sig~_obj-11", "text" : "sig~" } } , { "box" : { "id" : "obj-12", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 590.499999999999773, 361.400000035762787, 391.0, 23.0 ], "rnbo_classname" : "expr", "rnbo_serial" : 4, "rnbo_uniqueid" : "expr_obj-12", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "reset" : { "attrOrProp" : 1, "digest" : "Reset all state and params to initial values", "isalias" : 0, "aliases" : [ ], "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bang" } , "in1" : { "attrOrProp" : 1, "digest" : "in1", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number" } , "out1" : { "attrOrProp" : 1, "digest" : "out1", "isalias" : 0, "aliases" : [ ], "settable" : 0, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "number" } , "expr" : { "attrOrProp" : 2, "digest" : "expr", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "doNotShowInMaxInspector" : 1 } , "hot" : { "attrOrProp" : 2, "digest" : "Trigger computation on all inlets.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "false" } , "safemath" : { "attrOrProp" : 2, "digest" : "Use safe math expressions (e.g.: division by 0 will not crash).", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "true" } , "nocache" : { "attrOrProp" : 2, "digest" : "Do not use parsing cache. This is only useful with very very big code sizes. Code generation will then take a looooong time.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "false" } } , "inputs" : [ { "name" : "in1", "type" : "number", "digest" : "in1", "hot" : 1, "docked" : 0 } ], "outputs" : [ { "name" : "out1", "type" : "number", "digest" : "out1", "docked" : 0 } ], "helpname" : "expr", "aliasOf" : "expr", "classname" : "expr", "operator" : 0, "versionId" : 835263063, "changesPatcherIO" : 0 } , "text" : "expr @expr out1 = in1 == 0 ? 0 : pow(10.\\, (-50. + (50 * in1 / 128.)) / 20.)" } } , { "box" : { "id" : "obj-10", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 2, "outlettype" : [ "", "" ], "patching_rect" : [ 281.5, 604.400000035762787, 124.0, 23.0 ], "rnbo_classname" : "bendin", "rnbo_serial" : 1, "rnbo_uniqueid" : "bendin_obj-10", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "bendmode" : { "attrOrProp" : 1, "digest" : "pitch bend mode", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "enum" : [ "lores", "float", "hires" ], "type" : "enum", "defaultValue" : "lores" } , "value" : { "attrOrProp" : 1, "digest" : "pitch bend", "isalias" : 0, "aliases" : [ ], "settable" : 0, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "number", "defaultValue" : "0" } , "channel" : { "attrOrProp" : 1, "digest" : "MIDI channel", "isalias" : 0, "aliases" : [ ], "settable" : 0, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "number", "defaultValue" : "0" } , "input" : { "attrOrProp" : 1, "digest" : "MIDI Input", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number", "defaultValue" : "0" } } , "inputs" : [ { "name" : "input", "type" : "number", "digest" : "MIDI Input", "hot" : 1, "docked" : 0 } ], "outputs" : [ { "name" : "value", "type" : "number", "digest" : "pitch bend", "docked" : 0 } , { "name" : "channel", "type" : "number", "digest" : "MIDI channel", "docked" : 0 } ], "helpname" : "bendin", "aliasOf" : "bendin", "classname" : "bendin", "operator" : 0, "versionId" : 749522998, "changesPatcherIO" : 1 } , "text" : "bendin @bendmode 1" } } , { "box" : { "id" : "obj-15", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 1, "outlettype" : [ "signal" ], "patching_rect" : [ 25.0, 693.400000035762787, 253.0, 23.0 ], "rnbo_classname" : "expr~", "rnbo_serial" : 2, "rnbo_uniqueid" : "expr~_obj-15", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "reset" : { "attrOrProp" : 1, "digest" : "Reset all state and params to initial values", "isalias" : 0, "aliases" : [ ], "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bang" } , "in1" : { "attrOrProp" : 1, "digest" : "in1", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number" } , "out1" : { "attrOrProp" : 1, "digest" : "out1", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "signal" } , "expr" : { "attrOrProp" : 2, "digest" : "expr", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol" } , "safemath" : { "attrOrProp" : 2, "digest" : "Use safe math expressions (e.g.: division by 0 will not crash).", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "true" } , "nocache" : { "attrOrProp" : 2, "digest" : "Do not use parsing cache. This is only useful with very very big code sizes. Code generation will then take a looooong time.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "false" } } , "inputs" : [ { "name" : "in1", "type" : "auto", "digest" : "in1", "hot" : 1, "docked" : 0 } ], "outputs" : [ { "name" : "out1", "type" : "signal", "digest" : "out1", "docked" : 0 } ], "helpname" : "expr~", "aliasOf" : "expr~", "classname" : "expr~", "operator" : 0, "versionId" : 527839773, "changesPatcherIO" : 0 } , "text" : "expr~ out1 = in1 < 0.5 ? 2. * in1 : 2. * (1. - in1)" } } , { "box" : { "id" : "obj-8", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 0, "patching_rect" : [ 24.0, 761.400000035762787, 44.0, 23.0 ], "rnbo_classname" : "out~", "rnbo_serial" : 1, "rnbo_uniqueid" : "out~_obj-8", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "in1" : { "attrOrProp" : 1, "digest" : "signal sent to outlet with index 1", "isalias" : 0, "aliases" : [ ], "settable" : 0, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "signal" } , "index" : { "attrOrProp" : 2, "digest" : "outlet number", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "mandatory" : 1 } , "comment" : { "attrOrProp" : 2, "digest" : "mouse over comment", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol" } , "meta" : { "attrOrProp" : 2, "digest" : "A JSON formatted string containing metadata for use by the exported code", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Metadata", "displayorder" : 3 } } , "inputs" : [ { "name" : "in1", "type" : "signal", "digest" : "signal sent to outlet with index 1", "displayName" : "", "hot" : 1, "docked" : 0 } ], "outputs" : [ ], "helpname" : "out~", "aliasOf" : "out~", "classname" : "out~", "operator" : 0, "versionId" : 1989326771, "changesPatcherIO" : 1 } , "text" : "out~ 1" } } , { "box" : { "id" : "obj-7", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 4, "outlettype" : [ "", "", "", "" ], "patching_rect" : [ 84.5, 126.400000035762787, 70.0, 23.0 ], "rnbo_classname" : "notein", "rnbo_serial" : 2, "rnbo_uniqueid" : "notein_obj-7", "text" : "notein" } } ], "lines" : [ { "patchline" : { "destination" : [ "obj-97", 1 ], "source" : [ "obj-1", 3 ] } } , { "patchline" : { "destination" : [ "obj-97", 0 ], "source" : [ "obj-1", 2 ] } } , { "patchline" : { "destination" : [ "obj-49", 1 ], "source" : [ "obj-10", 0 ] } } , { "patchline" : { "destination" : [ "obj-13", 0 ], "source" : [ "obj-11", 0 ] } } , { "patchline" : { "destination" : [ "obj-11", 0 ], "order" : 1, "source" : [ "obj-12", 0 ] } } , { "patchline" : { "destination" : [ "obj-37", 0 ], "order" : 0, "source" : [ "obj-12", 0 ] } } , { "patchline" : { "destination" : [ "obj-1", 1 ], "source" : [ "obj-13", 1 ] } } , { "patchline" : { "destination" : [ "obj-18", 1 ], "source" : [ "obj-13", 0 ] } } , { "patchline" : { "destination" : [ "obj-18", 0 ], "source" : [ "obj-15", 0 ] } } , { "patchline" : { "destination" : [ "obj-13", 3 ], "source" : [ "obj-17", 0 ] } } , { "patchline" : { "destination" : [ "obj-8", 0 ], "source" : [ "obj-18", 0 ] } } , { "patchline" : { "destination" : [ "obj-41", 0 ], "source" : [ "obj-19", 0 ] } } , { "patchline" : { "destination" : [ "obj-13", 2 ], "source" : [ "obj-2", 0 ] } } , { "patchline" : { "destination" : [ "obj-30", 0 ], "source" : [ "obj-21", 0 ] } } , { "patchline" : { "destination" : [ "obj-36", 2 ], "source" : [ "obj-22", 1 ] } } , { "patchline" : { "destination" : [ "obj-28", 0 ], "source" : [ "obj-25", 0 ] } } , { "patchline" : { "destination" : [ "obj-30", 1 ], "source" : [ "obj-26", 0 ] } } , { "patchline" : { "destination" : [ "obj-42", 2 ], "source" : [ "obj-28", 0 ] } } , { "patchline" : { "destination" : [ "obj-33", 2 ], "source" : [ "obj-29", 0 ] } } , { "patchline" : { "destination" : [ "obj-13", 1 ], "source" : [ "obj-3", 0 ] } } , { "patchline" : { "destination" : [ "obj-31", 0 ], "source" : [ "obj-30", 0 ] } } , { "patchline" : { "destination" : [ "obj-51", 0 ], "source" : [ "obj-31", 0 ] } } , { "patchline" : { "destination" : [ "obj-25", 0 ], "order" : 0, "source" : [ "obj-33", 0 ] } } , { "patchline" : { "destination" : [ "obj-42", 1 ], "order" : 1, "source" : [ "obj-33", 0 ] } } , { "patchline" : { "destination" : [ "obj-9", 0 ], "source" : [ "obj-34", 0 ] } } , { "patchline" : { "destination" : [ "obj-33", 1 ], "source" : [ "obj-36", 0 ] } } , { "patchline" : { "destination" : [ "obj-1", 0 ], "source" : [ "obj-37", 0 ] } } , { "patchline" : { "destination" : [ "obj-40", 0 ], "source" : [ "obj-38", 0 ] } } , { "patchline" : { "destination" : [ "obj-13", 4 ], "source" : [ "obj-4", 0 ] } } , { "patchline" : { "destination" : [ "obj-31", 1 ], "source" : [ "obj-40", 0 ] } } , { "patchline" : { "destination" : [ "obj-36", 0 ], "source" : [ "obj-41", 2 ] } } , { "patchline" : { "destination" : [ "obj-36", 1 ], "source" : [ "obj-41", 1 ] } } , { "patchline" : { "destination" : [ "obj-47", 0 ], "source" : [ "obj-41", 0 ] } } , { "patchline" : { "destination" : [ "obj-49", 0 ], "source" : [ "obj-42", 0 ] } } , { "patchline" : { "destination" : [ "obj-33", 0 ], "source" : [ "obj-47", 0 ] } } , { "patchline" : { "destination" : [ "obj-6", 0 ], "source" : [ "obj-49", 0 ] } } , { "patchline" : { "destination" : [ "obj-19", 0 ], "source" : [ "obj-50", 0 ] } } , { "patchline" : { "destination" : [ "obj-36", 3 ], "source" : [ "obj-51", 0 ] } } , { "patchline" : { "destination" : [ "obj-15", 0 ], "source" : [ "obj-6", 0 ] } } , { "patchline" : { "destination" : [ "obj-12", 0 ], "source" : [ "obj-60", 1 ] } } , { "patchline" : { "destination" : [ "obj-19", 1 ], "source" : [ "obj-7", 0 ] } } , { "patchline" : { "destination" : [ "obj-50", 0 ], "source" : [ "obj-7", 1 ] } } , { "patchline" : { "destination" : [ "obj-42", 0 ], "source" : [ "obj-9", 0 ] } } , { "patchline" : { "destination" : [ "obj-98", 0 ], "source" : [ "obj-97", 0 ] } } , { "patchline" : { "destination" : [ "obj-51", 1 ], "midpoints" : [ 706.666666666666288, 769.400000035762787, 567.0, 769.400000035762787, 567.0, 349.400000035762787, 542.5, 349.400000035762787 ], "source" : [ "obj-98", 0 ] } } ] } , "patching_rect" : [ 34.400000095367432, 773.799995183944702, 232.0, 23.0 ], "rnbo_classname" : "p", "rnbo_serial" : 1, "rnbo_uniqueid" : "voice", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "glidemode" : { "attrOrProp" : 1, "digest" : "glidemode", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number" } , "glidecurve" : { "attrOrProp" : 1, "digest" : "glidecurve", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number" } , "glissando" : { "attrOrProp" : 1, "digest" : "glissando", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number" } , "attack" : { "attrOrProp" : 1, "digest" : "attack", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number" } , "decay" : { "attrOrProp" : 1, "digest" : "decay", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number" } , "sustain" : { "attrOrProp" : 1, "digest" : "sustain", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number" } , "release" : { "attrOrProp" : 1, "digest" : "release", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number" } , "target" : { "attrOrProp" : 1, "digest" : "target", "isalias" : 0, "aliases" : [ ], "settable" : 0, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "0" } , "mute" : { "attrOrProp" : 1, "digest" : "mute", "isalias" : 0, "aliases" : [ ], "attachable" : 1, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "list" } , "__probingout1" : { "attrOrProp" : 1, "digest" : "__probingout1", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "signal" } , "out1" : { "attrOrProp" : 1, "digest" : "out1", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "signal" } , "voicestatus" : { "attrOrProp" : 1, "digest" : "voicestatus", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "outlet" : 1, "type" : "list" } , "midiin" : { "attrOrProp" : 1, "digest" : "midiin", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "inlet" : 1, "type" : "number" } , "polyphony" : { "attrOrProp" : 2, "digest" : "Polyphony of the subpatcher.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "number", "defaultValue" : "-1" } , "exposevoiceparams" : { "attrOrProp" : 2, "digest" : "Expose per voice versions of the contained parameters (only valid in polyphonic subpatchers).", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "bool", "defaultValue" : "false" } , "title" : { "attrOrProp" : 2, "digest" : "Title of the subpatcher", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "doNotShowInMaxInspector" : 1 } , "file" : { "attrOrProp" : 2, "digest" : "rnbo file to load", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "doNotShowInMaxInspector" : 1 } , "voicecontrol" : { "attrOrProp" : 2, "digest" : "Chooses the way that polyphonic voices are controlled. 'simple' (or 'midi') will automatically allocate voices for \tincoming MIDI notes. Setting it to 'user' (or 'none') will switch off MIDI \tvoice allocation and start with all voices unmuted.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "enum" : [ "simple", "user" ], "type" : "enum", "defaultValue" : "simple" } , "notecontroller" : { "attrOrProp" : 2, "digest" : "DEPRECATED. Use voicecontrol instead.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "doNotShowInMaxInspector" : 1 } , "receivemode" : { "attrOrProp" : 2, "digest" : "Do receive~ objects get the signal from a send~ inside the patcher directly (without latency), or compensated (with latency, aligned with all other voices).", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "enum" : [ "local", "compensated" ], "type" : "enum", "defaultValue" : "local" } , "args" : { "attrOrProp" : 2, "digest" : "Replacement args for the subpatcher, everything named #1, #2 etc. will be replaced with the according argument.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "doNotShowInMaxInspector" : 1 } , "uidstyle" : { "attrOrProp" : 2, "digest" : "Behavior of #0 unique ID. auto (default) means abstractions get a local UID, local: start a new local UID, parent: use the one from the parent patcher", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "enum" : [ "auto", "local", "parent", "global" ], "type" : "enum", "defaultValue" : "auto" } } , "inputs" : [ { "name" : "midiin", "type" : "number", "digest" : "midiin", "hot" : 1, "docked" : 0 } ], "outputs" : [ { "name" : "out1", "type" : "signal", "digest" : "out1", "displayName" : "", "docked" : 0 } , { "name" : "voicestatus", "type" : "list", "digest" : "voicestatus", "docked" : 0 } ], "helpname" : "patcher", "aliasOf" : "rnbo", "classname" : "p", "operator" : 0, "versionId" : 426236520, "changesPatcherIO" : 0 } , "text" : "p voice @polyphony 1 @voicecontrol none", "varname" : "voice" } } , { "box" : { "id" : "obj-4", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 449.499996840953827, 714.599995315074921, 55.0, 23.0 ], "rnbo_classname" : "set", "rnbo_serial" : 1, "rnbo_uniqueid" : "set_obj-4", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "name" : { "attrOrProp" : 2, "digest" : "attribute/param to control", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "mandatory" : 1 } } , "inputs" : [ { "name" : "input", "type" : [ "bang", "number", "list", "signal" ], "digest" : "attribute or parameter value (bang, number, list)", "hot" : 1, "docked" : 0 } ], "outputs" : [ { "name" : "output", "type" : [ "bang", "number", "list", "signal" ], "digest" : "connect to first inlet of gen or subpatcher", "docked" : 0 } ], "helpname" : "set", "aliasOf" : "set", "classname" : "set", "operator" : 0, "versionId" : 1197449671, "changesPatcherIO" : 0 } , "text" : "set mute" } } , { "box" : { "id" : "obj-6", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 1, "outlettype" : [ "" ], "patching_rect" : [ 864.599993586540222, 714.599995315074921, 59.0, 23.0 ], "rnbo_classname" : "set", "rnbo_serial" : 2, "rnbo_uniqueid" : "set_obj-6", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "name" : { "attrOrProp" : 2, "digest" : "attribute/param to control", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "touched" : 0, "type" : "symbol", "mandatory" : 1 } } , "inputs" : [ { "name" : "input", "type" : [ "bang", "number", "list", "signal" ], "digest" : "attribute or parameter value (bang, number, list)", "hot" : 1, "docked" : 0 } ], "outputs" : [ { "name" : "output", "type" : [ "bang", "number", "list", "signal" ], "digest" : "connect to first inlet of gen or subpatcher", "docked" : 0 } ], "helpname" : "set", "aliasOf" : "set", "classname" : "set", "operator" : 0, "versionId" : 1197449671, "changesPatcherIO" : 0 } , "text" : "set target" } } ], "lines" : [ { "patchline" : { "destination" : [ "obj-14", 0 ], "source" : [ "obj-1", 0 ] } } , { "patchline" : { "destination" : [ "obj-17", 2 ], "midpoints" : [ 256.900000095367432, 808.0, 934.0, 808.0, 934.0, 714.0, 934.0, 714.0, 934.0, 112.0, 874.099993586540222, 112.0 ], "order" : 1, "source" : [ "obj-1", 1 ] } } , { "patchline" : { "destination" : [ "obj-2", 0 ], "order" : 0, "source" : [ "obj-1", 1 ] } } , { "patchline" : { "destination" : [ "obj-1", 0 ], "order" : 1, "source" : [ "obj-17", 0 ] } } , { "patchline" : { "destination" : [ "obj-4", 0 ], "source" : [ "obj-17", 1 ] } } , { "patchline" : { "destination" : [ "obj-6", 0 ], "source" : [ "obj-17", 2 ] } } , { "patchline" : { "destination" : [ "obj-91", 0 ], "order" : 0, "source" : [ "obj-17", 0 ] } } , { "patchline" : { "destination" : [ "obj-17", 0 ], "source" : [ "obj-3", 0 ] } } , { "patchline" : { "destination" : [ "obj-1", 0 ], "source" : [ "obj-4", 0 ] } } , { "patchline" : { "destination" : [ "obj-1", 0 ], "source" : [ "obj-6", 0 ] } } , { "patchline" : { "destination" : [ "obj-17", 1 ], "source" : [ "obj-9", 0 ] } } ] } , "patching_rect" : [ 38.325983374696165, 290.0, 40.0, 22.0 ], "rnboattrcache" : { "stealmode" : { "label" : "stealmode", "isEnum" : 1, "parsestring" : "\"highest\" \"lowest\" \"first\" \"last\" \"off\"" } , "voice/glidemode" : { "label" : "glidemode", "isEnum" : 1, "parsestring" : "\"LCR\" \"LCT\"" } , "voice/glidecurve" : { "label" : "glidecurve", "isEnum" : 0, "parsestring" : "" } , "voice/glissando" : { "label" : "glissando", "isEnum" : 1, "parsestring" : "\"off\" \"on\"" } , "voice/attack" : { "label" : "attack", "isEnum" : 0, "parsestring" : "" } , "voice/decay" : { "label" : "decay", "isEnum" : 0, "parsestring" : "" } , "voice/sustain" : { "label" : "sustain", "isEnum" : 0, "parsestring" : "" } , "voice/release" : { "label" : "release", "isEnum" : 0, "parsestring" : "" } } , "rnboversion" : "1.5.0-dev", "saved_attribute_attributes" : { "valueof" : { "parameter_invisible" : 1, "parameter_longname" : "rnbo~", "parameter_modmode" : 0, "parameter_shortname" : "rnbo~", "parameter_type" : 3 } } , "saved_object_attributes" : { "autosave" : 0, "parameter_enable" : 1, "uuid" : "550ba765-d836-11ec-a765-acde48001122" } , "snapshot" : { "filetype" : "C74Snapshot", "version" : 2, "minorversion" : 0, "name" : "snapshotlist", "origin" : "rnbo~", "type" : "list", "subtype" : "Undefined", "embed" : 1, "snapshotlist" : { "current_snapshot" : -1, "entries" : [ { "filetype" : "C74Snapshot", "version" : 2, "minorversion" : 0, "name" : "untitled", "origin" : "untitled", "type" : "rnbo", "subtype" : "", "embed" : 0, "fileref" : { "name" : "untitled", "filename" : "untitled.maxsnap", "filepath" : "~/Documents/Max 8/Snapshots", "filepos" : -1, "snapshotfileid" : "f9b0b22601b5365830d91c5f9637c474" } } ] } } , "text" : "rnbo~", "varname" : "rnbo~" } } , { "box" : { "fontname" : "Lato Light", "fontsize" : 14.0, "id" : "obj-5", "maxclass" : "comment", "numinlets" : 1, "numoutlets" : 0, "patching_rect" : [ 12.0, 49.0, 424.0, 23.0 ], "text" : "Custom Voice modes with Codebox : Mono legato modes" } } , { "box" : { "fontname" : "Lato", "fontsize" : 24.0, "id" : "obj-3", "maxclass" : "comment", "numinlets" : 1, "numoutlets" : 0, "patching_rect" : [ 12.0, 15.0, 236.0, 35.0 ], "text" : "RNBO : Polyphony " } } ], "lines" : [ { "patchline" : { "destination" : [ "obj-12", 1 ], "order" : 0, "source" : [ "obj-1", 0 ] } } , { "patchline" : { "destination" : [ "obj-12", 0 ], "order" : 1, "source" : [ "obj-1", 0 ] } } , { "patchline" : { "destination" : [ "obj-21", 0 ], "source" : [ "obj-1", 1 ] } } , { "patchline" : { "destination" : [ "obj-65", 0 ], "source" : [ "obj-1", 2 ] } } , { "patchline" : { "destination" : [ "obj-1", 1 ], "source" : [ "obj-10", 0 ] } } , { "patchline" : { "destination" : [ "obj-82", 0 ], "source" : [ "obj-102", 0 ] } } , { "patchline" : { "destination" : [ "obj-1", 0 ], "source" : [ "obj-13", 0 ] } } , { "patchline" : { "destination" : [ "obj-1", 0 ], "source" : [ "obj-2", 0 ] } } , { "patchline" : { "destination" : [ "obj-11", 0 ], "source" : [ "obj-21", 0 ] } } , { "patchline" : { "destination" : [ "obj-1", 0 ], "source" : [ "obj-28", 0 ] } } , { "patchline" : { "destination" : [ "obj-40", 0 ], "source" : [ "obj-31", 0 ] } } , { "patchline" : { "destination" : [ "obj-28", 3 ], "hidden" : 1, "source" : [ "obj-4", 3 ] } } , { "patchline" : { "destination" : [ "obj-28", 2 ], "hidden" : 1, "source" : [ "obj-4", 2 ] } } , { "patchline" : { "destination" : [ "obj-28", 1 ], "hidden" : 1, "source" : [ "obj-4", 1 ] } } , { "patchline" : { "destination" : [ "obj-28", 0 ], "hidden" : 1, "source" : [ "obj-4", 0 ] } } , { "patchline" : { "destination" : [ "obj-10", 2 ], "source" : [ "obj-40", 0 ] } } , { "patchline" : { "destination" : [ "obj-40", 1 ], "source" : [ "obj-44", 0 ] } } , { "patchline" : { "destination" : [ "obj-102", 0 ], "source" : [ "obj-65", 0 ] } } , { "patchline" : { "destination" : [ "obj-1", 0 ], "source" : [ "obj-7", 0 ] } } , { "patchline" : { "destination" : [ "obj-1", 1 ], "source" : [ "obj-9", 0 ] } } ], "parameters" : { "obj-1" : [ "rnbo~", "rnbo~", 0 ], "obj-31" : [ "glide time course", "glide time", 0 ], "obj-44" : [ "live.text", "live.text", 0 ], "parameterbanks" : { "0" : { "index" : 0, "name" : "", "parameters" : [ "-", "-", "-", "-", "-", "-", "-", "-" ] } } , "inherited_shortname" : 1 } , "dependency_cache" : [ { "name" : "untitled.maxsnap", "bootpath" : "~/Documents/Max 8/Snapshots", "patcherrelativepath" : "../Documents/Max 8/Snapshots", "type" : "mx@s", "implicit" : 1 } ], "autosave" : 0 } }