import { type Editor } from "../main"; import { makeExampleFactory } from "../Documentation"; export const lfos = (application: Editor): string => { const makeExample = makeExampleFactory(application); return ` # Low Frequency Oscillators 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, 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", `beat(.25) && snd('cp').speed(1 + usine(0.25) * 2).out()`, true, )}; - 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", `beat(.25) && snd('cp').speed(1 + utriangle(0.25) * 2).out()`, true, )} - 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", `beat(.25) && snd('cp').speed(1 + usaw(0.25) * 2).out()`, true, )} - 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", `beat(.25) && snd('cp').speed(1 + usquare(0.25, 0, 0.25) * 2).out()`, true, )}; - noise(times: number = 1): returns a random value between -1 and 1. ${makeExample( "Modulating the speed of a sample player using noise", `beat(.25) && snd('cp').speed(1 + noise() * 2).out()`, true, )}; `; };