musical timing

This commit is contained in:
Kieran McAuliffe 2024-07-31 17:02:09 +02:00
parent ebd09dfd26
commit 1d8610fa5f
6 changed files with 176 additions and 366 deletions

View File

@ -39,12 +39,12 @@ function Switch(props){
e('span', {className: 'slider round'}, null)) e('span', {className: 'slider round'}, null))
} }
function CreateParamChanger(arr, setArr, index, cb=() => {}){ function CreateParamChanger(arr, setArr, index, postCB=() => {}, preCB=(val) => val){
return (event) => { return (event) => {
let newArr = arr.slice(); let newArr = arr.slice();
newArr[index] = event.target.value; newArr[index] = preCB(event.target.value);
setArr(newArr); setArr(newArr);
cb(); postCB();
log(`${index} ${event.target.value}`); log(`${index} ${event.target.value}`);
} }
} }

View File

@ -10,7 +10,7 @@
} }
, ,
"classnamespace" : "box", "classnamespace" : "box",
"rect" : [ 533.0, 91.0, 930.0, 869.0 ], "rect" : [ 533.0, 91.0, 1344.0, 869.0 ],
"bglocked" : 0, "bglocked" : 0,
"openinpresentation" : 0, "openinpresentation" : 0,
"default_fontsize" : 12.0, "default_fontsize" : 12.0,
@ -39,6 +39,54 @@
"subpatcher_template" : "", "subpatcher_template" : "",
"assistshowspatchername" : 0, "assistshowspatchername" : 0,
"boxes" : [ { "boxes" : [ {
"box" : {
"id" : "obj-53",
"maxclass" : "button",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "bang" ],
"parameter_enable" : 0,
"patching_rect" : [ 737.0, 43.0, 24.0, 24.0 ]
}
}
, {
"box" : {
"id" : "obj-1",
"maxclass" : "newobj",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 684.0, 146.0, 94.0, 22.0 ],
"text" : "prepend timesig"
}
}
, {
"box" : {
"id" : "obj-52",
"maxclass" : "newobj",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 545.0, 135.0, 89.0, 22.0 ],
"text" : "prepend tempo"
}
}
, {
"box" : {
"id" : "obj-49",
"linecount" : 2,
"maxclass" : "comment",
"numinlets" : 1,
"numoutlets" : 0,
"patching_rect" : [ 868.0, 96.0, 150.0, 33.0 ],
"text" : "ADD SUPPORT FOR MUSICAL TIMINGS"
}
}
, {
"box" : { "box" : {
"id" : "obj-37", "id" : "obj-37",
"maxclass" : "newobj", "maxclass" : "newobj",
@ -115,9 +163,9 @@
"patching_rect" : [ 643.0, 770.0, 40.0, 22.0 ], "patching_rect" : [ 643.0, 770.0, 40.0, 22.0 ],
"restore" : [ { "restore" : [ {
"data" : { "data" : {
"enumArrays" : [ [ 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ "3", 2, 2, "2", "2", "2", "2", "2", "2", "2" ], [ "meter", "NONE", "NONE", "attenuation", "attenuation", "attenuation", "attenuation", "attenuation", "attenuation", "attenuation" ] ], "enumArrays" : [ [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ "3", 2, 2, "2", "2", "2", "2", "2", "2", "2" ], [ "meter", "NONE", "NONE", "attenuation", "attenuation", "attenuation", "attenuation", "attenuation", "attenuation", "attenuation" ] ],
"enumMats" : [ [ [ 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 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] ], [ [ "3 4", "4 4", "7 8", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ] ] ], "enumMats" : [ [ [ 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 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] ], [ [ "3 4", "4 4", "7 8", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "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" ], [ "meter", "eventfulness", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE" ], [ "0.1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1" ], [ "0.5", "1", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0" ], [ "2.5", "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" ] ] "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" ], [ "meter", "eventfulness", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE" ], [ "0.1hz", "1hz", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1" ], [ "0.5", "1", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0" ], [ "2.5", "0", "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" ] ]
} }
} }
@ -136,9 +184,9 @@
"box" : { "box" : {
"data" : { "data" : {
"data" : { "data" : {
"enumArrays" : [ [ 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ "3", 2, 2, "2", "2", "2", "2", "2", "2", "2" ], [ "meter", "NONE", "NONE", "attenuation", "attenuation", "attenuation", "attenuation", "attenuation", "attenuation", "attenuation" ] ], "enumArrays" : [ [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ "3", 2, 2, "2", "2", "2", "2", "2", "2", "2" ], [ "meter", "NONE", "NONE", "attenuation", "attenuation", "attenuation", "attenuation", "attenuation", "attenuation", "attenuation" ] ],
"enumMats" : [ [ [ 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 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] ], [ [ "3 4", "4 4", "7 8", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ] ] ], "enumMats" : [ [ [ 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 ], [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] ], [ [ "3 4", "4 4", "7 8", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "param", "param", "param", "param" ], [ "param", "param", "param", "param", "param", "param", "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" ], [ "meter", "eventfulness", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE" ], [ "0.1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1" ], [ "0.5", "1", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0" ], [ "2.5", "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" ] ] "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" ], [ "meter", "eventfulness", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE", "NONE" ], [ "0.1hz", "1hz", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1" ], [ "0.5", "1", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0" ], [ "2.5", "0", "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" ] ]
} }
} }
@ -170,31 +218,6 @@
"text" : "print" "text" : "print"
} }
}
, {
"box" : {
"id" : "obj-9",
"linecount" : 2,
"maxclass" : "comment",
"numinlets" : 1,
"numoutlets" : 0,
"patching_rect" : [ 904.0, 80.0, 150.0, 33.0 ],
"text" : "FINISH THE SAVING THING!!!"
}
}
, {
"box" : {
"id" : "obj-48",
"maxclass" : "newobj",
"numinlets" : 1,
"numoutlets" : 4,
"outlettype" : [ "", "bang", "", "dictionary" ],
"patching_rect" : [ 129.0, 107.0, 50.5, 22.0 ],
"text" : "DJster",
"varname" : "DJster"
}
} }
, { , {
"box" : { "box" : {
@ -203,22 +226,10 @@
"numinlets" : 2, "numinlets" : 2,
"numoutlets" : 9, "numoutlets" : 9,
"outlettype" : [ "int", "int", "float", "float", "float", "", "int", "float", "" ], "outlettype" : [ "int", "int", "float", "float", "float", "", "int", "float", "" ],
"patching_rect" : [ 253.0, 520.0, 103.0, 22.0 ], "patching_rect" : [ 744.815790414810181, 107.0, 103.0, 22.0 ],
"text" : "transport" "text" : "transport"
} }
}
, {
"box" : {
"id" : "obj-46",
"linecount" : 4,
"maxclass" : "comment",
"numinlets" : 1,
"numoutlets" : 0,
"patching_rect" : [ 1045.5, 6.0, 153.0, 60.0 ],
"text" : "Should be an indicator for modulators if there is a corresponding enumerator and vice versa"
}
} }
, { , {
"box" : { "box" : {
@ -323,19 +334,20 @@
"numoutlets" : 1, "numoutlets" : 1,
"outlettype" : [ "" ], "outlettype" : [ "" ],
"patching_rect" : [ 569.0, 647.0, 87.0, 22.0 ], "patching_rect" : [ 569.0, 647.0, 87.0, 22.0 ],
"text" : "meter 7 8" "text" : "meter 4 4"
} }
} }
, { , {
"box" : { "box" : {
"id" : "obj-31", "id" : "obj-31",
"linecount" : 2,
"maxclass" : "message", "maxclass" : "message",
"numinlets" : 2, "numinlets" : 2,
"numoutlets" : 1, "numoutlets" : 1,
"outlettype" : [ "" ], "outlettype" : [ "" ],
"patching_rect" : [ 485.0, 647.0, 80.0, 22.0 ], "patching_rect" : [ 485.0, 647.0, 80.0, 35.0 ],
"text" : "stream 0.364" "text" : "stream 0.207125"
} }
} }
@ -347,7 +359,7 @@
"numoutlets" : 1, "numoutlets" : 1,
"outlettype" : [ "" ], "outlettype" : [ "" ],
"patching_rect" : [ 347.0, 647.0, 133.0, 22.0 ], "patching_rect" : [ 347.0, 647.0, 133.0, 22.0 ],
"text" : "metriclarity param2" "text" : "metriclarity 20"
} }
} }
@ -370,7 +382,7 @@
"maxclass" : "comment", "maxclass" : "comment",
"numinlets" : 1, "numinlets" : 1,
"numoutlets" : 0, "numoutlets" : 0,
"patching_rect" : [ 522.0, 528.0, 268.0, 33.0 ], "patching_rect" : [ 518.0, 541.0, 268.0, 33.0 ],
"text" : "we can only output symbols from jweb, so this turns them into lists" "text" : "we can only output symbols from jweb, so this turns them into lists"
} }
@ -382,7 +394,7 @@
"numinlets" : 1, "numinlets" : 1,
"numoutlets" : 1, "numoutlets" : 1,
"outlettype" : [ "" ], "outlettype" : [ "" ],
"patching_rect" : [ 423.5, 539.0, 71.0, 22.0 ], "patching_rect" : [ 423.5, 552.0, 71.0, 22.0 ],
"text" : "fromsymbol" "text" : "fromsymbol"
} }
@ -607,7 +619,7 @@
"numinlets" : 1, "numinlets" : 1,
"numoutlets" : 1, "numoutlets" : 1,
"outlettype" : [ "" ], "outlettype" : [ "" ],
"patching_rect" : [ 403.52631402015686, 149.0, 774.105266809463501, 365.0 ], "patching_rect" : [ 402.0, 174.0, 788.631580829620361, 367.0 ],
"rendermode" : 0, "rendermode" : 0,
"url" : "file://lfogui.html" "url" : "file://lfogui.html"
} }
@ -615,6 +627,13 @@
} }
], ],
"lines" : [ { "lines" : [ {
"patchline" : {
"destination" : [ "obj-2", 0 ],
"source" : [ "obj-1", 0 ]
}
}
, {
"patchline" : { "patchline" : {
"destination" : [ "obj-27", 0 ], "destination" : [ "obj-27", 0 ],
"source" : [ "obj-10", 0 ] "source" : [ "obj-10", 0 ]
@ -759,7 +778,7 @@
, { , {
"patchline" : { "patchline" : {
"destination" : [ "obj-15", 0 ], "destination" : [ "obj-15", 0 ],
"order" : 1, "order" : 2,
"source" : [ "obj-37", 0 ] "source" : [ "obj-37", 0 ]
} }
@ -767,6 +786,14 @@
, { , {
"patchline" : { "patchline" : {
"destination" : [ "obj-16", 0 ], "destination" : [ "obj-16", 0 ],
"order" : 1,
"source" : [ "obj-37", 0 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-47", 0 ],
"order" : 0, "order" : 0,
"source" : [ "obj-37", 0 ] "source" : [ "obj-37", 0 ]
} }
@ -794,6 +821,20 @@
"source" : [ "obj-40", 0 ] "source" : [ "obj-40", 0 ]
} }
}
, {
"patchline" : {
"destination" : [ "obj-1", 0 ],
"source" : [ "obj-47", 5 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-52", 0 ],
"source" : [ "obj-47", 4 ]
}
} }
, { , {
"patchline" : { "patchline" : {
@ -801,6 +842,20 @@
"source" : [ "obj-5", 0 ] "source" : [ "obj-5", 0 ]
} }
}
, {
"patchline" : {
"destination" : [ "obj-2", 0 ],
"source" : [ "obj-52", 0 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-47", 0 ],
"source" : [ "obj-53", 0 ]
}
} }
, { , {
"patchline" : { "patchline" : {
@ -810,304 +865,7 @@
} }
], ],
"parameters" : { "dependency_cache" : [ ],
"obj-48::obj-1" : [ "Outset Pulses", "Outset Pulses", 0 ],
"obj-48::obj-104" : [ "Tonality Profile", "Tonality Profile", 0 ],
"obj-48::obj-109" : [ "Play", "Play", 0 ],
"obj-48::obj-11" : [ "Eventfulness", "Eventfulness", 0 ],
"obj-48::obj-110" : [ "Event Length", "Event Length", 0 ],
"obj-48::obj-122" : [ "Choice", "Choice", 0 ],
"obj-48::obj-128" : [ "Ostinato Buffer", "Ostinato Buffer", 0 ],
"obj-48::obj-13" : [ "Melody Scope", "Melody Scope", 0 ],
"obj-48::obj-136" : [ "Sorted", "Sorted", 0 ],
"obj-48::obj-155" : [ "Use Transport", "Use Transport", 0 ],
"obj-48::obj-158" : [ "Subdivision", "Subdivision", 0 ],
"obj-48::obj-16" : [ "Scale", "Scale", 0 ],
"obj-48::obj-187" : [ "meters", "meters", 0 ],
"obj-48::obj-188" : [ "Pitchsets", "Pitchsets", 0 ],
"obj-48::obj-206" : [ "Chordal Weight", "Chordal Weight", 0 ],
"obj-48::obj-217" : [ "Overlap", "Overlap", 0 ],
"obj-48::obj-22" : [ "Pulse Length", "Pulse Length", 0 ],
"obj-48::obj-24" : [ "Harmoniclarity", "Harmoniclarity", 0 ],
"obj-48::obj-25" : [ "Pitch Center", "Pitch Center", 0 ],
"obj-48::obj-26" : [ "Pitch Range", "Pitch Range", 0 ],
"obj-48::obj-27" : [ "Dynamics", "Dynamics", 0 ],
"obj-48::obj-28" : [ "Attenuation", "Attenuation", 0 ],
"obj-48::obj-29" : [ "Ostinato", "Ostinato", 0 ],
"obj-48::obj-32" : [ "live.text[1]", "Clear Scales", 0 ],
"obj-48::obj-47" : [ "Silent Downbeat", "Silent Downbeat", 0 ],
"obj-48::obj-49" : [ "Sync", "Sync", 0 ],
"obj-48::obj-5" : [ "Metriclarity", "Metriclarity", 0 ],
"obj-48::obj-52" : [ "Tonic Pitch", "Tonic Pitch", 0 ],
"obj-48::obj-53" : [ "Precision", "Precision", 0 ],
"obj-48::obj-56" : [ "Precision[1]", "Preset Tab", 0 ],
"obj-48::obj-77" : [ "Melodic Cohesion", "Melodic Cohesion", 0 ],
"obj-48::obj-87" : [ "Sync Type", "menu", 0 ],
"obj-48::obj-88" : [ "Scala Browser", "Scala Browser", 0 ],
"parameterbanks" : {
"0" : {
"index" : 0,
"name" : "",
"parameters" : [ "-", "-", "-", "-", "-", "-", "-", "-" ]
}
}
,
"parameter_overrides" : {
"obj-48::obj-1" : {
"parameter_range" : [ 1, 8 ]
}
,
"obj-48::obj-13" : {
"parameter_unitstyle" : 7
}
,
"obj-48::obj-25" : {
"parameter_unitstyle" : 8
}
,
"obj-48::obj-26" : {
"parameter_unitstyle" : 7
}
,
"obj-48::obj-52" : {
"parameter_unitstyle" : 8
}
}
,
"inherited_shortname" : 1
}
,
"dependency_cache" : [ {
"name" : "AdditiveMeter2.maxpat",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"type" : "JSON",
"implicit" : 1
}
, {
"name" : "Autobusk-µPlayer.maxpat",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/DJster/core",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/DJster/core",
"type" : "JSON",
"implicit" : 1
}
, {
"name" : "DJster.maxpat",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/DJster",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/DJster",
"type" : "JSON",
"implicit" : 1
}
, {
"name" : "Inner-Equation.5.maxpat",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"type" : "JSON",
"implicit" : 1
}
, {
"name" : "Inside.3.maxpat",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"type" : "JSON",
"implicit" : 1
}
, {
"name" : "Mod.2.maxpat",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"type" : "JSON",
"implicit" : 1
}
, {
"name" : "Pof_(Qi)(i=0toz-r-1).2.maxpat",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"type" : "JSON",
"implicit" : 1
}
, {
"name" : "Pof_(Qj)(j=1toz).2.maxpat",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"type" : "JSON",
"implicit" : 1
}
, {
"name" : "Pof_(Qz+1-k)(k=0tor).2.maxpat",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"type" : "JSON",
"implicit" : 1
}
, {
"name" : "Qz+1-k2.maxpat",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"type" : "JSON",
"implicit" : 1
}
, {
"name" : "Qz-r2.maxpat",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"type" : "JSON",
"implicit" : 1
}
, {
"name" : "TIE.7.maxpat",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"type" : "JSON",
"implicit" : 1
}
, {
"name" : "Total-Internal-Equation.6.maxpat",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"type" : "JSON",
"implicit" : 1
}
, {
"name" : "bytecount.maxpat",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/DJster/core",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/DJster/core",
"type" : "JSON",
"implicit" : 1
}
, {
"name" : "composite-meters.txt",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"type" : "TEXT",
"implicit" : 1
}
, {
"name" : "dispenser.maxpat",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"type" : "JSON",
"implicit" : 1
}
, {
"name" : "djster.accum.maxpat",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/DJster/core",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/DJster/core",
"type" : "JSON",
"implicit" : 1
}
, {
"name" : "dumper.2.maxpat",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"type" : "JSON",
"implicit" : 1
}
, {
"name" : "harmonic-energy-profile.txt",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/DJster/Profiles",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/DJster/Profiles",
"type" : "TEXT",
"implicit" : 1
}
, {
"name" : "harmonicity.maxpat",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/DJster/Tonality",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/DJster/Tonality",
"type" : "JSON",
"implicit" : 1
}
, {
"name" : "indigestibility.maxpat",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/DJster/Tonality",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/DJster/Tonality",
"type" : "JSON",
"implicit" : 1
}
, {
"name" : "meter-subpatch.maxpat",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/DJster/core",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/DJster/core",
"type" : "JSON",
"implicit" : 1
}
, {
"name" : "mxj.mxo",
"type" : "iLaX"
}
, {
"name" : "outset.maxpat",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/DJster/core",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/DJster/core",
"type" : "JSON",
"implicit" : 1
}
, {
"name" : "packback.maxpat",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/abstractions",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/abstractions",
"type" : "JSON",
"implicit" : 1
}
, {
"name" : "platform.js",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/javascript",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/javascript",
"type" : "TEXT",
"implicit" : 1
}
, {
"name" : "primefactors.txt",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/maps/microMaps",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/maps/microMaps",
"type" : "TEXT",
"implicit" : 1
}
, {
"name" : "psi-functions.txt",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"type" : "TEXT",
"implicit" : 1
}
, {
"name" : "reader.maxpat",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"type" : "JSON",
"implicit" : 1
}
, {
"name" : "reader2.maxpat",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/DJster/dispenser",
"type" : "JSON",
"implicit" : 1
}
, {
"name" : "scalaFileBase.js",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/javascript",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/javascript",
"type" : "TEXT",
"implicit" : 1
}
, {
"name" : "scale-subpatch-exp.maxpat",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/patchers/DJster/core",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/patchers/DJster/core",
"type" : "JSON",
"implicit" : 1
}
, {
"name" : "scriptingname.js",
"bootpath" : "~/Documents/Max 8/Packages/MaxScore/javascript",
"patcherrelativepath" : "../../Max 8/Packages/MaxScore/javascript",
"type" : "TEXT",
"implicit" : 1
}
],
"autosave" : 0 "autosave" : 0
} }

View File

@ -200,6 +200,7 @@
<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="./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>

View File

@ -28,6 +28,8 @@ const MODULATORLABELS = ["-type-", "---shape---", "-------param-------", "--time
const ENUMERATORLABELS = ["---parameter---", "-# points-"]; const ENUMERATORLABELS = ["---parameter---", "-# points-"];
function MasterLfoHandler(){ function MasterLfoHandler(){
let initVisArr = Array(MAXLFOS).fill(false); let initVisArr = Array(MAXLFOS).fill(false);
@ -47,10 +49,13 @@ function MasterLfoHandler(){
const [modCenterVals, setModCenterVals] = React.useState({}); const [modCenterVals, setModCenterVals] = React.useState({});
const [bpm, setBpm] = React.useState(100);
const [beatsInMeasure, setBeatsInMeasure] = React.useState(4);
const [shapeArr, setShapeArr] = React.useState(Array(MAXLFOS).fill('Sine')); const [shapeArr, setShapeArr] = React.useState(Array(MAXLFOS).fill('Sine'));
const [djParamArr, setDjParamArr] = React.useState(Array(MAXLFOS).fill('NONE')); const [djParamArr, setDjParamArr] = React.useState(Array(MAXLFOS).fill('NONE'));
const [timeArr, setTimeArr] = React.useState(Array(MAXLFOS).fill('1hz')); const [freqArr, setFreqArr] = React.useState(Array(MAXLFOS).fill('1hz'));
// const [ampArr, setAmpArr] = React.useState(Array(MAXLFOS).fill('1')); // const [ampArr, setAmpArr] = React.useState(Array(MAXLFOS).fill('1'));
const [minArr, setMinArr] = React.useState(Array(MAXLFOS).fill('0')); const [minArr, setMinArr] = React.useState(Array(MAXLFOS).fill('0'));
@ -58,8 +63,8 @@ function MasterLfoHandler(){
const [phaseArr, setPhaseArr] = React.useState(Array(MAXLFOS).fill('0')); const [phaseArr, setPhaseArr] = React.useState(Array(MAXLFOS).fill('0'));
const allModArrays = [modVisibleArr, shapeArr, djParamArr, timeArr, minArr, maxArr, phaseArr]; const allModArrays = [modVisibleArr, shapeArr, djParamArr, freqArr, minArr, maxArr, phaseArr];
const allModSetters = [setModVisibleArr, setShapeArr, setDjParamArr, setTimeArr, setMinArr, setMaxArr, setPhaseArr]; const allModSetters = [setModVisibleArr, setShapeArr, setDjParamArr, setFreqArr, setMinArr, setMaxArr, setPhaseArr];
const modBlankVals = [true, SHAPETYPES[0], MODPARAMOPTIONS[0], '1', '0', '1', '0']; const modBlankVals = [true, SHAPETYPES[0], MODPARAMOPTIONS[0], '1', '0', '1', '0'];
@ -186,7 +191,15 @@ function MasterLfoHandler(){
function handleTick(event) { function handleTick(event) {
let time = (Date.now() - firstUpdateTime) / 1000; let time = (Date.now() - firstUpdateTime) / 1000;
operateModulators(modVisibleArr, djParamArr, modCenterVals, timeArr, minArr, maxArr, shapeArr, phaseArr, time); operateModulators(modVisibleArr, djParamArr, modCenterVals, freqArr, minArr, maxArr, shapeArr, phaseArr, time, bpm, beatsInMeasure);
}
function handleBpm(event) {
setBpm(event.detail);
}
function handleTimeSig(event) {
setBeatsInMeasure(parseFloat(event.detail[0]) * parseFloat(event.detail[1])/ 4);
} }
@ -195,6 +208,8 @@ function MasterLfoHandler(){
window.addEventListener('tick', handleTick); window.addEventListener('tick', handleTick);
window.addEventListener('param', handleParam); window.addEventListener('param', handleParam);
window.addEventListener('enum', handleEnum); window.addEventListener('enum', handleEnum);
window.addEventListener('tempo', handleBpm);
window.addEventListener('timesig', handleTimeSig);
return () => { return () => {
window.removeEventListener('loadDict', handleLoad); window.removeEventListener('loadDict', handleLoad);
@ -202,8 +217,10 @@ function MasterLfoHandler(){
window.removeEventListener('tick', handleTick); window.removeEventListener('tick', handleTick);
window.removeEventListener('param', handleParam); window.removeEventListener('param', handleParam);
window.removeEventListener('enum', handleEnum); window.removeEventListener('enum', handleEnum);
window.removeEventListener('tempo', handleBpm);
window.removeEventListener('timesig', handleTimeSig);
}; };
}, [...allModArrays, ...allEnumArrays, ...allEnumMats, modCenterVals, render]); }, [...allModArrays, ...allEnumArrays, ...allEnumMats, modCenterVals, render, bpm, beatsInMeasure]);
@ -224,8 +241,8 @@ function MasterLfoHandler(){
setDjParam: CreateParamChanger(djParamArr, setDjParamArr, i), setDjParam: CreateParamChanger(djParamArr, setDjParamArr, i),
centerVals: modCenterVals, centerVals: modCenterVals,
freq: timeArr[i], freq: freqArr[i],
setFreq: CreateParamChanger(timeArr, setTimeArr, i), setFreq: CreateParamChanger(freqArr, setFreqArr, i),
//amp: ampArr[i], //amp: ampArr[i],
//setAmp: CreateParamChanger(ampArr, setAmpArr, i), //setAmp: CreateParamChanger(ampArr, setAmpArr, i),
@ -388,6 +405,14 @@ if (!DEBUG){
window.dispatchEvent(new CustomEvent('param', {'detail' : [paramName, val]})); window.dispatchEvent(new CustomEvent('param', {'detail' : [paramName, val]}));
}); });
window.max.bindInlet("tempo", (val) => {
window.dispatchEvent(new CustomEvent('tempo', {'detail' : val}));
});
window.max.bindInlet("timesig", (top, bottom) => {
window.dispatchEvent(new CustomEvent('timesig', {'detail' : [top, bottom]}));
});
setInterval(() => { setInterval(() => {
window.dispatchEvent(new CustomEvent('tick')); window.dispatchEvent(new CustomEvent('tick'));
}, 200); }, 200);

View File

@ -56,7 +56,7 @@ function indexWave(type, phase){
} }
} }
function operateModulators(visibleArr, paramNames, centers, lfoTimes, mins, maxs, waveTypes, phaseArr, currTime){ function operateModulators(visibleArr, paramNames, centers, freqs, mins, maxs, waveTypes, phaseArr, currTime, bpm, beatsInMeasure){
for (let i=0; i<paramNames.length; i++){ for (let i=0; i<paramNames.length; i++){
if (visibleArr[i]){ if (visibleArr[i]){
let name = paramNames[i]; let name = paramNames[i];
@ -64,16 +64,16 @@ function operateModulators(visibleArr, paramNames, centers, lfoTimes, mins, maxs
if (centers.hasOwnProperty(name)){ if (centers.hasOwnProperty(name)){
center = centers[name]; center = centers[name];
} }
let output = operateModulator(center, lfoTimes[i], mins[i], maxs[i], waveTypes[i], phaseArr, i, name, currTime); let output = operateModulator(center, freqs[i], mins[i], maxs[i], waveTypes[i], phaseArr, i, name, currTime, bpm, beatsInMeasure);
if (name !== "NONE") if (name !== "NONE")
window.dispatchEvent(new CustomEvent('enum', {'detail' : [name, output]})); window.dispatchEvent(new CustomEvent('enum', {'detail' : [name, output]}));
} }
} }
} }
function operateModulator(center, lfoTime, min, max, waveType, phaseArr, phaseI, name, currTime){ function operateModulator(center, freq, min, max, waveType, phaseArr, phaseI, name, currTime, bpm, beatsInMeasure){
let amp = parseFloat(max) - parseFloat(min); let amp = parseFloat(max) - parseFloat(min);
let freq = parseLfoTime(lfoTime); freq = parseLfoTime(freq, bpm, beatsInMeasure);
let phase = (currTime * freq + parseFloat(phaseArr[phaseI])) % 1.00; let phase = (currTime * freq + parseFloat(phaseArr[phaseI])) % 1.00;
let unscaled = indexWave(waveType, phase); let unscaled = indexWave(waveType, phase);
let el = document.getElementById(`slider-${name}`); let el = document.getElementById(`slider-${name}`);
@ -84,9 +84,33 @@ function operateModulator(center, lfoTime, min, max, waveType, phaseArr, phaseI,
return unscaled * amp + center + parseFloat(min); return unscaled * amp + center + parseFloat(min);
} }
/* @param */
function parseLfoTime(lfoTime){ function parseLfoTime(lfoTime, bpm, beatsInMeasure){
if (lfoTime.slice(-2) == "hz"){ if (lfoTime.slice(-2) == "hz"){
return parseFloat(lfoTime.slice(0, -2)); return parseFloat(lfoTime.slice(0, -2));
} }
} else if (lfoTime.slice(-2) == "ms"){
return 1000 / parseFloat(lfoTime.slice(0, -2));
}
else if (lfoTime.slice(-1) == "s"){
return 1 / parseFloat(lfoTime.slice(0, -1));
}
else if ((lfoTime.match(/:/g) || []).length == 2){
return 1 / moment.duration(lfoTime).asSeconds();
}
else if ((lfoTime.match(/\./g) || []).length == 2){
return musicalTimingToFreq(...lfoTime.split('.'), bpm, beatsInMeasure)
}
else {
return 0;
}
}
function musicalTimingToFreq(bars, beats, ticks, bpm, beatsInMeasure){
let totalTicks = (parseFloat(bars) * parseFloat(beatsInMeasure) + beats) * 480 + parseFloat(ticks);
let tpm = bpm * 480;
let cyclesPerMinute = tpm / totalTicks;
let hz = cyclesPerMinute / 60;
return hz;
}

2
moment.js Normal file

File diff suppressed because one or more lines are too long