@audio/ synth-fm
Status pending calibration
npm0.2.1licenseMIT
FM synthesis — Chowning phase modulation, single-op or serial op stack, bell/epiano presets
FM (phase modulation) — Chowning 1973, single-op or serial ops stack, per-op feedback + index decay; bell/epiano presets; FFT sidebands match Bessel J_k to 0.00%
import fm, { bell, epiano } from '@audio/synth-fm'
Chowning 1973 FM synthesis ("The Synthesis of Complex Audio Spectra by Means of Frequency Modulation," JAES 21(7)), implemented as DX7-style phase modulation. Single operator by default, or a serial ops stack (innermost-first, each op's output phase-modulates the next, last modulates the carrier) — per-op ratio/index/feedback/indexDecay. bell and epiano are FM-classic presets built on the same kernel.
fm(440, { ratio: 1.4, index: 10, indexDecay: 2 }) // → Float32Array
bell(440) // Chowning's inharmonic bell/gong
epiano(440) // 2-op DX7-style e-piano
| Param | Default | |
|---|---|---|
freq |
— | Carrier Hz (positional) |
ratio |
2 |
Modulator:carrier ratio (single-op form) |
index |
5 |
Peak modulation index, radians |
indexDecay |
0 |
Index decay time constant, seconds (0 = static) |
indexFloor |
0 |
Index floor after decay |
feedback |
0 |
Modulator self-feedback, radians |
ops |
— | Serial modulator stack [{ratio, index, ...}] — overrides the single-op params |
duration |
1 |
Seconds |
attack / release |
0.005 / 0.1 |
Seconds |
amp |
0.8 |
Peak amplitude |
fs |
44100 |
Sample rate |
Use when: classic FM timbres (bells, e-piano, brass-ish tones); ops for multi-operator stacks.
Part of @audio/synth — the synth family umbrella.
MIT © audiojs