{ "patcher" : { "fileversion" : 1, "appversion" : { "major" : 8, "minor" : 5, "revision" : 0, "architecture" : "x64", "modernui" : 1 } , "classnamespace" : "box", "rect" : [ 52.0, 116.0, 470.0, 595.0 ], "bglocked" : 0, "openinpresentation" : 0, "default_fontsize" : 12.0, "default_fontface" : 0, "default_fontname" : "Arial", "gridonopen" : 1, "gridsize" : [ 15.0, 15.0 ], "gridsnaponopen" : 1, "objectsnaponopen" : 1, "statusbarvisible" : 2, "toolbarvisible" : 1, "lefttoolbarpinned" : 0, "toptoolbarpinned" : 0, "righttoolbarpinned" : 0, "bottomtoolbarpinned" : 0, "toolbars_unpinned_last_save" : 0, "tallnewobj" : 0, "boxanimatetime" : 200, "enablehscroll" : 1, "enablevscroll" : 1, "devicewidth" : 0.0, "description" : "", "digest" : "", "tags" : "", "style" : "", "subpatcher_template" : "", "assistshowspatchername" : 0, "boxes" : [ { "box" : { "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 ", "textjustification" : 0 } } , { "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_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" : 8, "minor" : 5, "revision" : 0, "architecture" : "x64", "modernui" : 1 } , "classnamespace" : "box", "rect" : [ 59.0, 117.0, 477.0, 392.0 ], "bglocked" : 0, "openinpresentation" : 0, "default_fontsize" : 12.0, "default_fontface" : 0, "default_fontname" : "Arial", "gridonopen" : 1, "gridsize" : [ 15.0, 15.0 ], "gridsnaponopen" : 1, "objectsnaponopen" : 1, "statusbarvisible" : 2, "toolbarvisible" : 1, "lefttoolbarpinned" : 0, "toptoolbarpinned" : 0, "righttoolbarpinned" : 0, "bottomtoolbarpinned" : 0, "toolbars_unpinned_last_save" : 0, "tallnewobj" : 0, "boxanimatetime" : 200, "enablehscroll" : 1, "enablevscroll" : 1, "devicewidth" : 0.0, "description" : "", "digest" : "", "tags" : "", "style" : "", "subpatcher_template" : "", "assistshowspatchername" : 0, "boxes" : [ { "box" : { "id" : "obj-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 ], "saved_object_attributes" : { "description" : "", "digest" : "", "globalpatchername" : "", "tags" : "" } , "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_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" : 8, "minor" : 5, "revision" : 0, "architecture" : "x64", "modernui" : 1 } , "classnamespace" : "box", "rect" : [ 84.0, 144.0, 640.0, 480.0 ], "bglocked" : 0, "openinpresentation" : 0, "default_fontsize" : 12.0, "default_fontface" : 0, "default_fontname" : "Arial", "gridonopen" : 1, "gridsize" : [ 15.0, 15.0 ], "gridsnaponopen" : 1, "objectsnaponopen" : 1, "statusbarvisible" : 2, "toolbarvisible" : 1, "lefttoolbarpinned" : 0, "toptoolbarpinned" : 0, "righttoolbarpinned" : 0, "bottomtoolbarpinned" : 0, "toolbars_unpinned_last_save" : 0, "tallnewobj" : 0, "boxanimatetime" : 200, "enablehscroll" : 1, "enablevscroll" : 1, "devicewidth" : 0.0, "description" : "", "digest" : "", "tags" : "", "style" : "", "subpatcher_template" : "", "assistshowspatchername" : 0, "boxes" : [ { "box" : { "id" : "obj-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 ], "saved_object_attributes" : { "description" : "", "digest" : "", "globalpatchername" : "", "tags" : "" } , "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" : 8, "minor" : 5, "revision" : 0, "architecture" : "x64", "modernui" : 1 } , "classnamespace" : "box", "rect" : [ 0.0, 0.0, 640.0, 480.0 ], "bglocked" : 0, "openinpresentation" : 0, "default_fontsize" : 12.0, "default_fontface" : 0, "default_fontname" : "Arial", "gridonopen" : 1, "gridsize" : [ 15.0, 15.0 ], "gridsnaponopen" : 1, "objectsnaponopen" : 1, "statusbarvisible" : 2, "toolbarvisible" : 1, "lefttoolbarpinned" : 0, "toptoolbarpinned" : 0, "righttoolbarpinned" : 0, "bottomtoolbarpinned" : 0, "toolbars_unpinned_last_save" : 0, "tallnewobj" : 0, "boxanimatetime" : 200, "enablehscroll" : 1, "enablevscroll" : 1, "devicewidth" : 0.0, "description" : "", "digest" : "", "tags" : "", "style" : "", "subpatcher_template" : "", "assistshowspatchername" : 0, "boxes" : [ { "box" : { "id" : "obj-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 ], "saved_object_attributes" : { "description" : "", "digest" : "", "globalpatchername" : "", "tags" : "" } , "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" : "" } ] } , "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 3, "outletInfo" : { "IOInfo" : [ { "type" : "signal", "index" : 1, "tag" : "out1" } , { "type" : "midi", "index" : -1, "tag" : "" } ] } , "outlettype" : [ "signal", "int", "list" ], "patcher" : { "fileversion" : 1, "appversion" : { "major" : 8, "minor" : 5, "revision" : 0, "architecture" : "x64", "modernui" : 1 } , "classnamespace" : "rnbo", "rect" : [ 34.0, 100.0, 999.0, 848.0 ], "bglocked" : 0, "openinpresentation" : 0, "default_fontsize" : 12.0, "default_fontface" : 0, "default_fontname" : "Lato", "gridonopen" : 1, "gridsize" : [ 15.0, 15.0 ], "gridsnaponopen" : 1, "objectsnaponopen" : 1, "statusbarvisible" : 2, "toolbarvisible" : 1, "lefttoolbarpinned" : 0, "toptoolbarpinned" : 0, "righttoolbarpinned" : 0, "bottomtoolbarpinned" : 0, "toolbars_unpinned_last_save" : 0, "tallnewobj" : 0, "boxanimatetime" : 200, "enablehscroll" : 1, "enablevscroll" : 1, "devicewidth" : 0.0, "description" : "", "digest" : "", "tags" : "", "style" : "", "subpatcher_template" : "", "assistshowspatchername" : 0, "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" : 1, "numoutlets" : 2, "outlettype" : [ "", "" ], "patching_rect" : [ 449.499996840953827, 90.399996817111969, 284.0, 23.0 ], "rnbo_classname" : "param", "rnbo_extra_attributes" : { "ctlin" : 0.0, "order" : "0", "tonormalized" : "", "sendinit" : 1, "steps" : 0.0, "maximum" : 1.0, "fromnormalized" : "", "meta" : "", "exponent" : 1.0, "minimum" : 0.0, "preset" : 1, "unit" : "", "displayname" : "", "value" : 0.0 } , "rnbo_serial" : 1, "rnbo_uniqueid" : "stealmode", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "value" : { "attrOrProp" : 2, "digest" : "Set initial value", "defaultarg" : 2, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "number", "defaultValue" : "0", "label" : "Initial Value", "displayorder" : 3 } , "reset" : { "attrOrProp" : 1, "digest" : "Reset param to initial value", "isalias" : 0, "aliases" : [ ], "attachable" : 1, "isparam" : 0, "deprecated" : 0, "type" : "bang" } , "normalized" : { "attrOrProp" : 1, "digest" : "Normalized parameter value.", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 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, "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, "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, "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, "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, "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, "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, "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, "type" : "number", "defaultValue" : "0", "label" : "Steps", "displayorder" : 8 } , "displayname" : { "attrOrProp" : 2, "digest" : "A more readable name for the parameter in an external RNBO target", "isalias" : 0, "aliases" : [ "displayName" ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Display Name", "displayorder" : 13 } , "displayName" : { "attrOrProp" : 2, "digest" : "A more readable name for the parameter in an external RNBO target", "isalias" : 1, "aliasOf" : "displayname", "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Display Name", "displayorder" : 13 } , "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, "type" : "symbol", "defaultValue" : "", "label" : "Unit", "displayorder" : 14 } , "tonormalized" : { "attrOrProp" : 2, "digest" : "Converts a real parameter value to its normalized form.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 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, "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, "type" : "symbol", "defaultValue" : "0", "label" : "Restore Order", "displayorder" : 12 } , "sendinit" : { "attrOrProp" : 2, "digest" : "Send initial value", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 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, "type" : "number", "label" : "MIDI Controller Number.", "displayorder" : 15 } , "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, "type" : "symbol", "defaultValue" : "", "label" : "Metadata", "displayorder" : 16 } , "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, "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, "type" : "bool", "defaultValue" : "true", "label" : "Include In Preset", "displayorder" : 11 } } , "inputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "hot" : 1, "docked" : 0 } ], "outputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "hot" : 1, "docked" : 0 } , { "name" : "normalized", "type" : "number", "digest" : "Normalized parameter value.", "docked" : 0 } ], "helpname" : "param", "aliasOf" : "param", "classname" : "param", "operator" : 0, "versionId" : 1354159517, "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", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "tag" : { "attrOrProp" : 2, "digest" : "tag to send messages to", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "symbol", "mandatory" : 1 } } , "inputs" : [ { "name" : "input", "type" : [ "bang", "number", "list" ], "digest" : "number or list to send out.", "hot" : 1, "docked" : 0 } ], "outputs" : [ ], "helpname" : "outport", "aliasOf" : "outport", "classname" : "outport", "operator" : 0, "versionId" : 1009344317, "changesPatcherIO" : 0 } , "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}\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" : "Menlo", "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" : { "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}\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 } , "rnbo_serial" : 1, "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, "type" : "bang" } , "in1" : { "attrOrProp" : 1, "digest" : "in1", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "inlet" : 1, "type" : "number" } , "in2" : { "attrOrProp" : 1, "digest" : "in2", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "inlet" : 1, "type" : "number" } , "in3" : { "attrOrProp" : 1, "digest" : "in3", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "inlet" : 1, "type" : "list" } , "out1" : { "attrOrProp" : 1, "digest" : "out1", "isalias" : 0, "aliases" : [ ], "settable" : 0, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "outlet" : 1, "type" : "number" } , "out2" : { "attrOrProp" : 1, "digest" : "out2", "isalias" : 0, "aliases" : [ ], "settable" : 0, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "outlet" : 1, "type" : "list" } , "out3" : { "attrOrProp" : 1, "digest" : "out3", "isalias" : 0, "aliases" : [ ], "settable" : 0, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "outlet" : 1, "type" : "number" } , "expr" : { "attrOrProp" : 2, "digest" : "expr", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 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, "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" : 982334684, "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_extra_attributes" : { "comment" : "" } , "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, "inlet" : 1, "type" : "signal" } , "index" : { "attrOrProp" : 2, "digest" : "outlet number", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "number", "mandatory" : 1 } , "comment" : { "attrOrProp" : 2, "digest" : "mouse over comment", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "symbol" } } , "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" : 2063414894, "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" : 8, "minor" : 5, "revision" : 0, "architecture" : "x64", "modernui" : 1 } , "classnamespace" : "rnbo", "rect" : [ 47.0, 105.0, 1074.0, 814.0 ], "bglocked" : 0, "openinpresentation" : 0, "default_fontsize" : 12.0, "default_fontface" : 0, "default_fontname" : "Lato", "gridonopen" : 1, "gridsize" : [ 15.0, 15.0 ], "gridsnaponopen" : 1, "objectsnaponopen" : 1, "statusbarvisible" : 2, "toolbarvisible" : 1, "lefttoolbarpinned" : 0, "toptoolbarpinned" : 0, "righttoolbarpinned" : 0, "bottomtoolbarpinned" : 0, "toolbars_unpinned_last_save" : 0, "tallnewobj" : 0, "boxanimatetime" : 200, "enablehscroll" : 1, "enablevscroll" : 1, "devicewidth" : 0.0, "description" : "", "digest" : "", "tags" : "", "style" : "", "subpatcher_template" : "", "assistshowspatchername" : 0, "title" : "untitled", "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_extra_attributes" : { "hot" : 0 } , "rnbo_serial" : 2, "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", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "inlet" : 1, "type" : "number", "defaultValue" : "1" } , "out" : { "attrOrProp" : 1, "digest" : "Output", "isalias" : 0, "aliases" : [ ], "settable" : 0, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "outlet" : 1, "type" : "signal" } , "in1" : { "attrOrProp" : 1, "digest" : "Input 1", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "inlet" : 1, "type" : "signal" } , "in2" : { "attrOrProp" : 1, "digest" : "Input 2", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "inlet" : 1, "type" : "signal" } , "choices" : { "attrOrProp" : 2, "digest" : "Number of inputs", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "number", "defaultValue" : "1" } } , "inputs" : [ { "name" : "onoff", "type" : "auto", "digest" : "Turns Input Off or Routes to Output", "hot" : 1, "docked" : 0 } , { "name" : "in1", "type" : "signal", "digest" : "Input 1", "docked" : 0 } , { "name" : "in2", "type" : "signal", "digest" : "Input 2", "docked" : 0 } ], "outputs" : [ { "name" : "out", "type" : "signal", "digest" : "Output", "docked" : 0 } ], "helpname" : "selector~", "aliasOf" : "selector~", "classname" : "selector~", "operator" : 0, "versionId" : -990475044, "changesPatcherIO" : 0 } , "text" : "selector~ 2" } } , { "box" : { "id" : "obj-34", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 2, "outlettype" : [ "", "" ], "patching_rect" : [ 202.5, 515.400000035762787, 170.0, 23.0 ], "rnbo_classname" : "param", "rnbo_extra_attributes" : { "ctlin" : 0.0, "order" : "0", "tonormalized" : "", "sendinit" : 1, "steps" : 0.0, "maximum" : 1.0, "fromnormalized" : "", "meta" : "", "exponent" : 1.0, "minimum" : 0.0, "preset" : 1, "unit" : "", "displayname" : "", "value" : 0.0 } , "rnbo_serial" : 8, "rnbo_uniqueid" : "glissando", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "value" : { "attrOrProp" : 2, "digest" : "Set initial value", "defaultarg" : 2, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "number", "defaultValue" : "0", "label" : "Initial Value", "displayorder" : 3 } , "reset" : { "attrOrProp" : 1, "digest" : "Reset param to initial value", "isalias" : 0, "aliases" : [ ], "attachable" : 1, "isparam" : 0, "deprecated" : 0, "type" : "bang" } , "normalized" : { "attrOrProp" : 1, "digest" : "Normalized parameter value.", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 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, "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, "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, "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, "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, "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, "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, "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, "type" : "number", "defaultValue" : "0", "label" : "Steps", "displayorder" : 8 } , "displayname" : { "attrOrProp" : 2, "digest" : "A more readable name for the parameter in an external RNBO target", "isalias" : 0, "aliases" : [ "displayName" ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Display Name", "displayorder" : 13 } , "displayName" : { "attrOrProp" : 2, "digest" : "A more readable name for the parameter in an external RNBO target", "isalias" : 1, "aliasOf" : "displayname", "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Display Name", "displayorder" : 13 } , "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, "type" : "symbol", "defaultValue" : "", "label" : "Unit", "displayorder" : 14 } , "tonormalized" : { "attrOrProp" : 2, "digest" : "Converts a real parameter value to its normalized form.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 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, "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, "type" : "symbol", "defaultValue" : "0", "label" : "Restore Order", "displayorder" : 12 } , "sendinit" : { "attrOrProp" : 2, "digest" : "Send initial value", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 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, "type" : "number", "label" : "MIDI Controller Number.", "displayorder" : 15 } , "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, "type" : "symbol", "defaultValue" : "", "label" : "Metadata", "displayorder" : 16 } , "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, "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, "type" : "bool", "defaultValue" : "true", "label" : "Include In Preset", "displayorder" : 11 } } , "inputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "hot" : 1, "docked" : 0 } ], "outputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "hot" : 1, "docked" : 0 } , { "name" : "normalized", "type" : "number", "digest" : "Normalized parameter value.", "docked" : 0 } ], "helpname" : "param", "aliasOf" : "param", "classname" : "param", "operator" : 0, "versionId" : 1354159517, "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_extra_attributes" : { "scalename" : "", "filter" : 1.0 } , "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, "inlet" : 1, "type" : "number" } , "tuning" : { "attrOrProp" : 1, "digest" : "Set base frequency", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "inlet" : 1, "type" : "number" } , "scale" : { "attrOrProp" : 1, "digest" : "Scala scl formatted list", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "type" : "list" } , "map" : { "attrOrProp" : 1, "digest" : "Scala kbm formatted list", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 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, "type" : "number", "defaultValue" : "69" } , "mid" : { "attrOrProp" : 1, "digest" : "Middle note where scale degree 0 is mapped", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 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, "type" : "number", "defaultValue" : "440" } , "out" : { "attrOrProp" : 1, "digest" : "Frequency (Hz)", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "outlet" : 1, "type" : "signal" } , "scalename" : { "attrOrProp" : 2, "digest" : "Scale Name", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "symbol" } , "filter" : { "attrOrProp" : 2, "digest" : "Filter unmapped values", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 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" : 2120871725, "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_extra_attributes" : { "scalename" : "", "filter" : 1.0 } , "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, "inlet" : 1, "type" : "number" } , "tuning" : { "attrOrProp" : 1, "digest" : "Inlet version of the 'base' attribute", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "inlet" : 1, "type" : "number" } , "scale" : { "attrOrProp" : 1, "digest" : "Scala scl formatted list", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "type" : "list" } , "map" : { "attrOrProp" : 1, "digest" : "Scala kbm formatted list", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 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, "type" : "number", "defaultValue" : "69" } , "mid" : { "attrOrProp" : 1, "digest" : "Middle note where scale degree 0 is mapped", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 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, "type" : "number", "defaultValue" : "440" } , "out" : { "attrOrProp" : 1, "digest" : "Note Number", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "outlet" : 1, "type" : "signal" } , "scalename" : { "attrOrProp" : 2, "digest" : "Scale Name", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "symbol" } , "filter" : { "attrOrProp" : 2, "digest" : "Filter unmapped values", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "number", "defaultValue" : "1" } , "round" : { "attrOrProp" : 2, "digest" : "Round", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 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" : 1843718516, "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, "type" : "bang" } , "in1" : { "attrOrProp" : 1, "digest" : "in1", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "inlet" : 1, "type" : "number" } , "in2" : { "attrOrProp" : 1, "digest" : "in2", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "inlet" : 1, "type" : "number" } , "out1" : { "attrOrProp" : 1, "digest" : "out1", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "outlet" : 1, "type" : "signal" } , "expr" : { "attrOrProp" : 2, "digest" : "expr", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "symbol" } } , "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" : 208580732, "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_extra_attributes" : { "scalename" : "", "filter" : 1.0 } , "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, "inlet" : 1, "type" : "list" } , "tuning" : { "attrOrProp" : 1, "digest" : "Set base frequency", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "inlet" : 1, "type" : "number" } , "scale" : { "attrOrProp" : 1, "digest" : "Scala scl formatted list", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "type" : "list" } , "map" : { "attrOrProp" : 1, "digest" : "Scala kbm formatted list", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 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, "type" : "number", "defaultValue" : "69" } , "mid" : { "attrOrProp" : 1, "digest" : "Middle note where scale degree 0 is mapped", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 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, "type" : "number", "defaultValue" : "440" } , "out" : { "attrOrProp" : 1, "digest" : "Frequency (Hz)", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "outlet" : 1, "type" : "list" } , "scalename" : { "attrOrProp" : 2, "digest" : "Scale Name", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "symbol" } , "filter" : { "attrOrProp" : 2, "digest" : "Filter unmapped values", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 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" : 2120871725, "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, "outlet" : 1, "type" : "number" } , "out2" : { "attrOrProp" : 1, "digest" : "Output order 2 (number).", "defaultarg" : 2, "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "outlet" : 1, "type" : "number" } , "out3" : { "attrOrProp" : 1, "digest" : "Output order 1 (number).", "defaultarg" : 3, "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 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, "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" : -1133428571, "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_extra_attributes" : { "hot" : 0 } , "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, "type" : "bang" } , "in1" : { "attrOrProp" : 1, "digest" : "in1", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "inlet" : 1, "type" : "number" } , "in2" : { "attrOrProp" : 1, "digest" : "in2", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "inlet" : 1, "type" : "number" } , "in3" : { "attrOrProp" : 1, "digest" : "in3", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "inlet" : 1, "type" : "number" } , "in4" : { "attrOrProp" : 1, "digest" : "in4", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "inlet" : 1, "type" : "number" } , "out1" : { "attrOrProp" : 1, "digest" : "out1", "isalias" : 0, "aliases" : [ ], "settable" : 0, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "outlet" : 1, "type" : "number" } , "expr" : { "attrOrProp" : 2, "digest" : "expr", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 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, "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" : 982334684, "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_extra_attributes" : { "value" : 0.0 } , "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, "type" : "bang" } , "in1" : { "attrOrProp" : 1, "digest" : "in1", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "inlet" : 1, "type" : "number" } , "in2" : { "attrOrProp" : 1, "digest" : "in2", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "inlet" : 1, "type" : "number" } , "out1" : { "attrOrProp" : 1, "digest" : "out1", "isalias" : 0, "aliases" : [ ], "settable" : 0, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "outlet" : 1, "type" : "number" } , "expr" : { "attrOrProp" : 2, "digest" : "expr", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 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, "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" : 982334684, "changesPatcherIO" : 0 } , "text" : "expr out1=in1/16383 * 2000 * in2 @hot 1" } } , { "box" : { "id" : "obj-29", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 2, "outlettype" : [ "", "" ], "patching_rect" : [ 169.5, 435.400000035762787, 236.0, 23.0 ], "rnbo_classname" : "param", "rnbo_extra_attributes" : { "ctlin" : 0.0, "order" : "0", "tonormalized" : "", "sendinit" : 1, "steps" : 0.0, "maximum" : 1.0, "fromnormalized" : "", "meta" : "", "exponent" : 1.0, "minimum" : 0.0, "preset" : 1, "enum" : "", "unit" : "", "displayname" : "" } , "rnbo_serial" : 2, "rnbo_uniqueid" : "glidecurve", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "value" : { "attrOrProp" : 2, "digest" : "Set initial value", "defaultarg" : 2, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "number", "defaultValue" : "0", "label" : "Initial Value", "displayorder" : 3 } , "reset" : { "attrOrProp" : 1, "digest" : "Reset param to initial value", "isalias" : 0, "aliases" : [ ], "attachable" : 1, "isparam" : 0, "deprecated" : 0, "type" : "bang" } , "normalized" : { "attrOrProp" : 1, "digest" : "Normalized parameter value.", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 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, "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, "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, "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, "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, "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, "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, "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, "type" : "number", "defaultValue" : "0", "label" : "Steps", "displayorder" : 8 } , "displayname" : { "attrOrProp" : 2, "digest" : "A more readable name for the parameter in an external RNBO target", "isalias" : 0, "aliases" : [ "displayName" ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Display Name", "displayorder" : 13 } , "displayName" : { "attrOrProp" : 2, "digest" : "A more readable name for the parameter in an external RNBO target", "isalias" : 1, "aliasOf" : "displayname", "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Display Name", "displayorder" : 13 } , "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, "type" : "symbol", "defaultValue" : "", "label" : "Unit", "displayorder" : 14 } , "tonormalized" : { "attrOrProp" : 2, "digest" : "Converts a real parameter value to its normalized form.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 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, "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, "type" : "symbol", "defaultValue" : "0", "label" : "Restore Order", "displayorder" : 12 } , "sendinit" : { "attrOrProp" : 2, "digest" : "Send initial value", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 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, "type" : "number", "label" : "MIDI Controller Number.", "displayorder" : 15 } , "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, "type" : "symbol", "defaultValue" : "", "label" : "Metadata", "displayorder" : 16 } , "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, "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, "type" : "bool", "defaultValue" : "true", "label" : "Include In Preset", "displayorder" : 11 } } , "inputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "hot" : 1, "docked" : 0 } ], "outputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "hot" : 1, "docked" : 0 } , { "name" : "normalized", "type" : "number", "digest" : "Normalized parameter value.", "docked" : 0 } ], "helpname" : "param", "aliasOf" : "param", "classname" : "param", "operator" : 0, "versionId" : 1354159517, "changesPatcherIO" : 0 } , "text" : "param glidecurve 0 @min -0.99 @max 0.99", "varname" : "glidecurve" } } , { "box" : { "id" : "obj-22", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 2, "outlettype" : [ "", "" ], "patching_rect" : [ 155.0, 309.400000035762787, 233.0, 23.0 ], "rnbo_classname" : "param", "rnbo_extra_attributes" : { "ctlin" : 0.0, "order" : "0", "tonormalized" : "", "sendinit" : 1, "steps" : 0.0, "maximum" : 1.0, "fromnormalized" : "", "meta" : "", "exponent" : 1.0, "minimum" : 0.0, "preset" : 1, "unit" : "", "displayname" : "", "value" : 0.0 } , "rnbo_serial" : 3, "rnbo_uniqueid" : "glidemode", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "value" : { "attrOrProp" : 2, "digest" : "Set initial value", "defaultarg" : 2, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "number", "defaultValue" : "0", "label" : "Initial Value", "displayorder" : 3 } , "reset" : { "attrOrProp" : 1, "digest" : "Reset param to initial value", "isalias" : 0, "aliases" : [ ], "attachable" : 1, "isparam" : 0, "deprecated" : 0, "type" : "bang" } , "normalized" : { "attrOrProp" : 1, "digest" : "Normalized parameter value.", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 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, "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, "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, "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, "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, "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, "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, "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, "type" : "number", "defaultValue" : "0", "label" : "Steps", "displayorder" : 8 } , "displayname" : { "attrOrProp" : 2, "digest" : "A more readable name for the parameter in an external RNBO target", "isalias" : 0, "aliases" : [ "displayName" ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Display Name", "displayorder" : 13 } , "displayName" : { "attrOrProp" : 2, "digest" : "A more readable name for the parameter in an external RNBO target", "isalias" : 1, "aliasOf" : "displayname", "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Display Name", "displayorder" : 13 } , "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, "type" : "symbol", "defaultValue" : "", "label" : "Unit", "displayorder" : 14 } , "tonormalized" : { "attrOrProp" : 2, "digest" : "Converts a real parameter value to its normalized form.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 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, "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, "type" : "symbol", "defaultValue" : "0", "label" : "Restore Order", "displayorder" : 12 } , "sendinit" : { "attrOrProp" : 2, "digest" : "Send initial value", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 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, "type" : "number", "label" : "MIDI Controller Number.", "displayorder" : 15 } , "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, "type" : "symbol", "defaultValue" : "", "label" : "Metadata", "displayorder" : 16 } , "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, "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, "type" : "bool", "defaultValue" : "true", "label" : "Include In Preset", "displayorder" : 11 } } , "inputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "hot" : 1, "docked" : 0 } ], "outputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "hot" : 1, "docked" : 0 } , { "name" : "normalized", "type" : "number", "digest" : "Normalized parameter value.", "docked" : 0 } ], "helpname" : "param", "aliasOf" : "param", "classname" : "param", "operator" : 0, "versionId" : 1354159517, "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_extra_attributes" : { "hot" : 0 } , "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_extra_attributes" : { "hot" : 0 } , "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, "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, "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" : -1133428571, "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_extra_attributes" : { "hot" : 0 } , "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_extra_attributes" : { "hot" : 0 } , "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, "type" : "bang" } , "in1" : { "attrOrProp" : 1, "digest" : "in1", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "inlet" : 1, "type" : "number" } , "in2" : { "attrOrProp" : 1, "digest" : "in2", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "inlet" : 1, "type" : "number" } , "out1" : { "attrOrProp" : 1, "digest" : "out1", "isalias" : 0, "aliases" : [ ], "settable" : 0, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "outlet" : 1, "type" : "number" } , "expr" : { "attrOrProp" : 2, "digest" : "expr", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 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, "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" : 982334684, "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_extra_attributes" : { "lock" : 0.0 } , "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_extra_attributes" : { "outputs" : 1.0 } , "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, "inlet" : 1, "type" : "number", "defaultValue" : "1" } , "outputs" : { "attrOrProp" : 2, "digest" : "Number of outlets", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 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" : 111970396, "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" : 1, "numoutlets" : 2, "outlettype" : [ "", "" ], "patching_rect" : [ 714.499999999999773, 510.400000035762787, 307.0, 23.0 ], "rnbo_classname" : "param", "rnbo_extra_attributes" : { "ctlin" : 0.0, "order" : "", "tonormalized" : "", "sendinit" : 1, "steps" : 0.0, "fromnormalized" : "", "meta" : "", "exponent" : 1.0, "preset" : 1, "enum" : "", "unit" : "", "displayname" : "" } , "rnbo_serial" : 4, "rnbo_uniqueid" : "release", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "value" : { "attrOrProp" : 2, "digest" : "Set initial value", "defaultarg" : 2, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "number", "defaultValue" : "0", "label" : "Initial Value", "displayorder" : 3 } , "reset" : { "attrOrProp" : 1, "digest" : "Reset param to initial value", "isalias" : 0, "aliases" : [ ], "attachable" : 1, "isparam" : 0, "deprecated" : 0, "type" : "bang" } , "normalized" : { "attrOrProp" : 1, "digest" : "Normalized parameter value.", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 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, "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, "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, "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, "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, "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, "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, "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, "type" : "number", "defaultValue" : "0", "label" : "Steps", "displayorder" : 8 } , "displayname" : { "attrOrProp" : 2, "digest" : "A more readable name for the parameter in an external RNBO target", "isalias" : 0, "aliases" : [ "displayName" ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Display Name", "displayorder" : 13 } , "displayName" : { "attrOrProp" : 2, "digest" : "A more readable name for the parameter in an external RNBO target", "isalias" : 1, "aliasOf" : "displayname", "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Display Name", "displayorder" : 13 } , "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, "type" : "symbol", "defaultValue" : "", "label" : "Unit", "displayorder" : 14 } , "tonormalized" : { "attrOrProp" : 2, "digest" : "Converts a real parameter value to its normalized form.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 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, "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, "type" : "symbol", "defaultValue" : "0", "label" : "Restore Order", "displayorder" : 12 } , "sendinit" : { "attrOrProp" : 2, "digest" : "Send initial value", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 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, "type" : "number", "label" : "MIDI Controller Number.", "displayorder" : 15 } , "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, "type" : "symbol", "defaultValue" : "", "label" : "Metadata", "displayorder" : 16 } , "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, "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, "type" : "bool", "defaultValue" : "true", "label" : "Include In Preset", "displayorder" : 11 } } , "inputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "hot" : 1, "docked" : 0 } ], "outputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "hot" : 1, "docked" : 0 } , { "name" : "normalized", "type" : "number", "digest" : "Normalized parameter value.", "docked" : 0 } ], "helpname" : "param", "aliasOf" : "param", "classname" : "param", "operator" : 0, "versionId" : 1354159517, "changesPatcherIO" : 0 } , "text" : "param release @minimum 0 @maximum 4000 @value 50", "varname" : "release" } } , { "box" : { "id" : "obj-17", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 2, "outlettype" : [ "", "" ], "patching_rect" : [ 683.499999999999773, 479.400000035762787, 303.0, 23.0 ], "rnbo_classname" : "param", "rnbo_extra_attributes" : { "ctlin" : 0.0, "order" : "", "tonormalized" : "", "sendinit" : 1, "steps" : 0.0, "fromnormalized" : "", "meta" : "", "exponent" : 1.0, "preset" : 1, "enum" : "", "unit" : "", "displayname" : "" } , "rnbo_serial" : 5, "rnbo_uniqueid" : "sustain", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "value" : { "attrOrProp" : 2, "digest" : "Set initial value", "defaultarg" : 2, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "number", "defaultValue" : "0", "label" : "Initial Value", "displayorder" : 3 } , "reset" : { "attrOrProp" : 1, "digest" : "Reset param to initial value", "isalias" : 0, "aliases" : [ ], "attachable" : 1, "isparam" : 0, "deprecated" : 0, "type" : "bang" } , "normalized" : { "attrOrProp" : 1, "digest" : "Normalized parameter value.", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 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, "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, "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, "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, "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, "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, "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, "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, "type" : "number", "defaultValue" : "0", "label" : "Steps", "displayorder" : 8 } , "displayname" : { "attrOrProp" : 2, "digest" : "A more readable name for the parameter in an external RNBO target", "isalias" : 0, "aliases" : [ "displayName" ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Display Name", "displayorder" : 13 } , "displayName" : { "attrOrProp" : 2, "digest" : "A more readable name for the parameter in an external RNBO target", "isalias" : 1, "aliasOf" : "displayname", "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Display Name", "displayorder" : 13 } , "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, "type" : "symbol", "defaultValue" : "", "label" : "Unit", "displayorder" : 14 } , "tonormalized" : { "attrOrProp" : 2, "digest" : "Converts a real parameter value to its normalized form.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 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, "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, "type" : "symbol", "defaultValue" : "0", "label" : "Restore Order", "displayorder" : 12 } , "sendinit" : { "attrOrProp" : 2, "digest" : "Send initial value", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 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, "type" : "number", "label" : "MIDI Controller Number.", "displayorder" : 15 } , "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, "type" : "symbol", "defaultValue" : "", "label" : "Metadata", "displayorder" : 16 } , "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, "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, "type" : "bool", "defaultValue" : "true", "label" : "Include In Preset", "displayorder" : 11 } } , "inputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "hot" : 1, "docked" : 0 } ], "outputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "hot" : 1, "docked" : 0 } , { "name" : "normalized", "type" : "number", "digest" : "Normalized parameter value.", "docked" : 0 } ], "helpname" : "param", "aliasOf" : "param", "classname" : "param", "operator" : 0, "versionId" : 1354159517, "changesPatcherIO" : 0 } , "text" : "param sustain @minimum 0 @maximum 1. @value 0.2", "varname" : "sustain" } } , { "box" : { "id" : "obj-2", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 2, "outlettype" : [ "", "" ], "patching_rect" : [ 652.499999999999773, 443.400000035762787, 317.0, 23.0 ], "rnbo_classname" : "param", "rnbo_extra_attributes" : { "ctlin" : 0.0, "order" : "", "tonormalized" : "", "sendinit" : 1, "steps" : 0.0, "fromnormalized" : "", "meta" : "", "exponent" : 1.0, "preset" : 1, "enum" : "", "unit" : "", "displayname" : "" } , "rnbo_serial" : 6, "rnbo_uniqueid" : "decay", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "value" : { "attrOrProp" : 2, "digest" : "Set initial value", "defaultarg" : 2, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "number", "defaultValue" : "0", "label" : "Initial Value", "displayorder" : 3 } , "reset" : { "attrOrProp" : 1, "digest" : "Reset param to initial value", "isalias" : 0, "aliases" : [ ], "attachable" : 1, "isparam" : 0, "deprecated" : 0, "type" : "bang" } , "normalized" : { "attrOrProp" : 1, "digest" : "Normalized parameter value.", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 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, "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, "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, "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, "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, "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, "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, "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, "type" : "number", "defaultValue" : "0", "label" : "Steps", "displayorder" : 8 } , "displayname" : { "attrOrProp" : 2, "digest" : "A more readable name for the parameter in an external RNBO target", "isalias" : 0, "aliases" : [ "displayName" ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Display Name", "displayorder" : 13 } , "displayName" : { "attrOrProp" : 2, "digest" : "A more readable name for the parameter in an external RNBO target", "isalias" : 1, "aliasOf" : "displayname", "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Display Name", "displayorder" : 13 } , "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, "type" : "symbol", "defaultValue" : "", "label" : "Unit", "displayorder" : 14 } , "tonormalized" : { "attrOrProp" : 2, "digest" : "Converts a real parameter value to its normalized form.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 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, "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, "type" : "symbol", "defaultValue" : "0", "label" : "Restore Order", "displayorder" : 12 } , "sendinit" : { "attrOrProp" : 2, "digest" : "Send initial value", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 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, "type" : "number", "label" : "MIDI Controller Number.", "displayorder" : 15 } , "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, "type" : "symbol", "defaultValue" : "", "label" : "Metadata", "displayorder" : 16 } , "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, "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, "type" : "bool", "defaultValue" : "true", "label" : "Include In Preset", "displayorder" : 11 } } , "inputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "hot" : 1, "docked" : 0 } ], "outputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "hot" : 1, "docked" : 0 } , { "name" : "normalized", "type" : "number", "digest" : "Normalized parameter value.", "docked" : 0 } ], "helpname" : "param", "aliasOf" : "param", "classname" : "param", "operator" : 0, "versionId" : 1354159517, "changesPatcherIO" : 0 } , "text" : "param decay @minimum 1 @maximum 5000 @value 200", "varname" : "decay" } } , { "box" : { "id" : "obj-3", "maxclass" : "newobj", "numinlets" : 1, "numoutlets" : 2, "outlettype" : [ "", "" ], "patching_rect" : [ 621.499999999999773, 409.400000035762787, 310.0, 23.0 ], "rnbo_classname" : "param", "rnbo_extra_attributes" : { "ctlin" : 0.0, "order" : "", "tonormalized" : "", "sendinit" : 1, "steps" : 0.0, "fromnormalized" : "", "meta" : "", "exponent" : 1.0, "preset" : 1, "enum" : "", "unit" : "", "displayname" : "" } , "rnbo_serial" : 7, "rnbo_uniqueid" : "attack", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "value" : { "attrOrProp" : 2, "digest" : "Set initial value", "defaultarg" : 2, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "number", "defaultValue" : "0", "label" : "Initial Value", "displayorder" : 3 } , "reset" : { "attrOrProp" : 1, "digest" : "Reset param to initial value", "isalias" : 0, "aliases" : [ ], "attachable" : 1, "isparam" : 0, "deprecated" : 0, "type" : "bang" } , "normalized" : { "attrOrProp" : 1, "digest" : "Normalized parameter value.", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 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, "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, "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, "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, "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, "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, "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, "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, "type" : "number", "defaultValue" : "0", "label" : "Steps", "displayorder" : 8 } , "displayname" : { "attrOrProp" : 2, "digest" : "A more readable name for the parameter in an external RNBO target", "isalias" : 0, "aliases" : [ "displayName" ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Display Name", "displayorder" : 13 } , "displayName" : { "attrOrProp" : 2, "digest" : "A more readable name for the parameter in an external RNBO target", "isalias" : 1, "aliasOf" : "displayname", "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "symbol", "defaultValue" : "", "label" : "Display Name", "displayorder" : 13 } , "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, "type" : "symbol", "defaultValue" : "", "label" : "Unit", "displayorder" : 14 } , "tonormalized" : { "attrOrProp" : 2, "digest" : "Converts a real parameter value to its normalized form.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 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, "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, "type" : "symbol", "defaultValue" : "0", "label" : "Restore Order", "displayorder" : 12 } , "sendinit" : { "attrOrProp" : 2, "digest" : "Send initial value", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 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, "type" : "number", "label" : "MIDI Controller Number.", "displayorder" : 15 } , "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, "type" : "symbol", "defaultValue" : "", "label" : "Metadata", "displayorder" : 16 } , "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, "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, "type" : "bool", "defaultValue" : "true", "label" : "Include In Preset", "displayorder" : 11 } } , "inputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "hot" : 1, "docked" : 0 } ], "outputs" : [ { "name" : "value", "type" : "number", "digest" : "Parameter value", "hot" : 1, "docked" : 0 } , { "name" : "normalized", "type" : "number", "digest" : "Normalized parameter value.", "docked" : 0 } ], "helpname" : "param", "aliasOf" : "param", "classname" : "param", "operator" : 0, "versionId" : 1354159517, "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_extra_attributes" : { "unit" : "ms" } , "rnbo_serial" : 1, "rnbo_uniqueid" : "sig~_obj-11", "rnboinfo" : { "needsInstanceInfo" : 1, "argnames" : { "value" : { "attrOrProp" : 1, "digest" : "Incoming numbers to convert", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "inlet" : 1, "type" : "number", "defaultValue" : "0" } , "impulse" : { "attrOrProp" : 1, "digest" : "Generate a signal of 1 for specified time (ms or samples)", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "inlet" : 1, "type" : "number", "defaultValue" : "0" } , "out" : { "attrOrProp" : 1, "digest" : "Signal output", "isalias" : 0, "aliases" : [ ], "settable" : 0, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "outlet" : 1, "type" : "signal" } , "unit" : { "attrOrProp" : 2, "digest" : "Unit for impulse length.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "enum" : [ "ms", "samples" ], "type" : "enum", "defaultValue" : "ms" } } , "inputs" : [ { "name" : "value", "type" : "number", "digest" : "Incoming numbers to convert", "defaultarg" : 1, "hot" : 1, "docked" : 1 } , { "name" : "impulse", "type" : "number", "digest" : "Generate a signal of 1 for specified time (ms or samples)", "hot" : 1, "docked" : 1 } ], "outputs" : [ { "name" : "out", "type" : "signal", "digest" : "Signal output", "docked" : 0 } ], "helpname" : "sig~", "aliasOf" : "sig~", "classname" : "sig~", "operator" : 0, "versionId" : 345932925, "changesPatcherIO" : 0 } , "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_extra_attributes" : { "hot" : 0 } , "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, "type" : "bang" } , "in1" : { "attrOrProp" : 1, "digest" : "in1", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "inlet" : 1, "type" : "number" } , "out1" : { "attrOrProp" : 1, "digest" : "out1", "isalias" : 0, "aliases" : [ ], "settable" : 0, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "outlet" : 1, "type" : "number" } , "expr" : { "attrOrProp" : 2, "digest" : "expr", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 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, "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" : 982334684, "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", "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, "type" : "bang" } , "in1" : { "attrOrProp" : 1, "digest" : "in1", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "inlet" : 1, "type" : "number" } , "out1" : { "attrOrProp" : 1, "digest" : "out1", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "outlet" : 1, "type" : "signal" } , "expr" : { "attrOrProp" : 2, "digest" : "expr", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "symbol" } } , "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" : 208580732, "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_extra_attributes" : { "comment" : "" } , "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, "inlet" : 1, "type" : "signal" } , "index" : { "attrOrProp" : 2, "digest" : "outlet number", "defaultarg" : 1, "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "number", "mandatory" : 1 } , "comment" : { "attrOrProp" : 2, "digest" : "mouse over comment", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "symbol" } } , "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" : 2063414894, "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 ] } } ], "default_bgcolor" : [ 0.031372549019608, 0.125490196078431, 0.211764705882353, 1.0 ], "color" : [ 0.929412, 0.929412, 0.352941, 1.0 ], "elementcolor" : [ 0.357540726661682, 0.515565991401672, 0.861786782741547, 1.0 ], "accentcolor" : [ 0.343034118413925, 0.506230533123016, 0.86220508813858, 1.0 ], "stripecolor" : [ 0.258338063955307, 0.352425158023834, 0.511919498443604, 1.0 ], "bgfillcolor_type" : "color", "bgfillcolor_color" : [ 0.031372549019608, 0.125490196078431, 0.211764705882353, 1.0 ], "bgfillcolor_color1" : [ 0.031372549019608, 0.125490196078431, 0.211764705882353, 1.0 ], "bgfillcolor_color2" : [ 0.263682, 0.004541, 0.038797, 1.0 ], "bgfillcolor_angle" : 270.0, "bgfillcolor_proportion" : 0.39, "bgfillcolor_autogradient" : 0.0 } , "patching_rect" : [ 34.400000095367432, 773.799995183944702, 232.0, 23.0 ], "rnbo_classname" : "p", "rnbo_extra_attributes" : { "receivemode" : "local", "notecontroller" : "", "exposevoiceparams" : 0 } , "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, "type" : "number" } , "glidecurve" : { "attrOrProp" : 1, "digest" : "glidecurve", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "type" : "number" } , "attack" : { "attrOrProp" : 1, "digest" : "attack", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "type" : "number" } , "decay" : { "attrOrProp" : 1, "digest" : "decay", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "type" : "number" } , "sustain" : { "attrOrProp" : 1, "digest" : "sustain", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "type" : "number" } , "release" : { "attrOrProp" : 1, "digest" : "release", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "type" : "number" } , "target" : { "attrOrProp" : 1, "digest" : "target", "isalias" : 0, "aliases" : [ ], "settable" : 0, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "type" : "number", "defaultValue" : "0" } , "mute" : { "attrOrProp" : 1, "digest" : "mute", "isalias" : 0, "aliases" : [ ], "attachable" : 1, "isparam" : 0, "deprecated" : 0, "type" : "list" } , "__probingout1" : { "attrOrProp" : 1, "digest" : "__probingout1", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "signal" } , "out1" : { "attrOrProp" : 1, "digest" : "out1", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "outlet" : 1, "type" : "signal" } , "voicestatus" : { "attrOrProp" : 1, "digest" : "voicestatus", "isalias" : 0, "aliases" : [ ], "attachable" : 0, "isparam" : 0, "deprecated" : 0, "outlet" : 1, "type" : "list" } , "activevoices" : { "attrOrProp" : 1, "digest" : "activevoices", "isalias" : 0, "aliases" : [ ], "settable" : 0, "attachable" : 1, "isparam" : 0, "deprecated" : 0, "type" : "number" } , "midiin" : { "attrOrProp" : 1, "digest" : "midiin", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "inlet" : 1, "type" : "number" } , "noteNumber" : { "attrOrProp" : 1, "digest" : "noteNumber", "isalias" : 0, "aliases" : [ ], "attachable" : 1, "isparam" : 0, "deprecated" : 0, "type" : "number" } , "polyphony" : { "attrOrProp" : 2, "digest" : "Polyphony of the subpatcher.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 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, "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, "type" : "symbol", "doNotShowInMaxInspector" : 1 } , "file" : { "attrOrProp" : 2, "digest" : "rnbo file to load", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 0, "type" : "symbol", "doNotShowInMaxInspector" : 1 } , "voicecontrol" : { "attrOrProp" : 2, "digest" : "Chooses the way that polyphonic voices are controlled. 'simple' (default) will automatically allocate voices for \tincoming MIDI notes. Setting it to 'user' will switch off MIDI \tvoice allocation and start with all voices unmuted.", "isalias" : 0, "aliases" : [ ], "settable" : 1, "attachable" : 0, "isparam" : 0, "deprecated" : 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, "type" : "symbol" } , "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, "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, "type" : "symbol", "doNotShowInMaxInspector" : 1 } } , "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" : "p", "aliasOf" : "rnbo", "classname" : "p", "operator" : 0, "versionId" : 341681131, "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", "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", "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 ] } } ], "default_bgcolor" : [ 0.031372549019608, 0.125490196078431, 0.211764705882353, 1.0 ], "color" : [ 0.929412, 0.929412, 0.352941, 1.0 ], "elementcolor" : [ 0.357540726661682, 0.515565991401672, 0.861786782741547, 1.0 ], "accentcolor" : [ 0.343034118413925, 0.506230533123016, 0.86220508813858, 1.0 ], "stripecolor" : [ 0.258338063955307, 0.352425158023834, 0.511919498443604, 1.0 ], "bgfillcolor_type" : "color", "bgfillcolor_color" : [ 0.031372549019608, 0.125490196078431, 0.211764705882353, 1.0 ], "bgfillcolor_color1" : [ 0.031372549019608, 0.125490196078431, 0.211764705882353, 1.0 ], "bgfillcolor_color2" : [ 0.263682, 0.004541, 0.038797, 1.0 ], "bgfillcolor_angle" : 270.0, "bgfillcolor_proportion" : 0.39, "bgfillcolor_autogradient" : 0.0 } , "patching_rect" : [ 38.325983374696165, 290.0, 40.0, 22.0 ], "rnboattrcache" : { "voice/decay" : { "label" : "decay", "isEnum" : 0, "parsestring" : "" } , "voice/sustain" : { "label" : "sustain", "isEnum" : 0, "parsestring" : "" } , "voice/glidecurve" : { "label" : "glidecurve", "isEnum" : 0, "parsestring" : "" } , "voice/attack" : { "label" : "attack", "isEnum" : 0, "parsestring" : "" } , "voice/release" : { "label" : "release", "isEnum" : 0, "parsestring" : "" } , "stealmode" : { "label" : "stealmode", "isEnum" : 1, "parsestring" : "highest lowest first last off" } , "voice/glidemode" : { "label" : "glidemode", "isEnum" : 1, "parsestring" : "LCR LCT" } , "voice/glissando" : { "label" : "glissando", "isEnum" : 1, "parsestring" : "off on" } } , "saved_attribute_attributes" : { "valueof" : { "parameter_invisible" : 1, "parameter_longname" : "rnbo~", "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" : "rnbo~.mxo", "type" : "iLaX" } , { "name" : "untitled.maxsnap", "bootpath" : "~/Documents/Max 8/Snapshots", "patcherrelativepath" : "../../../../../../../../../../Max 8/Snapshots", "type" : "mx@s", "implicit" : 1 } ], "autosave" : 0 } }