Released18 Sep 2026Commit1af5062bLine0.3.x

v0.3.2

Add a four-operator FM voice and the chorus, crush and compressor nodes

Notes

This release gives motif the primitives for a fat, FM-heavy tracker sound: a real multi-operator FM voice instead of the two-operator fosc, and the three effects a demoscene mix is made of. Everything is plain C99, builds for wasm32-wasi as well as native, and renders the same samples on both.

Changes

  • make-fm4 / fm4-compute in (sigil dsp osc): four sine operators, an eight-entry DX/OPL-style algorithm table (stack, two-into-one, branch, three-into-one, pairs, stack-plus-one, one-into-three, additive), per-operator ratio, level and ADSR, feedback on operator 4, a modulation index that is a per-sample argument, and a velocity-to-index curve. With index 0 every carrier is a pure sine, so a fosc-style patch is a special case.
  • make-chorus / chorus-compute in (sigil dsp fx): two LFO-modulated taps on one delay line, with rate, depth and mix as per-sample arguments.
  • make-crush / crush-compute: tanh drive, bit-depth quantisation and sample-and-hold rate reduction in one node; drive 0, 16 bits and rate 1 pass the signal through untouched.
  • make-comp / comp-compute: a feed-forward peak compressor with one-pole attack and release; threshold and ratio are per-sample arguments, attack, release and makeup are set at creation. It is mono; a host that wants linked stereo runs one instance on a shared detector or waits for a stereo variant.
  • The new declarations carry specs and docstrings, so sigil exports and the MCP tools show their signatures.
  • src/c is now an exported include directory, so a consumer that links the static library can #include "fm4.h", "fx4.h" or "ks.h" instead of mirroring the structs.

Upgrade notes

No existing binding changed. Consumers that mirror sp_ks in their own C can switch to #include "ks.h" now that the header is on the include path.

Commit

1af5062b

The commit this tag names.

Releases