Compare commits
28 Commits
removing-l
...
main
Author | SHA1 | Date | |
---|---|---|---|
![]() |
fe68764e7d | ||
![]() |
40d0927a0e | ||
![]() |
92b7545e90 | ||
![]() |
4912b398dd | ||
![]() |
02d5c6e914 | ||
13f3a18c4c | |||
f21220e7b2 | |||
fe165b77e5 | |||
![]() |
a7b0de9e66 | ||
43d37f215f | |||
![]() |
c1a0a4d919 | ||
e2f33b8ba7 | |||
a19717a759 | |||
64da80b742 | |||
![]() |
34549daf67 | ||
![]() |
dd47c0b030 | ||
0b7dbbb775 | |||
290ff73524 | |||
9b1a9f2e03 | |||
541ab6d459 | |||
b96f2aa53b | |||
edcddde844 | |||
e41567c101 | |||
8002ae8bdb | |||
286a43b0b2 | |||
229ddb9c37 | |||
bbcfd8faab | |||
5d092a607c |
267
ModEnum.maxhelp
Normal file
267
ModEnum.maxhelp
Normal file
@ -0,0 +1,267 @@
|
|||||||
|
{
|
||||||
|
"patcher" : {
|
||||||
|
"fileversion" : 1,
|
||||||
|
"appversion" : {
|
||||||
|
"major" : 8,
|
||||||
|
"minor" : 6,
|
||||||
|
"revision" : 5,
|
||||||
|
"architecture" : "x64",
|
||||||
|
"modernui" : 1
|
||||||
|
}
|
||||||
|
,
|
||||||
|
"classnamespace" : "box",
|
||||||
|
"rect" : [ 347.0, 100.0, 1131.0, 790.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-12",
|
||||||
|
"maxclass" : "message",
|
||||||
|
"numinlets" : 2,
|
||||||
|
"numoutlets" : 1,
|
||||||
|
"outlettype" : [ "" ],
|
||||||
|
"patching_rect" : [ 29.113923668861389, 96.202530384063721, 42.0, 22.0 ],
|
||||||
|
"text" : "reload"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
, {
|
||||||
|
"box" : {
|
||||||
|
"id" : "obj-51",
|
||||||
|
"maxclass" : "newobj",
|
||||||
|
"numinlets" : 1,
|
||||||
|
"numoutlets" : 1,
|
||||||
|
"outlettype" : [ "" ],
|
||||||
|
"patching_rect" : [ 294.936704993247986, 112.658226370811462, 277.0, 22.0 ],
|
||||||
|
"saved_object_attributes" : {
|
||||||
|
"client_rect" : [ 0, 99, 1470, 922 ],
|
||||||
|
"parameter_enable" : 0,
|
||||||
|
"parameter_mappable" : 0,
|
||||||
|
"storage_rect" : [ 1282, 626, 1887, 1000 ]
|
||||||
|
}
|
||||||
|
,
|
||||||
|
"text" : "pattrstorage myStorage @savemode 3 @greedy 1",
|
||||||
|
"varname" : "myStorage"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
, {
|
||||||
|
"box" : {
|
||||||
|
"id" : "obj-10",
|
||||||
|
"maxclass" : "preset",
|
||||||
|
"numinlets" : 1,
|
||||||
|
"numoutlets" : 5,
|
||||||
|
"outlettype" : [ "preset", "int", "preset", "int", "" ],
|
||||||
|
"patching_rect" : [ 55.696201801300049, 24.05063259601593, 100.0, 40.0 ],
|
||||||
|
"pattrstorage" : "myStorage"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
, {
|
||||||
|
"box" : {
|
||||||
|
"id" : "obj-8",
|
||||||
|
"maxclass" : "message",
|
||||||
|
"numinlets" : 2,
|
||||||
|
"numoutlets" : 1,
|
||||||
|
"outlettype" : [ "" ],
|
||||||
|
"patching_rect" : [ 851.30120575428009, 786.0, 50.0, 22.0 ]
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
, {
|
||||||
|
"box" : {
|
||||||
|
"id" : "obj-9",
|
||||||
|
"maxclass" : "message",
|
||||||
|
"numinlets" : 2,
|
||||||
|
"numoutlets" : 1,
|
||||||
|
"outlettype" : [ "" ],
|
||||||
|
"patching_rect" : [ 679.901205754280113, 786.0, 50.0, 22.0 ]
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
, {
|
||||||
|
"box" : {
|
||||||
|
"id" : "obj-6",
|
||||||
|
"maxclass" : "message",
|
||||||
|
"numinlets" : 2,
|
||||||
|
"numoutlets" : 1,
|
||||||
|
"outlettype" : [ "" ],
|
||||||
|
"patching_rect" : [ 508.501205754280136, 786.0, 50.0, 22.0 ]
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
, {
|
||||||
|
"box" : {
|
||||||
|
"id" : "obj-7",
|
||||||
|
"maxclass" : "message",
|
||||||
|
"numinlets" : 2,
|
||||||
|
"numoutlets" : 1,
|
||||||
|
"outlettype" : [ "" ],
|
||||||
|
"patching_rect" : [ 337.101205754280102, 786.0, 50.0, 22.0 ]
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
, {
|
||||||
|
"box" : {
|
||||||
|
"id" : "obj-5",
|
||||||
|
"linecount" : 2,
|
||||||
|
"maxclass" : "message",
|
||||||
|
"numinlets" : 2,
|
||||||
|
"numoutlets" : 1,
|
||||||
|
"outlettype" : [ "" ],
|
||||||
|
"patching_rect" : [ 165.701205754280096, 786.0, 50.0, 35.0 ],
|
||||||
|
"text" : "stream 0.802"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
, {
|
||||||
|
"box" : {
|
||||||
|
"id" : "obj-3",
|
||||||
|
"linecount" : 4,
|
||||||
|
"maxclass" : "message",
|
||||||
|
"numinlets" : 2,
|
||||||
|
"numoutlets" : 1,
|
||||||
|
"outlettype" : [ "" ],
|
||||||
|
"patching_rect" : [ 46.0, 786.0, 50.0, 62.0 ],
|
||||||
|
"text" : "pulse_length 0.981862"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
, {
|
||||||
|
"box" : {
|
||||||
|
"bgmode" : 0,
|
||||||
|
"border" : 0,
|
||||||
|
"clickthrough" : 0,
|
||||||
|
"enablehscroll" : 0,
|
||||||
|
"enablevscroll" : 0,
|
||||||
|
"id" : "obj-1",
|
||||||
|
"lockeddragscroll" : 0,
|
||||||
|
"lockedsize" : 0,
|
||||||
|
"maxclass" : "bpatcher",
|
||||||
|
"name" : "ModEnum.maxpat",
|
||||||
|
"numinlets" : 1,
|
||||||
|
"numoutlets" : 6,
|
||||||
|
"offset" : [ 0.0, 0.0 ],
|
||||||
|
"outlettype" : [ "", "", "", "", "", "" ],
|
||||||
|
"patching_rect" : [ 25.30120575428009, 154.216873168945312, 876.0, 621.0 ],
|
||||||
|
"varname" : "ModEnum",
|
||||||
|
"viewvisibility" : 1
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"lines" : [ {
|
||||||
|
"patchline" : {
|
||||||
|
"destination" : [ "obj-3", 1 ],
|
||||||
|
"source" : [ "obj-1", 0 ]
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
, {
|
||||||
|
"patchline" : {
|
||||||
|
"destination" : [ "obj-5", 1 ],
|
||||||
|
"source" : [ "obj-1", 1 ]
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
, {
|
||||||
|
"patchline" : {
|
||||||
|
"destination" : [ "obj-6", 1 ],
|
||||||
|
"source" : [ "obj-1", 3 ]
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
, {
|
||||||
|
"patchline" : {
|
||||||
|
"destination" : [ "obj-7", 1 ],
|
||||||
|
"source" : [ "obj-1", 2 ]
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
, {
|
||||||
|
"patchline" : {
|
||||||
|
"destination" : [ "obj-8", 1 ],
|
||||||
|
"source" : [ "obj-1", 5 ]
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
, {
|
||||||
|
"patchline" : {
|
||||||
|
"destination" : [ "obj-9", 1 ],
|
||||||
|
"source" : [ "obj-1", 4 ]
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
, {
|
||||||
|
"patchline" : {
|
||||||
|
"destination" : [ "obj-12", 0 ],
|
||||||
|
"source" : [ "obj-10", 1 ]
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
, {
|
||||||
|
"patchline" : {
|
||||||
|
"destination" : [ "obj-1", 0 ],
|
||||||
|
"source" : [ "obj-12", 0 ]
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parameters" : {
|
||||||
|
"obj-1::obj-25" : [ "dict", "dict", 0 ],
|
||||||
|
"parameterbanks" : {
|
||||||
|
"0" : {
|
||||||
|
"index" : 0,
|
||||||
|
"name" : "",
|
||||||
|
"parameters" : [ "-", "-", "-", "-", "-", "-", "-", "-" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
,
|
||||||
|
"inherited_shortname" : 1
|
||||||
|
}
|
||||||
|
,
|
||||||
|
"dependency_cache" : [ {
|
||||||
|
"name" : "ModEnum.maxpat",
|
||||||
|
"bootpath" : "~/Documents/Max 8/Library/max-mod-enum",
|
||||||
|
"patcherrelativepath" : ".",
|
||||||
|
"type" : "JSON",
|
||||||
|
"implicit" : 1
|
||||||
|
}
|
||||||
|
, {
|
||||||
|
"name" : "myStorage.json",
|
||||||
|
"bootpath" : "~/Documents/Max 8/Library/max-mod-enum",
|
||||||
|
"patcherrelativepath" : ".",
|
||||||
|
"type" : "JSON",
|
||||||
|
"implicit" : 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"autosave" : 0
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
3570
ModEnum.maxpat
Normal file
3570
ModEnum.maxpat
Normal file
File diff suppressed because one or more lines are too long
14
common.js
14
common.js
@ -43,15 +43,19 @@ function Switch(props){
|
|||||||
e('span', {className: 'slider round'}, null))
|
e('span', {className: 'slider round'}, null))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function SendSaveEvent(){
|
||||||
|
setTimeout(() => {
|
||||||
|
window.dispatchEvent(new CustomEvent('saveDict', {'detail' : "localStorage"}));
|
||||||
|
}, 50)
|
||||||
|
}
|
||||||
|
|
||||||
function CreateParamChanger(arr, setArr, index, postCB=() => {}, preCB=(val) => val){
|
function CreateParamChanger(arr, setArr, index, postCB=() => {}, preCB=(val) => val){
|
||||||
return (event) => {
|
return (event) => {
|
||||||
let newArr = arr.slice();
|
let newArr = arr.slice();
|
||||||
newArr[index] = preCB(event.target.value);
|
newArr[index] = preCB(event.target.value);
|
||||||
setArr(newArr);
|
setArr(newArr);
|
||||||
postCB();
|
postCB();
|
||||||
setTimeout(() => {
|
SendSaveEvent();
|
||||||
window.dispatchEvent(new CustomEvent('saveDict', {'detail' : "localStorage"}));
|
|
||||||
}, 50)
|
|
||||||
|
|
||||||
log(`${index} ${event.target.value}`);
|
log(`${index} ${event.target.value}`);
|
||||||
}
|
}
|
||||||
@ -64,9 +68,7 @@ function CreateMatrixParamChanger(matrix, setMatrix, i, j){
|
|||||||
});
|
});
|
||||||
newMatrix[i][j] = event.target.value;
|
newMatrix[i][j] = event.target.value;
|
||||||
setMatrix(newMatrix);
|
setMatrix(newMatrix);
|
||||||
setTimeout(() => {
|
SendSaveEvent();
|
||||||
window.dispatchEvent(new CustomEvent('saveDict', {'detail' : "localStorage"}));
|
|
||||||
}, 50)
|
|
||||||
log(`${i}, ${j} ${event.target.value}`);
|
log(`${i}, ${j} ${event.target.value}`);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
24
enums.js
24
enums.js
@ -4,14 +4,18 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function DataCell(element) {
|
||||||
|
return e('td', null, element);
|
||||||
|
}
|
||||||
|
|
||||||
// NOT A REACT FUNCTIONAL COMPONENT. MERELY RETURNS AN ARRAY WHICH IS UNPACKED
|
// NOT A REACT FUNCTIONAL COMPONENT. MERELY RETURNS AN ARRAY WHICH IS UNPACKED
|
||||||
function EnumeratorItems(index, enumBreakPoints, setEnumBreakPoints, enumNames, setEnumNames, djParam, locked){
|
function EnumeratorItems(index, enumBreakPoints, setEnumBreakPoints, enumNames, setEnumNames, djParam, locked){
|
||||||
let items = [];
|
let items = [];
|
||||||
for (let i = 0; i < MAXENUMPOINTS; i++){
|
for (let i = 0; i < MAXENUMPOINTS; i++){
|
||||||
|
|
||||||
items.push(ListItem(e(TextBox, {locked, onChange: CreateMatrixParamChanger(enumNames, setEnumNames, index, i), value: enumNames[index][i], id:`text-${djParam}-${enumNames[index][i]}`}, null)));
|
items.push(DataCell(e(TextBox, {locked, onChange: CreateMatrixParamChanger(enumNames, setEnumNames, index, i), value: enumNames[index][i], id:`text-${djParam}-${enumNames[index][i]}`}, null)));
|
||||||
// Add 1 to make up for the lower enum bound
|
// Add 1 to make up for the lower enum bound
|
||||||
items.push(ListItem(e(NumberBox, {locked, onChange: CreateMatrixParamChanger(enumBreakPoints, setEnumBreakPoints, index, i + 1), value:enumBreakPoints[index][i + 1]}, null)));
|
items.push(DataCell(e(NumberBox, {locked, onChange: CreateMatrixParamChanger(enumBreakPoints, setEnumBreakPoints, index, i + 1), value:enumBreakPoints[index][i + 1]}, null)));
|
||||||
}
|
}
|
||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
@ -19,15 +23,15 @@ function EnumeratorItems(index, enumBreakPoints, setEnumBreakPoints, enumNames,
|
|||||||
function EnumeratorRow(props){
|
function EnumeratorRow(props){
|
||||||
let linkedText = props.linked ? "<- mods" : "";
|
let linkedText = props.linked ? "<- mods" : "";
|
||||||
|
|
||||||
let content = e('ul', {className: 'lfo-item', id: `${props.djParam}-enum-row`},
|
let content = e('tr', {className: 'lfo-item', id: `${props.djParam}-enum-row`},
|
||||||
ListItem(DropDown({locked:props.locked, onChange: props.setInstanceNum, value:props.instanceNum, options: INSTANCEOPTIONS})),
|
DataCell(DropDown({locked:props.locked, onChange: props.setInstanceNum, value:props.instanceNum, options: INSTANCEOPTIONS})),
|
||||||
ListItem(DropDown({locked:props.locked, onChange: props.setDjParam, value: props.djParam, options: MODPARAMOPTIONS})),
|
DataCell(DropDown({locked:props.locked, onChange: props.setDjParam, value: props.djParam, options: MODPARAMOPTIONS})),
|
||||||
ListItem(e(NumberBox, {locked:props.locked, onChange: props.setEnumItemCounts, step:1, value:props.enumItems, className: 'enum-count'}, null)),
|
DataCell(e(NumberBox, {locked:props.locked, onChange: props.setEnumItemCounts, step:1, value:props.enumItems, className: 'enum-count'}, null)),
|
||||||
ListItem(e(NumberBox, {locked:props.locked, onChange: CreateMatrixParamChanger(props.enumBreakPoints, props.setEnumBreakPoints, props.index, 0), value:props.enumBreakPoints[props.index][0], step:0.1}, null)),
|
DataCell(e(NumberBox, {locked:props.locked, 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, props.locked).slice(0, props.enumItems * 2)),
|
...(EnumeratorItems(props.index, props.enumBreakPoints, props.setEnumBreakPoints, props.enumNames, props.setEnumNames, props.djParam, props.locked).slice(0, props.enumItems * 2)),
|
||||||
ListItem(e(Button, {locked:props.locked, text:'+', onClick: props.addEnum}, null)),
|
DataCell(e(Button, {locked:props.locked, text:'+', onClick: props.addEnum}, null)),
|
||||||
ListItem(e(Button, {locked:props.locked, text:'-', onClick: props.removeEnum}, null)),
|
DataCell(e(Button, {locked:props.locked, text:'-', onClick: props.removeEnum}, null)),
|
||||||
ListItem(e("div", {className:"linked"}, linkedText))
|
DataCell(e("div", {className:"linked"}, linkedText))
|
||||||
);
|
);
|
||||||
if (props.visible){
|
if (props.visible){
|
||||||
return content;
|
return content;
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
420
lfogui.css
420
lfogui.css
@ -1,14 +1,14 @@
|
|||||||
* {
|
* {
|
||||||
--locked-color: #5fadbf;
|
--locked-color: #5fadbf;
|
||||||
--unlocked-color: #ff5153;
|
--unlocked-color: #ff5153;
|
||||||
}
|
}
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
--background: ivory;
|
--background: white;
|
||||||
--active: royalblue;
|
--active: royalblue;
|
||||||
--nonactive: lightsteelblue;
|
--nonactive: rgb(205, 205, 205);
|
||||||
--alert: red;
|
--alert: red;
|
||||||
--textcolor: #737373;
|
--textcolor: black;
|
||||||
}
|
}
|
||||||
|
|
||||||
@import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap');
|
@import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap');
|
||||||
@ -21,49 +21,143 @@ body {
|
|||||||
font-family: "Poppins", sans-serif;
|
font-family: "Poppins", sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
html, body {
|
html,
|
||||||
width: 100%;
|
body {
|
||||||
height: 100%;
|
width: 100%;
|
||||||
margin: 0px;
|
height: 100%;
|
||||||
border: 0;
|
margin: 0px;
|
||||||
overflow-x: hidden; /* no horizontal scrollbar*/
|
border: 0;
|
||||||
overflow-y: scroll;
|
overflow-x: scroll;
|
||||||
display: block; /* No floating content on sides */
|
overflow-y: scroll;
|
||||||
|
display: block;
|
||||||
|
/* No floating content on sides */
|
||||||
}
|
}
|
||||||
|
|
||||||
ul {
|
/*navigation*/
|
||||||
list-style-type: none;
|
.header {
|
||||||
|
display: flex;
|
||||||
|
flex-flow: row nowrap;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin: 1em;
|
||||||
|
border-bottom: 1px solid var(--active);
|
||||||
|
}
|
||||||
|
|
||||||
|
.header button {
|
||||||
|
border: 1px solid var(--active);
|
||||||
|
color: var(--active);
|
||||||
|
background-color: white;
|
||||||
|
padding: 4px;
|
||||||
|
text-align: center;
|
||||||
|
display: inline-block;
|
||||||
|
padding: 0.5em;
|
||||||
|
margin: 4px;
|
||||||
|
font-size: 0.9em;
|
||||||
|
min-width: 4.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
td button {
|
||||||
|
background-color: white;
|
||||||
|
color: var(--active);
|
||||||
|
border: 1px solid var(--active);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* :::::::::::::: SELECTING MODULATORS/ENUMERATORS */
|
||||||
|
|
||||||
|
.header button.highlighted-button {
|
||||||
|
color: var(--active);
|
||||||
|
border: 1px solid var(--active);
|
||||||
|
}
|
||||||
|
|
||||||
|
.header button.unhighlighted-button {
|
||||||
|
color: var(--nonactive);
|
||||||
|
border: 1px solid var(--nonactive);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* table */
|
||||||
|
table {
|
||||||
|
margin: 1em;
|
||||||
|
padding: 0em;
|
||||||
|
border-collapse: collapse;
|
||||||
|
background-color: lightsteelblue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* points datacells should have a min-width*/
|
||||||
|
.enum-count {
|
||||||
|
min-width: 5.6em;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
padding: 0.4em 0.3em;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
thead {
|
||||||
|
color: white;
|
||||||
|
background-color: var(--active);
|
||||||
|
}
|
||||||
|
|
||||||
|
tr,
|
||||||
|
td {
|
||||||
|
margin: 0em;
|
||||||
|
}
|
||||||
|
|
||||||
|
td:last-child {
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* input types */
|
||||||
|
/* dropdown list */
|
||||||
|
select {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
option, select>* {
|
||||||
|
font-size: 0.8em !important;
|
||||||
|
padding: 0em !important;
|
||||||
|
margin: 0em !important;
|
||||||
|
min-height: 0em !important;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
option {
|
||||||
|
background-color: var(--active);
|
||||||
|
}
|
||||||
|
|
||||||
|
option:not(:checked) {
|
||||||
|
background-color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* input */
|
||||||
|
input,
|
||||||
|
select {
|
||||||
|
border: 1px solid var(--active);
|
||||||
|
color: var(--active);
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
overflow: hidden;
|
line-height: 1.5em;
|
||||||
background-color: #333333;
|
height: 1.5em;
|
||||||
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
li {
|
input {
|
||||||
float: left;
|
padding-left: 5px;
|
||||||
}
|
/*slight padding on left*/
|
||||||
|
|
||||||
table {
|
|
||||||
overflow: scroll;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type=number] {
|
input[type=number] {
|
||||||
width: 50px;
|
width: 50px;
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type=text] {
|
input[type=text] {
|
||||||
width: 60px;
|
width: 60px;
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.timeInput {
|
.timeInput {
|
||||||
width: 80px;
|
width: 80px;
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#matrix {
|
#matrix {
|
||||||
@ -80,215 +174,205 @@ input[type=text] {
|
|||||||
|
|
||||||
.numbox-clicked {
|
.numbox-clicked {
|
||||||
user-select: none;
|
user-select: none;
|
||||||
border : solid;
|
border: solid;
|
||||||
font-size: 12vw;
|
font-size: 12vw;
|
||||||
}
|
}
|
||||||
|
|
||||||
.param-input-label {
|
.param-input-label {
|
||||||
width: 93%;
|
width: 93%;
|
||||||
font-size: 5vw;
|
font-size: 5vw;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lfo-input-label {
|
.lfo-input-label {
|
||||||
width: 40%;
|
width: 40%;
|
||||||
font-size: 5vw;
|
font-size: 5vw;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The switch - the box around the slider */
|
/* The switch - the box around the slider */
|
||||||
.switch {
|
.switch {
|
||||||
position: relative;
|
position: relative;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 30px;
|
width: 30px;
|
||||||
height: 17px;
|
height: 17px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Hide default HTML checkbox */
|
/* Hide default HTML checkbox */
|
||||||
.switch input {
|
.switch input {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
width: 0;
|
width: 0;
|
||||||
height: 0;
|
height: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The slider */
|
/* The slider */
|
||||||
.slider {
|
input[type="range"] {
|
||||||
position: absolute;
|
appearance: none;
|
||||||
cursor: pointer;
|
-webkit-appearance: none;
|
||||||
top: 0;
|
height: 8px;
|
||||||
left: 0;
|
border-radius: 6px;
|
||||||
right: 0;
|
background-color: white;
|
||||||
bottom: 0;
|
outline: none;
|
||||||
background-color: #ccc;
|
opacity: 0.7;
|
||||||
-webkit-transition: .4s;
|
-webkit-transition: .2s;
|
||||||
transition: .4s;
|
transition: opacity .2s;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.slider:before {
|
/*slider knob*/
|
||||||
position: absolute;
|
input[type="range"]::-webkit-slider-runnable-track {
|
||||||
content: "";
|
-webkit-appearance: none;
|
||||||
height: 13px;
|
color: var(--active);
|
||||||
width: 13px;
|
margin-top: -1px;
|
||||||
left: 2px;
|
|
||||||
bottom: 2px;
|
|
||||||
background-color: white;
|
|
||||||
-webkit-transition: .4s;
|
|
||||||
transition: .4s;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
input:checked + .slider {
|
input[type="range"]::-webkit-slider-thumb {
|
||||||
background-color: #2196F3;
|
-webkit-appearance: none;
|
||||||
|
appearance: none;
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: var(--active);
|
||||||
|
box-shadow: -80px 0 0 80px var(--active);
|
||||||
}
|
}
|
||||||
|
|
||||||
input:focus + .slider {
|
input[type="range"]::-moz-range-progress {
|
||||||
box-shadow: 0 0 1px #2196F3;
|
background-color: var(--active);
|
||||||
}
|
|
||||||
|
|
||||||
input:checked + .slider:before {
|
|
||||||
-webkit-transform: translateX(13px);
|
|
||||||
-ms-transform: translateX(13px);
|
|
||||||
transform: translateX(13px);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Rounded sliders */
|
|
||||||
.slider.round {
|
|
||||||
border-radius: 17px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slider.round:before {
|
|
||||||
border-radius: 50%;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
h5 {
|
h5 {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
|
||||||
|
|
||||||
.enum-count {
|
|
||||||
background-color: aquamarine;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.label {
|
.label {
|
||||||
background-color: aliceblue;
|
background-color: aliceblue;
|
||||||
padding: 0 4px 0 4px;
|
padding: 0 4px 0 4px;
|
||||||
margin: 0 2px 0 2px;
|
margin: 0 2px 0 2px;
|
||||||
border-color: #333333;
|
border-color: #333333;
|
||||||
border-width: 1px;
|
border-width: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.base-val {
|
.base-val {
|
||||||
background-color: lightgray;
|
border: none;
|
||||||
border-color: #333333;
|
color: white;
|
||||||
border-width: 1px;
|
text-align: center;
|
||||||
width: 50px;
|
font-size: 0.9em;
|
||||||
margin-left: 2px;
|
width: 50px;
|
||||||
margin-top: 1px;
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.linked {
|
.linked {
|
||||||
color: red;
|
color: red;
|
||||||
border-width: 1px;
|
border-width: 1px;
|
||||||
width: 50px;
|
width: 50px;
|
||||||
font-size: small;
|
font-size: small;
|
||||||
margin-left: 2px;
|
margin-left: 2px;
|
||||||
margin-top: 5px;
|
margin-top: 5px;
|
||||||
|
display: none;
|
||||||
|
/*hide*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@keyframes pulse-animation {
|
@keyframes pulse-animation {
|
||||||
0% {
|
0% {
|
||||||
color: black;
|
color: black;
|
||||||
}
|
}
|
||||||
100% {
|
|
||||||
color: red;
|
100% {
|
||||||
}
|
color: red;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#pulse {
|
#pulse {
|
||||||
animation: pulse-animation 0.2s normal;
|
animation: pulse-animation 0.2s normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* :::::::::::::: LOCK CSS */
|
/* :::::::::::::: LOCK CSS */
|
||||||
|
|
||||||
.locked-component {
|
.locked-component {
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
background-color: #333333;
|
background-color: #333333;
|
||||||
color : white;
|
color: white;
|
||||||
}
|
|
||||||
|
|
||||||
.header {
|
|
||||||
display: flex;
|
|
||||||
width: 100%;
|
|
||||||
justify-content: space-between;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Locked */
|
/* Locked */
|
||||||
.lock {
|
.lock {
|
||||||
margin-top: 14px;
|
margin-top: 14px;
|
||||||
width: 24px;
|
width: 24px;
|
||||||
height: 21px;
|
height: 21px;
|
||||||
border: 3px solid var(--locked-color);
|
border: 3px solid var(--locked-color);
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
position: relative;
|
position: relative;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
-webkit-transition: all 0.1s ease-in-out;
|
-webkit-transition: all 0.1s ease-in-out;
|
||||||
transition: all 0.1s ease-in-out;
|
transition: all 0.1s ease-in-out;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lock:after {
|
.lock:after {
|
||||||
content: "";
|
content: "";
|
||||||
display: block;
|
display: block;
|
||||||
background: var(--locked-color);
|
background: var(--locked-color);
|
||||||
width: 3px;
|
width: 3px;
|
||||||
height: 7px;
|
height: 7px;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 50%;
|
top: 50%;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
margin: -3.5px 0 0 -2px;
|
margin: -3.5px 0 0 -2px;
|
||||||
-webkit-transition: all 0.1s ease-in-out;
|
-webkit-transition: all 0.1s ease-in-out;
|
||||||
transition: all 0.1s ease-in-out;
|
transition: all 0.1s ease-in-out;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lock:before {
|
.lock:before {
|
||||||
content: "";
|
content: "";
|
||||||
display: block;
|
display: block;
|
||||||
width: 10px;
|
width: 10px;
|
||||||
height: 10px;
|
height: 10px;
|
||||||
bottom: 100%;
|
bottom: 100%;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
margin-left: -8px;
|
margin-left: -8px;
|
||||||
border: 3px solid var(--locked-color);
|
border: 3px solid var(--locked-color);
|
||||||
border-top-right-radius: 50%;
|
border-top-right-radius: 50%;
|
||||||
border-top-left-radius: 50%;
|
border-top-left-radius: 50%;
|
||||||
border-bottom: 0;
|
border-bottom: 0;
|
||||||
-webkit-transition: all 0.1s ease-in-out;
|
-webkit-transition: all 0.1s ease-in-out;
|
||||||
transition: all 0.1s ease-in-out;
|
transition: all 0.1s ease-in-out;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Locked Hover */
|
/* Locked Hover */
|
||||||
.lock:hover:before {
|
.lock:hover:before {
|
||||||
height: 12px;
|
height: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Unlocked */
|
/* Unlocked */
|
||||||
.unlocked {
|
.unlocked {
|
||||||
transform: rotate(10deg);
|
transform: rotate(10deg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.unlocked:before {
|
.unlocked:before {
|
||||||
bottom: 130%;
|
bottom: 130%;
|
||||||
left: 31%;
|
left: 31%;
|
||||||
margin-left: -11.5px;
|
margin-left: -11.5px;
|
||||||
transform: rotate(-45deg);
|
transform: rotate(-45deg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.unlocked,
|
.unlocked,
|
||||||
.unlocked:before {
|
.unlocked:before {
|
||||||
border-color: var(--unlocked-color);
|
border-color: var(--unlocked-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.unlocked:after {
|
.unlocked:after {
|
||||||
background: var(--unlocked-color);
|
background: var(--unlocked-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Unlocked Hover */
|
/* Unlocked Hover */
|
||||||
.unlocked:hover {
|
.unlocked:hover {
|
||||||
transform: rotate(3deg);
|
transform: rotate(3deg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.unlocked:hover:before {
|
.unlocked:hover:before {
|
||||||
height: 10px;
|
height: 10px;
|
||||||
left: 40%;
|
left: 40%;
|
||||||
bottom: 124%;
|
bottom: 124%;
|
||||||
transform: rotate(-30deg);
|
transform: rotate(-30deg);
|
||||||
}
|
}
|
24
lfogui.html
24
lfogui.html
@ -7,23 +7,21 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<link rel="stylesheet" href="./lfogui.css">
|
<meta charset="utf-8">
|
||||||
|
<link rel="stylesheet" href="./lfogui.css">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div id="lfo-container"></div>
|
<div id="lfo-container"></div>
|
||||||
|
|
||||||
<script src="./react.js"></script>
|
<script src="./react.js"></script>
|
||||||
<script src="./react-dom.js"></script>
|
<script src="./react-dom.js"></script>
|
||||||
<script src="./moment.js"></script>
|
<script src="./moment.js"></script>
|
||||||
<script src="./common.js"></script>
|
<script src="./common.js"></script>
|
||||||
<script src="./enums.js"></script>
|
<script src="./enums.js"></script>
|
||||||
<script src="./modulators.js"></script>
|
<script src="./modulators.js"></script>
|
||||||
<script src="./lfogui.js">
|
<script src="./lfogui.js"></script>
|
||||||
|
|
||||||
|
|
||||||
</script>
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
64
lfogui.js
64
lfogui.js
@ -9,8 +9,8 @@ else
|
|||||||
const e = React.createElement;
|
const e = React.createElement;
|
||||||
|
|
||||||
let lfos = [];
|
let lfos = [];
|
||||||
const MAXLFOS = 20;
|
const MAXLFOS = 200;
|
||||||
const MAXENUMS = 20;
|
const MAXENUMS = 200;
|
||||||
const MAXENUMPOINTS = 10;
|
const MAXENUMPOINTS = 10;
|
||||||
const MAXUSERDEFINED = 4;
|
const MAXUSERDEFINED = 4;
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ const LockModes = Object.freeze({
|
|||||||
var modPhases = Array(MAXLFOS).fill(0);
|
var modPhases = Array(MAXLFOS).fill(0);
|
||||||
var firstUpdateTime = Date.now();
|
var firstUpdateTime = Date.now();
|
||||||
|
|
||||||
const MODULATORLABELS = ["inst", "type", "shape", "param", "timebase", "min", "max", "phase", "center"];
|
const MODULATORLABELS = ["inst", "type", "shape", "param", "timebase", "min", "max", "phase", "center", "result", "", ""];
|
||||||
const ENUMERATORLABELS = ["inst", "parameter", "# points"];
|
const ENUMERATORLABELS = ["inst", "parameter", "# points"];
|
||||||
|
|
||||||
|
|
||||||
@ -65,12 +65,6 @@ function MasterLfoHandler() {
|
|||||||
initVisArr[0] = true;
|
initVisArr[0] = true;
|
||||||
|
|
||||||
const [viewMode, setViewMode] = React.useState(ViewModes.MOD);
|
const [viewMode, setViewMode] = React.useState(ViewModes.MOD);
|
||||||
const toggleViewMode = () => {
|
|
||||||
if (viewMode === ViewModes.MOD)
|
|
||||||
setViewMode(ViewModes.ENUM);
|
|
||||||
else
|
|
||||||
setViewMode(ViewModes.MOD);
|
|
||||||
};
|
|
||||||
|
|
||||||
const [lockMode, setLockMode] = React.useState(LockModes.UNLOCK);
|
const [lockMode, setLockMode] = React.useState(LockModes.UNLOCK);
|
||||||
const toggleLockMode = () => {
|
const toggleLockMode = () => {
|
||||||
@ -80,6 +74,18 @@ function MasterLfoHandler() {
|
|||||||
setLockMode(LockModes.UNLOCK);
|
setLockMode(LockModes.UNLOCK);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const [enabled, setEnabled] = React.useState(false);
|
||||||
|
const toggleEnabled = () => {
|
||||||
|
setEnabled(!enabled);
|
||||||
|
};
|
||||||
|
|
||||||
|
const displayIfEnabled = (content) => {
|
||||||
|
if (enabled)
|
||||||
|
return content
|
||||||
|
}
|
||||||
|
|
||||||
|
let toggleEnabledText = enabled ? `Hide \u{25BE}` : `Show \u{25B8}`;
|
||||||
|
|
||||||
/// MODULATOR ARRAYS
|
/// MODULATOR ARRAYS
|
||||||
let userDefinedWavesBase = [];
|
let userDefinedWavesBase = [];
|
||||||
let userDefinedFunctionsBase = [];
|
let userDefinedFunctionsBase = [];
|
||||||
@ -96,7 +102,7 @@ function MasterLfoHandler() {
|
|||||||
const [modTypeArr, setModTypeArr] = React.useState(Array(MAXLFOS).fill('LFO'));
|
const [modTypeArr, setModTypeArr] = React.useState(Array(MAXLFOS).fill('LFO'));
|
||||||
const [modInstanceNumArr, setModInstanceNumArr] = React.useState(Array(MAXLFOS).fill('1'));
|
const [modInstanceNumArr, setModInstanceNumArr] = React.useState(Array(MAXLFOS).fill('1'));
|
||||||
|
|
||||||
const [modCenterVals, setModCenterVals] = React.useState({ '1': {}, '2': {}, '3': {}, '4': {} });
|
const [modCenterVals, setModCenterVals] = React.useState({ '1': {}, '2': {}, '3': {}, '4': {}, '5': {}, '6': {}});
|
||||||
|
|
||||||
const [ticks, setTicks] = React.useState(0);
|
const [ticks, setTicks] = React.useState(0);
|
||||||
const [beatsInMeasure, setBeatsInMeasure] = React.useState(4);
|
const [beatsInMeasure, setBeatsInMeasure] = React.useState(4);
|
||||||
@ -439,6 +445,7 @@ function MasterLfoHandler() {
|
|||||||
allModSetters[j](array);
|
allModSetters[j](array);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
SendSaveEvent();
|
||||||
rerender(!render);
|
rerender(!render);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -448,6 +455,7 @@ function MasterLfoHandler() {
|
|||||||
let newArr = modVisibleArr.slice();
|
let newArr = modVisibleArr.slice();
|
||||||
newArr[id] = false;
|
newArr[id] = false;
|
||||||
setModVisibleArr(newArr);
|
setModVisibleArr(newArr);
|
||||||
|
SendSaveEvent();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -471,9 +479,15 @@ function MasterLfoHandler() {
|
|||||||
enumItems: enumItemCounts[i],
|
enumItems: enumItemCounts[i],
|
||||||
setEnumItemCounts: CreateParamChanger(enumItemCounts, setEnumItemCounts, i),
|
setEnumItemCounts: CreateParamChanger(enumItemCounts, setEnumItemCounts, i),
|
||||||
enumBreakPoints: enumBreakPoints,
|
enumBreakPoints: enumBreakPoints,
|
||||||
setEnumBreakPoints: setEnumBreakPoints,
|
setEnumBreakPoints: (val) => {
|
||||||
|
setEnumBreakPoints(val);
|
||||||
|
SendSaveEvent
|
||||||
|
},
|
||||||
enumNames: enumNames,
|
enumNames: enumNames,
|
||||||
setEnumNames: setEnumNames,
|
setEnumNames: (val) => {
|
||||||
|
setEnumNames(val);
|
||||||
|
SendSaveEvent
|
||||||
|
},
|
||||||
visible: enumVisibleArr[i],
|
visible: enumVisibleArr[i],
|
||||||
djParam: enumDjParamArr[i],
|
djParam: enumDjParamArr[i],
|
||||||
setDjParam: CreateParamChanger(enumDjParamArr, setEnumDjParamArr, i),
|
setDjParam: CreateParamChanger(enumDjParamArr, setEnumDjParamArr, i),
|
||||||
@ -519,6 +533,7 @@ function MasterLfoHandler() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
rerender(!render);
|
rerender(!render);
|
||||||
|
SendSaveEvent();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
removeEnum: () => {
|
removeEnum: () => {
|
||||||
@ -526,6 +541,7 @@ function MasterLfoHandler() {
|
|||||||
let newArr = enumVisibleArr.slice();
|
let newArr = enumVisibleArr.slice();
|
||||||
newArr[id] = false;
|
newArr[id] = false;
|
||||||
setEnumVisibleArr(newArr);
|
setEnumVisibleArr(newArr);
|
||||||
|
SendSaveEvent();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, null)
|
}, null)
|
||||||
@ -534,16 +550,19 @@ function MasterLfoHandler() {
|
|||||||
|
|
||||||
|
|
||||||
var grid;
|
var grid;
|
||||||
var title;
|
var modButtonClass;
|
||||||
|
var enumButtonClass;
|
||||||
var labels;
|
var labels;
|
||||||
if (viewMode === ViewModes.MOD) {
|
if (viewMode === ViewModes.MOD) {
|
||||||
grid = modContents;
|
grid = modContents;
|
||||||
title = "MODULATORS";
|
modButtonClass = "highlighted-button";
|
||||||
|
enumButtonClass = "unhighlighted-button";
|
||||||
labels = MODULATORLABELS;
|
labels = MODULATORLABELS;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
grid = enumContents;
|
grid = enumContents;
|
||||||
title = "ENUMERATORS";
|
modButtonClass = "unhighlighted-button";
|
||||||
|
enumButtonClass = "highlighted-button";
|
||||||
labels = ENUMERATORLABELS;
|
labels = ENUMERATORLABELS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -557,16 +576,21 @@ function MasterLfoHandler() {
|
|||||||
|
|
||||||
return e('div', null,
|
return e('div', null,
|
||||||
e('div', { className: 'header' },
|
e('div', { className: 'header' },
|
||||||
e(Switch, { ontoggle: toggleViewMode }, null),
|
e('div', {className: 'nav'},
|
||||||
|
displayIfEnabled(e('button', { onClick: () => setViewMode(ViewModes.MOD), className: modButtonClass}, 'Modulators')),
|
||||||
|
displayIfEnabled(e('button', { onClick: () => setViewMode(ViewModes.ENUM), className: enumButtonClass }, 'Enumerators'))
|
||||||
|
),
|
||||||
|
e('button', { onClick: toggleEnabled, id: 'hide-button'}, toggleEnabledText),
|
||||||
|
|
||||||
//allows lock mode
|
//allows lock mode
|
||||||
//e('span', { className: lockClass, onClick: toggleLockMode }, null)
|
//e('span', { className: lockClass, onClick: toggleLockMode }, null)
|
||||||
),
|
),
|
||||||
|
|
||||||
//e('h5', null, title),
|
displayIfEnabled(
|
||||||
e('table', { id: 'table' },
|
e('table', { id: 'table' },
|
||||||
e('thead', null, e('tr', { id: 'headers' }, ...labels.map(x => e('th', null, x)))),
|
e('thead', null, e('tr', { id: 'headers' }, ...labels.map(x => e('th', {id: x == '# points' ? 'points' : x}, x)))),
|
||||||
e('tbody', null, ...grid)
|
e('tbody', null, ...grid)
|
||||||
)
|
))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ var TYPEOPTIONS = ["LFO", "Noise"];
|
|||||||
var SHAPETYPES = ["Sine", "SawUp", "SawDown", "Tri", "Square", "Custom_1", "Custom_2", "Custom_3", "Custom_4"];
|
var SHAPETYPES = ["Sine", "SawUp", "SawDown", "Tri", "Square", "Custom_1", "Custom_2", "Custom_3", "Custom_4"];
|
||||||
var NOISETYPES = ["Rand", "Line Int.", "Sine Int."]
|
var NOISETYPES = ["Rand", "Line Int.", "Sine Int."]
|
||||||
|
|
||||||
var INSTANCEOPTIONS = ["1", "2", "3", "4"];
|
var INSTANCEOPTIONS = ["1", "2", "3", "4", "5", "6"];
|
||||||
|
|
||||||
const MODPARAMOPTIONS = ["NONE", "stream", "pulse_length", "eventfulness", "event_length", "metriclarity",
|
const MODPARAMOPTIONS = ["NONE", "stream", "pulse_length", "eventfulness", "event_length", "metriclarity",
|
||||||
"harmoniclarity", "melodic_cohesion", "melody_scope", "tonic_pitch", "pitch_center", "pitch_range", "dynamics",
|
"harmoniclarity", "melodic_cohesion", "melody_scope", "tonic_pitch", "pitch_center", "pitch_range", "dynamics",
|
||||||
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user