Skip to content

Add one-shot LFO sync modes, expand LFO shapes, and optimize FM decimation

Choose a tag to compare

@gresade gresade released this 26 May 20:22
· 7 commits to fixes since this release

FM decimation reworked for performance and consistency:

  • cap selectable precision to 1..19 bit plus Full mode
  • remove 20..24 bit modes from engine enum/UI path
  • simplify quantization path by removing expensive phase-accumulator quantization
  • add D=2 temporal sample-and-hold behavior in decimated oscillator render paths
  • keep feedback rendering full-rate for stability
  • precompute per-voice decimation scale/invScale and use saturating fixed-point-style rounding

Preset/patch compatibility and format updates:

  • bump patch format to 1.4
  • add dedicated per-LFO sync-mode storage in synth params/flash params
  • persist/restore new sync-mode fields in flash conversion
  • for older patches, derive sync mode from legacy internal/external frequency behavior
  • clamp legacy decimation values 20..24 to 19-bit on load
  • clamp sync mode values to valid range on load

LFO sync system expanded:

  • add sync mode model: Int, Ext, and one-shot 1..8 cycles for both internal/external clocks
  • decouple one-shot behavior from KSync so they can be combined
  • add one-shot runtime handling (remaining-cycle counter, terminal hold value, shape-aware terminal behavior)
  • prevent one-shot retrigger during overlapping mono/unison glide note transitions

LFO engine and shape expansion:

  • extend LFO shape enum/editor/renderer with new shapes:
    • SawDown, DecayExp, DecayLog, RiseExp, RiseLog, AttackDecay, AttackHoldDecay, S-Decay, Buchla Plong variants, SinSquare, SinZero, SinPos, and User1..User6
  • refactor shape execution into dedicated executors with precomputed constants
  • add curve lookup table header for exp/log/damping tables used by new LFO shapes

UI/oscilloscope updates:

  • extend sync selector labels and encoder handling for new sync modes
  • update LFO oscilloscope preview to render all new shapes
  • add one-shot hold visualization after the configured shot count
  • update LFO oscilloscope parameter passing to include sync mode

Misc updates:

  • move TFT display instance to RAM_D1 section
  • bump firmware version string to v1.06c
  • update CLI build script to derive firmware/bootloader versions from headers and generate release names dynamically (with safe fallbacks)
  • refresh README branch notes to reflect decimation and LFO sync/shape behavior changes