UNPKG

@thi.ng/dsp

Version:

Composable signal generators, oscillators, filters, FFT, spectrum, windowing & related DSP utils

31 lines (30 loc) 826 B
import { identity } from "@thi.ng/api/fn"; import { gibbs } from "./anti-alias.js"; import { sin } from "./osc-sin.js"; const additive = (osc, freqFn, ampFn, n) => { const fcache = []; const acache = []; for (let i = 1; i <= n; i++) { fcache.push(freqFn(i)); acache.push(ampFn(i)); } return (phase, freq, amp = 1, dc = 0) => { let y = 0; for (let i = 0; i < n; i++) { y += osc(phase, freq * fcache[i], acache[i]); } return dc + amp * y; }; }; const squareAdditive = (n = 8, useGibbs = true) => additive( sin, (i) => 2 * (i - 1) + 1, (i) => 1 / (2 * (i - 1) + 1) * (useGibbs ? gibbs(n, i) : 1), n ); const sawAdditive = (n = 8, useGibbs = true) => additive(sin, identity, (i) => 1 / i * (useGibbs ? gibbs(n, i) : 1), n); export { additive, sawAdditive, squareAdditive };