adding LFOs

This commit is contained in:
2023-08-04 19:00:15 +02:00
parent 2ccfd3ebc8
commit fb3dc33035
2 changed files with 74 additions and 0 deletions

View File

@ -807,6 +807,78 @@ export class UserAPI {
return cycle;
}
// =============================================================
// Low Frequency Oscillators
// =============================================================
sine(freq: number = 1, offset: number=0): number {
/**
* Returns a sine wave between -1 and 1.
*
* @param freq - The frequency of the sine wave
* @param offset - The offset of the sine wave
* @returns A sine wave between -1 and 1
*/
return Math.sin(this.app.clock.ctx.currentTime * Math.PI * 2 * freq) + offset
}
saw(freq: number = 1, offset: number=0): number {
/**
* Returns a saw wave between -1 and 1.
*
* @param freq - The frequency of the saw wave
* @param offset - The offset of the saw wave
* @returns A saw wave between -1 and 1
* @see triangle
* @see square
* @see sine
* @see noise
*/
return (this.app.clock.ctx.currentTime * freq) % 1 * 2 - 1 + offset
}
triangle(freq: number = 1, offset: number=0): number {
/**
* Returns a triangle wave between -1 and 1.
*
* @returns A triangle wave between -1 and 1
* @see saw
* @see square
* @see sine
* @see noise
*/
return Math.abs(this.saw(freq, offset)) * 2 - 1
}
square(freq: number = 1, offset: number=0): number {
/**
* Returns a square wave between -1 and 1.
*
* @returns A square wave between -1 and 1
* @see saw
* @see triangle
* @see sine
* @see noise
*/
return this.saw(freq, offset) > 0 ? 1 : -1
}
noise(): number {
/**
* Returns a random value between -1 and 1.
*
* @returns A random value between -1 and 1
* @see saw
* @see triangle
* @see square
* @see sine
* @see noise
*/
return Math.random() * 2 - 1
}
// =============================================================
// Trivial functions
// =============================================================

View File

@ -12,6 +12,7 @@ export interface TimePosition {
export class Clock {
evaluations: number
ctx: AudioContext
transportNode: TransportNode
bpm: number
time_signature: number[]
@ -20,6 +21,7 @@ export class Clock {
tick: number
constructor(public app: Editor, ctx: AudioContext) {
this.ctx = ctx;
this.tick = 0;
this.time_position = { bar: 0, beat: 0, pulse: 0 }
this.bpm = 120;