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",
"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;