@thi.ng/dsp
Version:
Composable signal generators, oscillators, filters, FFT, spectrum, windowing & related DSP utils
31 lines (30 loc) • 826 B
JavaScript
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
};