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(
`
}
-
-