diff --git a/enums.js b/enums.js index 2277207..526327c 100644 --- a/enums.js +++ b/enums.js @@ -27,4 +27,18 @@ function EnumeratorRow(props){ if (props.visible){ return content; }; -} \ No newline at end of file +} + +// FIX THIS +function enumerate(name, inval, count, keys, vals){ + let output = "OUT OF RANGE"; + for (let i=0; i < count; i++){ + if (inval >= keys[i]){ + output = vals[i - 1]; + break + } + } + + window.max.outlet(name + " " + output); +} + diff --git a/lfogui.js b/lfogui.js index 381bba9..8d0730c 100644 --- a/lfogui.js +++ b/lfogui.js @@ -120,12 +120,36 @@ function MasterLfoHandler(){ window.max.setDict(event.detail, {"data" : data}); } + + // only called internally by 1. Handler after modulator processing 2. LFO outputs + function handleEnum(event){ + let name = event.detail[0]; + let val = event.detail[1]; + + // if none of the Enums use this param, then we output it + let i = 0; + while (i < MAXENUMS){ + if (enumVisibleArr[i] && enumNames[i] == name) + break; + i++ + } + if (i == MAXENUMS){ + window.max.outlet(name + ' ' + val); + } + else { + window.max.outlet(name + ' ' + val); + } + + + } + + function handleParam(event) { let name = event.detail[0]; let val = event.detail[1]; - // if none of the LFOs use this param, then we output it raw + // if none of the LFOs use this param, then we send it straight to the enum let i = 0; while (i < MAXLFOS){ if (modVisibleArr[i] && djParamArr[i] == name) @@ -133,7 +157,7 @@ function MasterLfoHandler(){ i++ } if (i == MAXLFOS){ - window.max.outlet(name + ' ' + val); + window.dispatchEvent(new CustomEvent('enum', {'detail' : [name, val]})); } modCenterVals[name] = val; @@ -156,12 +180,14 @@ function MasterLfoHandler(){ window.addEventListener('saveDict', handleSave); window.addEventListener('tick', handleTick); window.addEventListener('param', handleParam); + window.addEventListener('enum', handleEnum); return () => { window.removeEventListener('loadDict', handleLoad); window.removeEventListener('saveDict', handleSave); window.removeEventListener('tick', handleTick); window.removeEventListener('param', handleParam); + window.removeEventListener('enum', handleEnum); }; }, [...allModArrays, ...allEnumArrays, ...allEnumMats, modCenterVals]); diff --git a/modulators.js b/modulators.js index d407a81..a8e849a 100644 --- a/modulators.js +++ b/modulators.js @@ -52,18 +52,17 @@ function operateModulators(visibleArr, paramNames, centers, freqs, amps, waveTyp if (centers.hasOwnProperty(name)){ center = centers[name]; } - let output = operateModulator(name, center, freqs[i], amps[i], waveTypes[i], phaseArr, i, delta); - window.max.outlet(output); + let output = operateModulator(center, freqs[i], amps[i], waveTypes[i], phaseArr, i, delta); + window.dispatchEvent(new CustomEvent('enum', {'detail' : [name, output]})); } } } -function operateModulator(paramName, center, freq, amp, waveType, phaseArr, phaseI, delta){ +function operateModulator(center, freq, amp, waveType, phaseArr, phaseI, delta){ let oldPhase = phaseArr[phaseI]; let newPhase = (oldPhase + freq * delta) % 1.00; phaseArr[phaseI] = newPhase; - let outputVal = indexWave(waveType, newPhase) * amp + center; - return paramName + ' ' + outputVal.toString(); + return indexWave(waveType, newPhase) * amp + center; } \ No newline at end of file