Skip to content

feat: operator Phase & Warp, mod-matrix destinations, CPU optimisation (v1.06f)

Choose a tag to compare

@gresade gresade released this 30 May 08:42
· 3 commits to fixes since this release

Operator Phase & Warp

  • Add per-operator Warp parameter (±4 range, values beyond ±1 invert one
    half-cycle). Implemented in getNextSample / getNextBlock / getNextBlockHQ
    including the decimated sub-paths. A deadband near zero preserves the fast
    no-warp code path under near-zero modulation.
  • Per-operator start Phase offset retained and wired; oscilloscope phase marker
    visualisation added (FirmwareTftDisplay).
  • Patch format bumped to v1.5; Warp defaults to 0 on load of older patches,
    out-of-range values clamped on load (PreenFMFileType.cpp).

Modulation matrix

  • New destinations OSC1..6_PHASE and OSC1..6_WARP added to DestinationEnum
    (Common.h).
  • Phase applied at note-on; Warp updated every block in
    Voice::prepareMatrixForNewBlock via updateWarpWithMatrix (Voice.cpp / Osc.h).
  • Matrix destination labels o1Ph–o6Ph and o1Wr–o6Wr wired in FMDisplayEditor.

MIDI

  • CC_OSC1..6_WARP mapped per operator (MidiDecoder.cpp / MidiDecoder.h).
  • ENCODER_OSC_WARP encoder row added to editor UI.

Synth engine / init

  • Osc::init now receives phaseParamsBase pointer; each oscillator binds its
    Warp directly to its per-timbre phase row, fixing parameter ownership across
    timbres (Osc.cpp / Timbre.cpp / SynthState.cpp / SynthState.h).

CPU optimisation

  • quantizeOscOutputBeforeEnvelope skipped in non-decimation block-render paths
    (getNextBlock, getNextBlockHQ, getNextSample), removing a branch + two
    multiplies per sample in the common case.
  • waveDecimationEnabled cached once per block call instead of read per sample.
  • Selective #pragma GCC optimize("Ofast","fast-math") applied in Release builds
    only to six hot DSP translation units: Osc.cpp, Voice.cpp, FxBus.cpp,
    TimbreFx.cpp, SimpleComp.cpp, SimpleEnvelope.cpp.
  • Release makefile: -O2 for DebugLQFP144; LTO enabled for Release link.

Versioning

  • firmware version bumped to v1.06f (version.h).

Documentation

  • README.md updated with full description of Phase, Warp, mod-matrix
    destinations, CPU optimisation, and patch migration notes.