feat: new LFO waveforms

This commit is contained in:
cha0s 2021-02-06 03:04:11 -06:00
parent 74cbad6e7d
commit d27d324f2c

View File

@ -9,18 +9,26 @@ const Modulator = {
return () => 0.5; return () => 0.5;
}, },
Linear() {
return (location) => location;
},
Random({variance = 0.4} = {}) { Random({variance = 0.4} = {}) {
return () => Math.abs((Math.random() * (variance + variance) - variance)) % 1; return () => Math.abs((Math.random() * (variance + variance) - variance)) % 1;
}, },
Sawtooth() {
return (location) => location;
},
Sine() { Sine() {
return (location) => 0.5 * (1 + Math.sin(location * Math.PI * 2)); return (location) => 0.5 * (1 + Math.sin(location * Math.PI * 2));
}, },
Square() {
return (location) => (location < 0.5 ? 0 : 1);
},
Triangle() {
return (location) => 2 * Math.abs(((location + 0.75) % 1) - 0.5);
},
}; };
const decorate = compose( const decorate = compose(
@ -55,7 +63,7 @@ export default class ModulatedProperty extends decorate(Class) {
this.key = key; this.key = key;
if (!modulators) { if (!modulators) {
// eslint-disable-next-line no-param-reassign // eslint-disable-next-line no-param-reassign
modulators = [Modulator.Linear]; modulators = [Modulator.Triangle];
} }
if (!Array.isArray(modulators)) { if (!Array.isArray(modulators)) {
// eslint-disable-next-line no-param-reassign // eslint-disable-next-line no-param-reassign
@ -70,12 +78,12 @@ export default class ModulatedProperty extends decorate(Class) {
this.min = this.median - (magnitude / 2); this.min = this.median - (magnitude / 2);
const modulatorFunction = (modulator) => { const modulatorFunction = (modulator) => {
if ('string' === typeof modulator) { if ('string' === typeof modulator) {
return Modulator[modulator] ? Modulator[modulator] : Modulator.Linear; return Modulator[modulator] ? Modulator[modulator] : Modulator.Triangle;
} }
if ('function' === typeof modulator) { if ('function' === typeof modulator) {
return modulator; return modulator;
} }
return Modulator.Linear; return Modulator.Triangle;
}; };
this.modulators = modulators.map((modulator) => { this.modulators = modulators.map((modulator) => {
if ('object' !== typeof modulator) { if ('object' !== typeof modulator) {