diff --git a/src/API.ts b/src/API.ts index ce27432..968b92b 100644 --- a/src/API.ts +++ b/src/API.ts @@ -1558,7 +1558,7 @@ export class UserAPI { return result; }; - sine = (freq: number = 1, offset: number = 0): number => { + sine = (freq: number = 1, times: number = 1, offset: number = 0): number => { /** * Returns a sine wave between -1 and 1. * @@ -1567,11 +1567,11 @@ export class UserAPI { * @returns A sine wave between -1 and 1 */ return ( - Math.sin(this.app.clock.ctx.currentTime * Math.PI * 2 * freq) + offset + (Math.sin(this.app.clock.ctx.currentTime * Math.PI * 2 * freq) + offset) * times ); }; - usine = (freq: number = 1, offset: number = 0): number => { + usine = (freq: number = 1, times: number = 1, offset: number = 0): number => { /** * Returns a sine wave between 0 and 1. * @@ -1580,10 +1580,10 @@ export class UserAPI { * @returns A sine wave between 0 and 1 * @see sine */ - return (this.sine(freq, offset) + 1) / 2; + return ((this.sine(freq, offset) + 1) / 2) * times }; - saw = (freq: number = 1, offset: number = 0): number => { + saw = (freq: number = 1, times: number = 1, offset: number = 0): number => { /** * Returns a saw wave between -1 and 1. * @@ -1595,10 +1595,10 @@ export class UserAPI { * @see sine * @see noise */ - return ((this.app.clock.ctx.currentTime * freq) % 1) * 2 - 1 + offset; + return (((this.app.clock.ctx.currentTime * freq) % 1) * 2 - 1 + offset) * times; }; - usaw = (freq: number = 1, offset: number = 0): number => { + usaw = (freq: number = 1, times: number = 1, offset: number = 0): number => { /** * Returns a saw wave between 0 and 1. * @@ -1607,10 +1607,10 @@ export class UserAPI { * @returns A saw wave between 0 and 1 * @see saw */ - return (this.saw(freq, offset) + 1) / 2; + return ((this.saw(freq, offset) + 1) / 2) * times; }; - triangle = (freq: number = 1, offset: number = 0): number => { + triangle = (freq: number = 1, times: number = 1, offset: number = 0): number => { /** * Returns a triangle wave between -1 and 1. * @@ -1620,10 +1620,10 @@ export class UserAPI { * @see sine * @see noise */ - return Math.abs(this.saw(freq, offset)) * 2 - 1; + return (Math.abs(this.saw(freq, offset)) * 2 - 1) * times; }; - utriangle = (freq: number = 1, offset: number = 0): number => { + utriangle = (freq: number = 1, times: number = 1, offset: number = 0): number => { /** * Returns a triangle wave between 0 and 1. * @@ -1632,11 +1632,12 @@ export class UserAPI { * @returns A triangle wave between 0 and 1 * @see triangle */ - return (this.triangle(freq, offset) + 1) / 2; + return ((this.triangle(freq, offset) + 1) / 2) * times; }; square = ( freq: number = 1, + times: number = 1, offset: number = 0, duty: number = 0.5 ): number => { @@ -1651,11 +1652,12 @@ export class UserAPI { */ const period = 1 / freq; const t = (Date.now() / 1000 + offset) % period; - return t / period < duty ? 1 : -1; + return (t / period < duty ? 1 : -1) * times; }; usquare = ( freq: number = 1, + times: number = 1, offset: number = 0, duty: number = 0.5 ): number => { @@ -1667,10 +1669,10 @@ export class UserAPI { * @returns A square wave between 0 and 1 * @see square */ - return (this.square(freq, offset, duty) + 1) / 2; + return ((this.square(freq, offset, duty) + 1) / 2) * times; }; - noise = (): number => { + noise = (times: number = 1): number => { /** * Returns a random value between -1 and 1. * @@ -1681,7 +1683,7 @@ export class UserAPI { * @see sine * @see noise */ - return this.randomGen() * 2 - 1; + return (this.randomGen() * 2 - 1) * times; }; // ============================================================= diff --git a/src/documentation/lfos.ts b/src/documentation/lfos.ts index 356c452..34fca48 100644 --- a/src/documentation/lfos.ts +++ b/src/documentation/lfos.ts @@ -8,8 +8,11 @@ export const lfos = (application: Editor): string => { Low Frequency Oscillators (_LFOs_) are an important piece in any digital audio workstation or synthesizer. Topos implements some basic waveforms you can play with to automatically modulate your paremeters. -- sine(freq: number = 1, offset: number= 0): number: returns a sinusoïdal oscillation between -1 and 1. -- usine(freq: number = 1, offset: number= 0): number: returns a sinusoïdal oscillation between 0 and 1. The u stands for _unipolar_. +- sine(freq: number = 1, times: number = 1, offset: number= 0): number: returns a sinusoïdal oscillation between -1 and 1. + - freq : frequency in hertz. + - times : output value multiplier. + - offset: linear offset. +- usine(freq: number = 1, times: number = 1, offset: number= 0): number: returns a sinusoïdal oscillation between 0 and 1. The u stands for _unipolar_. ${makeExample( "Modulating the speed of a sample player using a sine LFO", @@ -17,8 +20,8 @@ ${makeExample( true )}; -- triangle(freq: number = 1, offset: number= 0): number: returns a triangle oscillation between -1 and 1. -- utriangle(freq: number = 1, offset: number= 0): number: returns a triangle oscillation between 0 and 1. The u stands for _unipolar_. +- triangle(freq: number = 1, times: number = 1, offset: number= 0): number: returns a triangle oscillation between -1 and 1. +- utriangle(freq: number = 1, times: number = 1, offset: number= 0): number: returns a triangle oscillation between 0 and 1. The u stands for _unipolar_. ${makeExample( "Modulating the speed of a sample player using a triangle LFO", @@ -26,8 +29,8 @@ ${makeExample( true )} -- saw(freq: number = 1, offset: number= 0): number: returns a sawtooth-like oscillation between -1 and 1. -- usaw(freq: number = 1, offset: number= 0): number: returns a sawtooth-like oscillation between 0 and 1. The u stands for _unipolar_. +- saw(freq: number = 1, times: number = 1, offset: number= 0): number: returns a sawtooth-like oscillation between -1 and 1. +- usaw(freq: number = 1, times: number = 1, offset: number= 0): number: returns a sawtooth-like oscillation between 0 and 1. The u stands for _unipolar_. ${makeExample( "Modulating the speed of a sample player using a saw LFO", @@ -35,8 +38,8 @@ ${makeExample( true )} -- square(freq: number = 1, offset: number= 0, duty: number = .5): number: returns a square wave oscillation between -1 and 1. You can also control the duty cycle using the duty parameter. -- usquare(freq: number = 1, offset: number= 0, duty: number = .5): number: returns a square wave oscillation between 0 and 1. The u stands for _unipolar_. You can also control the duty cycle using the duty parameter. +- square(freq: number = 1, times: number = 1, offset: number= 0, duty: number = .5): number: returns a square wave oscillation between -1 and 1. You can also control the duty cycle using the duty parameter. +- usquare(freq: number = 1, times: number = 1, offset: number= 0, duty: number = .5): number: returns a square wave oscillation between 0 and 1. The u stands for _unipolar_. You can also control the duty cycle using the duty parameter. ${makeExample( "Modulating the speed of a sample player using a square LFO", @@ -44,7 +47,7 @@ ${makeExample( true )}; -- noise(): returns a random value between -1 and 1. +- noise(times: number = 1): returns a random value between -1 and 1. ${makeExample( "Modulating the speed of a sample player using noise", @@ -54,5 +57,3 @@ ${makeExample( ` } - -