diff --git a/modulators.js b/modulators.js index 483c889..fc8b991 100644 --- a/modulators.js +++ b/modulators.js @@ -10,6 +10,11 @@ const MODPARAMOPTIONS = ["NONE", "stream", "pulse_length", "eventfulness", "even "harmoniclarity", "melodic_cohesion", "melody_scope", "tonic_pitch", "pitch_center", "pitch_range", "dynamics", "attenuation", "chordal_weight", "tonality-profile", "ostinato-buffer", "ostinato", "meter", "scale"]; +const PhaseTypes = Object.freeze({ + MUSICAL: Symbol("musical"), + TIME: Symbol("time") + }); + function ControlType(){ return e('select', {className: 'control-type'}, Option("LFO")); } @@ -80,9 +85,15 @@ function operateModulators(visibleArr, instanceNumArr, paramNames, centers, freq function operateModulator(center, inst, freq, min, max, waveType, phaseArr, phaseI, userDefinedWave, name, currTime, bpm, beatsInMeasure){ let amp = parseFloat(max) - parseFloat(min); + let phaseType; - freq = parseLfoTime(freq, bpm, beatsInMeasure); - let phase = (currTime * freq + parseFloat(phaseArr[phaseI])) % 1.00; + freq, phaseType = parseLfoTime(freq, bpm, beatsInMeasure); + let phase; + + if (phaseType === PhaseTypes.TIME) + phase = (currTime * freq + parseFloat(phaseArr[phaseI])) % 1.00; + else if (phaseType === PhaseTypes.MUSICAL) + phase = 0; // needs to be worked on let unscaled = indexWave(waveType, phase, userDefinedWave); let el = document.getElementById(`slider-${inst}-${name}`); @@ -95,19 +106,19 @@ function operateModulator(center, inst, freq, min, max, waveType, phaseArr, phas function parseLfoTime(lfoTime, bpm, beatsInMeasure){ if (lfoTime.slice(-2) == "hz"){ - return parseFloat(lfoTime.slice(0, -2)); + return parseFloat(lfoTime.slice(0, -2)), PhaseTypes.TIME; } else if (lfoTime.slice(-2) == "ms"){ - return 1000 / parseFloat(lfoTime.slice(0, -2)); + return 1000 / parseFloat(lfoTime.slice(0, -2)), PhaseTypes.TIME; } else if (lfoTime.slice(-1) == "s"){ - return 1 / parseFloat(lfoTime.slice(0, -1)); + return 1 / parseFloat(lfoTime.slice(0, -1)), PhaseTypes.TIME; } else if ((lfoTime.match(/:/g) || []).length == 2){ - return 1 / moment.duration(lfoTime).asSeconds(); + return 1 / moment.duration(lfoTime).asSeconds(), PhaseTypes.TIME; } else if ((lfoTime.match(/\./g) || []).length == 2){ - return musicalTimingToFreq(...lfoTime.split('.'), bpm, beatsInMeasure) + return musicalTimingToFreq(...lfoTime.split('.'), bpm, beatsInMeasure), PhaseTypes.MUSICAL } else { return 0;