separated phase handling into two options

This commit is contained in:
trian-gles 2024-09-02 16:58:18 +02:00
parent 985b6c832f
commit c794b5bc2f

View File

@ -10,6 +10,11 @@ const MODPARAMOPTIONS = ["NONE", "stream", "pulse_length", "eventfulness", "even
"harmoniclarity", "melodic_cohesion", "melody_scope", "tonic_pitch", "pitch_center", "pitch_range", "dynamics", "harmoniclarity", "melodic_cohesion", "melody_scope", "tonic_pitch", "pitch_center", "pitch_range", "dynamics",
"attenuation", "chordal_weight", "tonality-profile", "ostinato-buffer", "ostinato", "meter", "scale"]; "attenuation", "chordal_weight", "tonality-profile", "ostinato-buffer", "ostinato", "meter", "scale"];
const PhaseTypes = Object.freeze({
MUSICAL: Symbol("musical"),
TIME: Symbol("time")
});
function ControlType(){ function ControlType(){
return e('select', {className: 'control-type'}, Option("LFO")); 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){ function operateModulator(center, inst, freq, min, max, waveType, phaseArr, phaseI, userDefinedWave, name, currTime, bpm, beatsInMeasure){
let amp = parseFloat(max) - parseFloat(min); let amp = parseFloat(max) - parseFloat(min);
let phaseType;
freq = parseLfoTime(freq, bpm, beatsInMeasure); freq, phaseType = parseLfoTime(freq, bpm, beatsInMeasure);
let phase = (currTime * freq + parseFloat(phaseArr[phaseI])) % 1.00; 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 unscaled = indexWave(waveType, phase, userDefinedWave);
let el = document.getElementById(`slider-${inst}-${name}`); 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){ 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)), PhaseTypes.TIME;
} }
else if (lfoTime.slice(-2) == "ms"){ 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"){ 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){ 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){ else if ((lfoTime.match(/\./g) || []).length == 2){
return musicalTimingToFreq(...lfoTime.split('.'), bpm, beatsInMeasure) return musicalTimingToFreq(...lfoTime.split('.'), bpm, beatsInMeasure), PhaseTypes.MUSICAL
} }
else { else {
return 0; return 0;