From 13cddd8f03f73161ef13b6414d21b884465721ca Mon Sep 17 00:00:00 2001 From: Kieran McAuliffe Date: Mon, 29 Jul 2024 13:56:45 +0200 Subject: [PATCH] linking indicator --- enums.js | 6 +- example.maxpat | 182 ++++++++++++++++++++++++++++++++++++++++++------- lfogui.html | 9 +++ lfogui.js | 5 +- modulators.js | 5 +- 5 files changed, 177 insertions(+), 30 deletions(-) diff --git a/enums.js b/enums.js index 8f57557..9297cd7 100644 --- a/enums.js +++ b/enums.js @@ -17,13 +17,16 @@ function EnumeratorItems(index, enumBreakPoints, setEnumBreakPoints, enumNames, } function EnumeratorRow(props){ + let linkedText = props.linked ? "<- mods" : ""; + let content = e('ul', {className: 'lfo-item', id: `${props.djParam}-enum-row`}, ListItem(DropDown({onChange: props.setDjParam, value: props.djParam, options: MODPARAMOPTIONS})), ListItem(e(NumberBox, {onChange: props.setEnumItemCounts, step:1, value:props.enumItems, className: 'enum-count'}, null)), ListItem(e(NumberBox, {onChange: CreateMatrixParamChanger(props.enumBreakPoints, props.setEnumBreakPoints, props.index, 0), value:props.enumBreakPoints[props.index][0], step:0.1}, null)), ...(EnumeratorItems(props.index, props.enumBreakPoints, props.setEnumBreakPoints, props.enumNames, props.setEnumNames, props.djParam).slice(0, props.enumItems * 2)), ListItem(e(Button, {text:'+', onClick: props.addEnum}, null)), - ListItem(e(Button, {text:'-', onClick: props.removeEnum}, null)) + ListItem(e(Button, {text:'-', onClick: props.removeEnum}, null)), + ListItem(e("div", {className:"linked"}, linkedText)) ); if (props.visible){ return content; @@ -45,7 +48,6 @@ function denumerate(inval, count, keys, vals){ function enumerate(name, inval, count, keys, vals){ let output = "OUT OF RANGE"; for (let i=0; i < count + 1; i++){ - log(`Inval : ${inval}, breakpoint : ${keys[i]}`) if (inval <= keys[i]){ if (i > 0) output = vals[i - 1]; diff --git a/example.maxpat b/example.maxpat index 6779472..c9a6c27 100644 --- a/example.maxpat +++ b/example.maxpat @@ -39,6 +39,115 @@ "subpatcher_template" : "", "assistshowspatchername" : 0, "boxes" : [ { + "box" : { + "id" : "obj-36", + "maxclass" : "newobj", + "numinlets" : 0, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 485.0, 40.0, 49.0, 22.0 ], + "text" : "r reload" + } + + } +, { + "box" : { + "id" : "obj-34", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 0, + "patching_rect" : [ 357.0, 762.0, 51.0, 22.0 ], + "text" : "s reload" + } + + } +, { + "box" : { + "id" : "obj-32", + "maxclass" : "preset", + "numinlets" : 1, + "numoutlets" : 5, + "outlettype" : [ "preset", "int", "preset", "int", "" ], + "patching_rect" : [ 347.0, 707.0, 100.0, 40.0 ] + } + + } +, { + "box" : { + "id" : "obj-28", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 1, + "outlettype" : [ "" ], + "patching_rect" : [ 523.0, 747.0, 73.0, 22.0 ], + "saved_object_attributes" : { + "client_rect" : [ 1071, 252, 1680, 568 ], + "parameter_enable" : 0, + "parameter_mappable" : 0, + "storage_rect" : [ 780, 524, 1380, 824 ] + } +, + "text" : "pattrstorage", + "varname" : "u453003849" + } + + } +, { + "box" : { + "id" : "obj-26", + "maxclass" : "newobj", + "numinlets" : 1, + "numoutlets" : 3, + "outlettype" : [ "", "", "" ], + "patching_rect" : [ 643.0, 770.0, 40.0, 22.0 ], + "restore" : [ { + "data" : { + "enumArrays" : [ [ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ "2", 2, "2", "2", "2", "2", "2", "2", "2", "2" ], [ "metriclarity", "NONE", "attenuation", "attenuation", "attenuation", "attenuation", "attenuation", "attenuation", "attenuation", "attenuation" ] ], + "enumMats" : [ [ [ 0, "13", "30", 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] ], [ [ "param1", "param2", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ] ] ], + "modArrays" : [ [ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine" ], [ "metriclarity", "eventfulness", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE" ], [ "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1" ], [ "-1.7", "1", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0" ], [ "4", "0", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1" ], [ "0", null, "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0" ] ] + } + + } + ], + "saved_object_attributes" : { + "parameter_enable" : 0, + "parameter_mappable" : 0 + } +, + "text" : "pattr", + "varname" : "u560003760" + } + + } +, { + "box" : { + "data" : { + "data" : { + "enumArrays" : [ [ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ "2", 2, "2", "2", "2", "2", "2", "2", "2", "2" ], [ "metriclarity", "NONE", "attenuation", "attenuation", "attenuation", "attenuation", "attenuation", "attenuation", "attenuation", "attenuation" ] ], + "enumMats" : [ [ [ 0, "13", "30", 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] ], [ [ "param1", "param2", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ] ] ], + "modArrays" : [ [ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine" ], [ "metriclarity", "eventfulness", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE" ], [ "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1" ], [ "-1.7", "1", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0" ], [ "4", "0", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1" ], [ "0", null, "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0" ] ] + } + + } +, + "id" : "obj-25", + "maxclass" : "newobj", + "numinlets" : 2, + "numoutlets" : 4, + "outlettype" : [ "dictionary", "", "", "" ], + "patching_rect" : [ 773.0, 808.0, 166.0, 22.0 ], + "saved_object_attributes" : { + "embed" : 1, + "parameter_enable" : 0, + "parameter_mappable" : 0 + } +, + "text" : "dict localStorage2 @embed 1", + "varname" : "dict" + } + + } +, { "box" : { "id" : "obj-13", "maxclass" : "newobj", @@ -52,12 +161,12 @@ , { "box" : { "id" : "obj-9", - "linecount" : 4, + "linecount" : 2, "maxclass" : "comment", "numinlets" : 1, "numoutlets" : 0, - "patching_rect" : [ 904.0, 80.0, 150.0, 60.0 ], - "text" : "BROKEN - it tries to denumerate floating point values which should NOT happen" + "patching_rect" : [ 904.0, 80.0, 150.0, 33.0 ], + "text" : "FINISH THE SAVING THING!!!" } } @@ -208,12 +317,13 @@ , { "box" : { "id" : "obj-31", + "linecount" : 2, "maxclass" : "message", "numinlets" : 2, "numoutlets" : 1, "outlettype" : [ "" ], - "patching_rect" : [ 485.0, 647.0, 80.0, 22.0 ], - "text" : "stream 1" + "patching_rect" : [ 485.0, 647.0, 80.0, 35.0 ], + "text" : "stream -0.596785" } } @@ -268,11 +378,12 @@ , { "box" : { "id" : "obj-19", + "linecount" : 2, "maxclass" : "comment", "numinlets" : 1, "numoutlets" : 0, - "patching_rect" : [ 541.52631402015686, 69.0, 150.0, 20.0 ], - "text" : "self explanatory" + "patching_rect" : [ 548.52631402015686, 80.0, 150.0, 33.0 ], + "text" : "see below for why we do this..." } } @@ -394,35 +505,26 @@ "numinlets" : 2, "numoutlets" : 1, "outlettype" : [ "" ], - "patching_rect" : [ 438.52631402015686, 69.0, 101.0, 22.0 ], - "text" : "load localStorage" + "patching_rect" : [ 438.52631402015686, 69.0, 108.0, 22.0 ], + "text" : "load localStorage2" } } , { "box" : { - "data" : { - "data" : { - "enumArrays" : [ [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ "2", "2", "2", "2", "2", "2", "2", "2", "2", "2" ], [ "metriclarity", "attenuation", "attenuation", "attenuation", "attenuation", "attenuation", "attenuation", "attenuation", "attenuation", "attenuation" ] ], - "enumMats" : [ [ [ 0, "13", "30", 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] ], [ [ "param1", "param2", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ] ] ], - "modArrays" : [ [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine", "Sine" ], [ "metriclarity", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE" ], [ "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1" ], [ "-1.7", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0" ], [ "4", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1" ], [ "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0" ] ] - } - - } -, "id" : "obj-4", "maxclass" : "newobj", "numinlets" : 2, "numoutlets" : 4, "outlettype" : [ "dictionary", "", "", "" ], - "patching_rect" : [ 1041.0, 711.0, 159.0, 22.0 ], + "patching_rect" : [ 1041.0, 711.0, 97.0, 22.0 ], "saved_object_attributes" : { - "embed" : 1, + "embed" : 0, "parameter_enable" : 0, "parameter_mappable" : 0 } , - "text" : "dict localStorage @embed 1" + "text" : "dict localStorage" } } @@ -441,12 +543,12 @@ , { "box" : { "id" : "obj-45", - "linecount" : 5, + "linecount" : 8, "maxclass" : "comment", "numinlets" : 1, "numoutlets" : 0, - "patching_rect" : [ 857.631580829620361, 729.0, 150.0, 74.0 ], - "text" : "Storage for the matrix. Unfortunately, jsweb dictionary handling isn't great, so we can't use it like a native dict object" + "patching_rect" : [ 773.0, 692.0, 150.0, 114.0 ], + "text" : "Storage for the matrix. Unfortunately, jsweb dictionary handling isn't great, so we can't use it like a native dict object and need to do this wild hack for usage with pattrstorage" } } @@ -493,7 +595,7 @@ "numinlets" : 1, "numoutlets" : 1, "outlettype" : [ "" ], - "patching_rect" : [ 427.52631402015686, 123.0, 740.105266809463501, 392.0 ], + "patching_rect" : [ 403.52631402015686, 149.0, 774.105266809463501, 365.0 ], "rendermode" : 0, "url" : "file://lfogui.html" } @@ -555,6 +657,13 @@ "source" : [ "obj-22", 0 ] } + } +, { + "patchline" : { + "destination" : [ "obj-25", 0 ], + "source" : [ "obj-26", 1 ] + } + } , { "patchline" : { @@ -611,10 +720,33 @@ "source" : [ "obj-27", 5 ] } + } +, { + "patchline" : { + "destination" : [ "obj-34", 0 ], + "source" : [ "obj-32", 1 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-16", 0 ], + "source" : [ "obj-36", 0 ] + } + + } +, { + "patchline" : { + "destination" : [ "obj-25", 0 ], + "order" : 1, + "source" : [ "obj-4", 0 ] + } + } , { "patchline" : { "destination" : [ "obj-38", 0 ], + "order" : 0, "source" : [ "obj-4", 0 ] } diff --git a/lfogui.html b/lfogui.html index 96ef522..6ba2431 100644 --- a/lfogui.html +++ b/lfogui.html @@ -160,6 +160,15 @@ margin-left: 2px; margin-top: 1px; } + + .linked { + color: red; + border-width: 1px; + width: 50px; + font-size: small; + margin-left: 2px; + margin-top: 5px; + } @keyframes pulse-animation { diff --git a/lfogui.js b/lfogui.js index 1d1169a..b32d0e9 100644 --- a/lfogui.js +++ b/lfogui.js @@ -60,7 +60,7 @@ function MasterLfoHandler(){ const allModArrays = [modVisibleArr, shapeArr, djParamArr, freqArr, minArr, maxArr, phaseArr]; const allModSetters = [setModVisibleArr, setShapeArr, setDjParamArr, setFreqArr, setMinArr, setMaxArr, setPhaseArr]; - const modBlankVals = [true, SHAPETYPES[0], MODPARAMOPTIONS[0], '1', '1', '0']; + const modBlankVals = [true, SHAPETYPES[0], MODPARAMOPTIONS[0], '1', '0', '1', '0']; /// ENUMERATOR ARRAYS @@ -238,6 +238,8 @@ function MasterLfoHandler(){ phase: phaseArr[i], setPhase: CreateParamChanger(phaseArr, setPhaseArr, i), visible: modVisibleArr[i], + + linked: enumDjParamArr.includes(djParamArr[i]), addLfo: () => { if (id < MAXLFOS - 1){ if (modVisibleArr[id + 1]){ @@ -295,6 +297,7 @@ function MasterLfoHandler(){ visible: enumVisibleArr[i], djParam: enumDjParamArr[i], setDjParam: CreateParamChanger(enumDjParamArr, setEnumDjParamArr, i), + linked: djParamArr.includes(enumDjParamArr[i]), addEnum: () => { if (id < MAXLFOS - 1){ if (enumVisibleArr[id + 1]){ // if we need to open up space diff --git a/modulators.js b/modulators.js index 2db8fe2..b32339f 100644 --- a/modulators.js +++ b/modulators.js @@ -15,7 +15,7 @@ function ControlType(){ function LfoRow(props){ - + let linkedText = props.linked ? "-> enums" : ""; let center = props.centerVals[props.djParam]; if (!center) center = 0; @@ -32,7 +32,8 @@ function LfoRow(props){ ListItem(e("div", {className:"base-val"}, center.toString())), ListItem(e("input", {type: 'range', min: 0, max: 1, step: 0.01, readonly: true, id: `slider-${props.djParam}`})), ListItem(e(Button, {text:'+', onClick: props.addLfo}, null)), - ListItem(e(Button, {text:'-', onClick: props.removeLfo}, null)) + ListItem(e(Button, {text:'-', onClick: props.removeLfo}, null)), + ListItem(e("div", {className:"linked"}, linkedText)), ); if (props.visible){ return content