Skip to content

v0.3.6 - Sample & Hold · Slew · Chaos · Euclidean sequencer · engine fixes

Choose a tag to compare

@filliformes filliformes released this 24 Apr 21:26
· 52 commits to main since this release

Three new modulators, Euclidean sequencing, and a stack of correctness + performance fixes.

Downloads

  • Windows installer: dataFLOU_compositor-0.3.6-win-x64.exe (NSIS, recommended)
  • Windows portable: dataFLOU_compositor-0.3.6-portable.exe (single-file, no install)
  • macOS: dataFLOU_compositor-0.3.6-mac-universal.dmg (Universal; Intel + Apple Silicon). Unsigned - ctrl-click → Open the first time to bypass Gatekeeper.

What's new

New modulators (modular-synth inspired)

  • Sample & Hold: classic S&H with optional cosine-smoothed output and a Probability knob that lets a clock tick occasionally hold the previous sample (Turing-Machine-style locked-in feel).
  • Slew: random target at the clock rate, glides toward it with independent rise/fall half-life (1 ms – 60 s each). Asymmetric rise/fall gives analog envelope character; OFF target mode is a predictable ±1 square-wave glide.
  • Chaos: logistic-map iteration x ← r · x · (1 − x). r 3.4 – 4.0 spans stable → onset-of-chaos → period-3 window (3.83) → fully chaotic (4.0). Deterministic but feels random.
  • All three share the existing Free Hz / BPM-synced (dotted/triplet) clock controls and Unipolar / Bipolar output modes, so they drop in alongside LFO-style workflows.

Euclidean sequencer

  • New Pattern: Steps (cycle) | Euclidean selector at the top of the Sequencer block. Euclidean mode exposes Pulses and Rotate with a live preview row (filled = hit, outlined = rest, blue-ringed = playing step).
  • Hits emit stepValues[i] normally; misses emit no OSC so the receiver holds its last value. Pattern comes from Toussaint's angle method, memoized per (pulses, steps, rotation) triple.
  • Cell badge shows EUC 3/8 (or EUC 5/8 +2 with rotation).

Follow actions finally work everywhere

  • Stale-closure fix: the duration-timer held a reference to the scene object at trigger time. Edits made mid-duration (changing nextMode or multiplicator in the UI) never took effect until the next retrigger. Now the timer re-reads the scene from the live session on every fire.
  • Empty-grid fallback: next/prev/first/last/any/other silently turned into Stop when nothing was placed in the Sequence grid. Engine now walks the palette (session.scenes in order) as a fallback, so follow actions work out of the box even before you arrange anything in the Sequence view.

Stop actually stops

  • Removed the legacy "keep-alive carve-out" where modulation/sequencer kept the scene alive after the duration elapsed. Stop now morphs every armed cell to 0 over its transitionMs and clears activeSceneId. Clean full stop.

Correctness + polish

  • S&H smooth mode math fixed: cosine period was 2π instead of π, so the output wobbled prev → held → prev inside every sample period instead of smoothly tweening prev → held.
  • Shutdown sequencing: duplicate before-quit handlers consolidated into a single idempotent shutdown(). Autosave + engine no longer double-stop, OSC flush timer clears in the correct order.
  • Next dropdown widened: "Previous", "First", "Last" etc. no longer crop on narrow scene columns.
  • MetaKnob is memoized: parent re-renders no longer ripple through all 8 visible knobs. Smoother during MIDI CC sweeps and bank switches.

Cleanup

  • Dead StatusBar component deleted from SequenceView (~100 lines) - the global TransportBar has been doing the job since 0.3.5.