Compare commits
No commits in common. "149d1a0b8d1b8f2ce5b617872ab409b0a11a49fb" and "c706461443969e418c9ccfb5c62a1e4e4ef2b2a2" have entirely different histories.
149d1a0b8d
...
c706461443
@ -49,10 +49,6 @@ function CreateParamChanger(arr, setArr, index, postCB=() => {}, preCB=(val) =>
|
|||||||
newArr[index] = preCB(event.target.value);
|
newArr[index] = preCB(event.target.value);
|
||||||
setArr(newArr);
|
setArr(newArr);
|
||||||
postCB();
|
postCB();
|
||||||
setTimeout(() => {
|
|
||||||
window.dispatchEvent(new CustomEvent('saveDict', {'detail' : "localStorage"}));
|
|
||||||
}, 50)
|
|
||||||
|
|
||||||
log(`${index} ${event.target.value}`);
|
log(`${index} ${event.target.value}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -64,9 +60,6 @@ function CreateMatrixParamChanger(matrix, setMatrix, i, j){
|
|||||||
});
|
});
|
||||||
newMatrix[i][j] = event.target.value;
|
newMatrix[i][j] = event.target.value;
|
||||||
setMatrix(newMatrix);
|
setMatrix(newMatrix);
|
||||||
setTimeout(() => {
|
|
||||||
window.dispatchEvent(new CustomEvent('saveDict', {'detail' : "localStorage"}));
|
|
||||||
}, 50)
|
|
||||||
log(`${i}, ${j} ${event.target.value}`);
|
log(`${i}, ${j} ${event.target.value}`);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
765
example.maxpat
765
example.maxpat
File diff suppressed because it is too large
Load Diff
20
lfogui.js
20
lfogui.js
@ -60,6 +60,7 @@ function nnFreqToHzString(num){
|
|||||||
|
|
||||||
|
|
||||||
function MasterLfoHandler(){
|
function MasterLfoHandler(){
|
||||||
|
|
||||||
let initVisArr = Array(MAXLFOS).fill(false);
|
let initVisArr = Array(MAXLFOS).fill(false);
|
||||||
initVisArr[0] = true;
|
initVisArr[0] = true;
|
||||||
|
|
||||||
@ -80,12 +81,9 @@ function MasterLfoHandler(){
|
|||||||
};
|
};
|
||||||
|
|
||||||
/// MODULATOR ARRAYS
|
/// MODULATOR ARRAYS
|
||||||
let userDefinedWavesBase = [];
|
|
||||||
|
|
||||||
for (let i=0; i<4; i++){
|
const [userDefinedWave, setUserDefinedWave] = React.useState(Array(50).fill(0));
|
||||||
userDefinedWavesBase.push(Array(50).fill(0));
|
|
||||||
}
|
|
||||||
const [userDefinedWaves, setUserDefinedWaves] = React.useState(userDefinedWavesBase);
|
|
||||||
const [modVisibleArr, setModVisibleArr] = React.useState(initVisArr);
|
const [modVisibleArr, setModVisibleArr] = React.useState(initVisArr);
|
||||||
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'));
|
||||||
@ -244,7 +242,7 @@ function MasterLfoHandler(){
|
|||||||
function handleTick(event) {
|
function handleTick(event) {
|
||||||
let time = (Date.now() - firstUpdateTime) / 1000;
|
let time = (Date.now() - firstUpdateTime) / 1000;
|
||||||
let noiseData = {lastPhaseArr, setLastPhaseArr, cachedNoiseValueArr1, setCachedNoiseValueArr1, cachedNoiseValueArr2, setCachedNoiseValueArr2, noiseTypeArr};
|
let noiseData = {lastPhaseArr, setLastPhaseArr, cachedNoiseValueArr1, setCachedNoiseValueArr1, cachedNoiseValueArr2, setCachedNoiseValueArr2, noiseTypeArr};
|
||||||
operateModulators(modVisibleArr, modTypeArr, modInstanceNumArr, djParamArr, modCenterVals, freqArr, minArr, maxArr, shapeArr, initPhaseArr, noiseData, userDefinedWaves, time, beatsInMeasure, ticks);
|
operateModulators(modVisibleArr, modTypeArr, modInstanceNumArr, djParamArr, modCenterVals, freqArr, minArr, maxArr, shapeArr, initPhaseArr, noiseData, userDefinedWave, time, beatsInMeasure, ticks);
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleTimeSig(event) {
|
function handleTimeSig(event) {
|
||||||
@ -252,8 +250,7 @@ function MasterLfoHandler(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
function handleChangeUserWave(event){
|
function handleChangeUserWave(event){
|
||||||
userDefinedWaves[event.detail.index] = event.detail.points;
|
setUserDefinedWave(event.detail);
|
||||||
setUserDefinedWaves(userDefinedWaves);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleMaxTicks(event){
|
function handleMaxTicks(event){
|
||||||
@ -341,7 +338,7 @@ function MasterLfoHandler(){
|
|||||||
window.removeEventListener('userWave', handleChangeUserWave);
|
window.removeEventListener('userWave', handleChangeUserWave);
|
||||||
window.removeEventListener('maxTicks', handleMaxTicks);
|
window.removeEventListener('maxTicks', handleMaxTicks);
|
||||||
};
|
};
|
||||||
}, [...allModArrays, ...allEnumArrays, ...allEnumMats, userDefinedWaves, modCenterVals, render, beatsInMeasure, ticks]);
|
}, [...allModArrays, ...allEnumArrays, ...allEnumMats, userDefinedWave, modCenterVals, render, beatsInMeasure, ticks]);
|
||||||
|
|
||||||
|
|
||||||
function CheckLinked(inst, param, checkInstArr, checkParamArr){
|
function CheckLinked(inst, param, checkInstArr, checkParamArr){
|
||||||
@ -576,9 +573,8 @@ if (!DEBUG){
|
|||||||
window.dispatchEvent(new CustomEvent('maxTicks', {'detail' : val}));
|
window.dispatchEvent(new CustomEvent('maxTicks', {'detail' : val}));
|
||||||
});
|
});
|
||||||
|
|
||||||
window.max.bindInlet("userWave", (index, ...points) => {
|
window.max.bindInlet("userWave", (...points) => {
|
||||||
let data = {points, index};
|
window.dispatchEvent(new CustomEvent('userWave', {'detail' : points}));
|
||||||
window.dispatchEvent(new CustomEvent('userWave', {'detail' : data}));
|
|
||||||
});
|
});
|
||||||
|
|
||||||
setInterval(() => {
|
setInterval(() => {
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
|
|
||||||
var TYPEOPTIONS = ["LFO", "Noise"];
|
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"];
|
||||||
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"];
|
||||||
@ -61,11 +61,7 @@ function LfoRow(props){
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function indexUserWave(phase, index, userDefinedWaves){
|
function indexWave(type, phase, userDefinedWave){
|
||||||
return parseFloat(userDefinedWaves[index][Math.floor(phase * 50)]) / 127
|
|
||||||
}
|
|
||||||
|
|
||||||
function indexWave(type, phase, userDefinedWaves){
|
|
||||||
switch (type){
|
switch (type){
|
||||||
case "Sine":
|
case "Sine":
|
||||||
return (Math.sin(phase * Math.PI * 2) / 2) + 0.5;
|
return (Math.sin(phase * Math.PI * 2) / 2) + 0.5;
|
||||||
@ -77,18 +73,12 @@ function indexWave(type, phase, userDefinedWaves){
|
|||||||
return phase > 0.5? (1-phase) * 2 : phase * 2;
|
return phase > 0.5? (1-phase) * 2 : phase * 2;
|
||||||
case "Square":
|
case "Square":
|
||||||
return +(phase > 0.5);
|
return +(phase > 0.5);
|
||||||
case "Custom_1":
|
case "Custom":
|
||||||
return indexUserWave(phase, 1, userDefinedWaves);
|
return parseFloat(userDefinedWave[Math.floor(phase * 50)]) / 127
|
||||||
case "Custom_2":
|
|
||||||
return indexUserWave(phase, 2, userDefinedWaves);
|
|
||||||
case "Custom_3":
|
|
||||||
return indexUserWave(phase, 3, userDefinedWaves);
|
|
||||||
case "Custom_4":
|
|
||||||
return indexUserWave(phase, 4, userDefinedWaves);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function operateModulators(visibleArr, typeArr, instanceNumArr, paramNames, centers, freqs, mins, maxs, waveTypes, phaseArr, noiseData, userDefinedWaves, currTime, beatsInMeasure, ticks){
|
function operateModulators(visibleArr, typeArr, instanceNumArr, paramNames, centers, freqs, mins, maxs, waveTypes, phaseArr, noiseData, userDefinedWave, currTime, beatsInMeasure, ticks){
|
||||||
for (let i=0; i<paramNames.length; i++){
|
for (let i=0; i<paramNames.length; i++){
|
||||||
if (visibleArr[i]){
|
if (visibleArr[i]){
|
||||||
|
|
||||||
@ -102,7 +92,7 @@ function operateModulators(visibleArr, typeArr, instanceNumArr, paramNames, cent
|
|||||||
let output = 0;
|
let output = 0;
|
||||||
|
|
||||||
if (typeArr[i] == "LFO")
|
if (typeArr[i] == "LFO")
|
||||||
output = operateLFO(center, inst, freqs[i], mins[i], maxs[i], waveTypes[i], phaseArr, i, userDefinedWaves, name, currTime, beatsInMeasure, ticks);
|
output = operateLFO(center, inst, freqs[i], mins[i], maxs[i], waveTypes[i], phaseArr, i, userDefinedWave, name, currTime, beatsInMeasure, ticks);
|
||||||
else
|
else
|
||||||
output = operateNoise(center, inst, freqs[i], mins[i], maxs[i], waveTypes[i], phaseArr, i, name, noiseData, currTime, beatsInMeasure, ticks);
|
output = operateNoise(center, inst, freqs[i], mins[i], maxs[i], waveTypes[i], phaseArr, i, name, noiseData, currTime, beatsInMeasure, ticks);
|
||||||
if (name !== "NONE")
|
if (name !== "NONE")
|
||||||
@ -111,7 +101,7 @@ function operateModulators(visibleArr, typeArr, instanceNumArr, paramNames, cent
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function operateLFO(center, inst, timeBaseStr, min, max, waveType, phaseArr, phaseIndex, userDefinedWaves, name, currTime, beatsInMeasure, maxTicks){
|
function operateLFO(center, inst, timeBaseStr, min, max, waveType, phaseArr, phaseIndex, userDefinedWave, name, currTime, beatsInMeasure, maxTicks){
|
||||||
let amp = parseFloat(max) - parseFloat(min);
|
let amp = parseFloat(max) - parseFloat(min);
|
||||||
let phaseType;
|
let phaseType;
|
||||||
let timeBase;
|
let timeBase;
|
||||||
@ -123,7 +113,7 @@ function operateLFO(center, inst, timeBaseStr, min, max, waveType, phaseArr, pha
|
|||||||
phase = (currTime * timeBase + parseFloat(phaseArr[phaseIndex])) % 1.00;
|
phase = (currTime * timeBase + parseFloat(phaseArr[phaseIndex])) % 1.00;
|
||||||
else if (phaseType === PhaseTypes.MUSICAL)
|
else if (phaseType === PhaseTypes.MUSICAL)
|
||||||
phase = (maxTicks % timeBase) / timeBase;
|
phase = (maxTicks % timeBase) / timeBase;
|
||||||
let unscaled = indexWave(waveType, phase, userDefinedWaves);
|
let unscaled = indexWave(waveType, phase, userDefinedWave);
|
||||||
syncDisplay(inst, name, unscaled);
|
syncDisplay(inst, name, unscaled);
|
||||||
|
|
||||||
return unscaled * amp + center + parseFloat(min);
|
return unscaled * amp + center + parseFloat(min);
|
||||||
|
Loading…
Reference in New Issue
Block a user