Skip to content

OPM.js v1.12.0

Choose a tag to compare

@YueyuHoshizora YueyuHoshizora released this 22 Oct 06:25
· 4 commits to main since this release

Package 1.12.0, voice format still v7, no worklet protocol changes.

  • Faster rendering. All-sine voices use one function per algorithm with per-frame folded amplitudes, including voices with per-operator LFO AM. Envelope gains and settled pitch envelopes are cached, and silent operators are skipped. fastSin is now degree 11 (|error| ≤ 1.4e-11), and a deterministic fastExp2 is added.
  • Linear-phase half-band FIR decimation now runs once per stereo channel after the mix. Square and saw use polyBLEP; half-wave uses polyBLAMP.
  • New optional output settings: saturation: 'soft-knee' is exactly linear below 0.5 and approaches 0.7 above it. dcBlock: true adds a 3 Hz high-pass before the output stage. The defaults are unchanged. Both settings work in Synth, OPM (opm.saturation, opm.dcBlock), renderNote, sequence and Worker rendering, and score projects.
  • Behavior changes: a released note ends once its audible carriers are silent. lfo.delay now fades depth in over 20 ms. The FIR adds a constant 13.25-frame delay for standard.
  • Measured against v1.11.1 on Apple M5 / Node 26 (CPU time, best of five interleaved runs, one machine): 8 voices at standard 1.51×, 32 voices 1.89×, high 1.73×, eco 1.39×, pitch envelopes 2.10×, noise hi-hat 2.11×, 16 mixed presets 1.64×. A single voice is unchanged within noise.
  • CI passed on Node 22/24/26, Windows Arm and Chromium/Firefox/WebKit: https://github.com/JS-PACKAGE/OPM.js/actions/runs/39733282020. A scoped static security review found no evidence-backed issue.
  • Not published to npm. Physical-device, MIDI-hardware and human-listening acceptance remain unverified.

Tarball SHA-256: 72eaab9f3ae30d7696a7ae0a32dc5fe4bc76de391e51cbce0846b558301769a8