Skip to content

feat: add Super LFO app - #606

Draft
kosmar wants to merge 14 commits into
ATOVproject:mainfrom
kosmar:feat/super-lfo-app
Draft

feat: add Super LFO app#606
kosmar wants to merge 14 commits into
ATOVproject:mainfrom
kosmar:feat/super-lfo-app

Conversation

@kosmar

@kosmar kosmar commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Adds Super LFO (app ID 32): two-channel morphing form LFO with skew, phase-warp, character, dual-osc mix (Xfade/Min/Max/Sum), Quad/Octave Osc B, and assignable CV in.
  • Left/right long-press mute CV in / CV out; freeze, phase reset/reverse, clock sync, CV destination cycle.
  • Manual entry with gesture/LED tables (Left Fader / Right Fader naming); includes markdown table rendering.
  • Mix balance is a configurator param (0–100%, default 50%) and drives Xfade (Min/Max/Sum ignore it). Amp is live only via CV destination Amp.

IDs 28–30 reserved for Heat Pump (#603), Grooves (#604), Golden Gate (#605). Independent from main.

Test plan

  • Flash firmware; load Super LFO on two adjacent channels
  • Left fader morphs waveshape; Right fader character; Shift+Right sets speed
  • Button+Left skew / Button+Right phase-warp behave as documented
  • Left short = freeze; Left long = mute CV in; Right short = reset; Right long = mute out
  • Shift+Left cycles CV dest / mix mode; Shift+Right reverse / clock sync
  • Mix Mode + Osc B in Configurator change the dual-osc character
  • Configurator Manual → Super LFO tables render correctly

Prerequisites

The platform pieces this app needs are under review as their own PRs, so that
each app PR stays small enough to review on its own.

Required — these APIs do not exist on current main:

This branch is still based on an older main that still had the removed clock
helper, which is why it builds on its own but not after a rebase.

On top of the PRs above there is an app-side change: ClockEvent::Tick became
Tick(u64) in #579, so the match arm here has to be updated.

Building any of this on a current Rust nightly also needs the toolchain fix in
#632.

Morphing dual-osc form LFO (app ID 31) with CV destinations, mix modes,
and configurator manual including gesture tables.
@kosmar kosmar mentioned this pull request Jul 22, 2026
7 tasks
kosmar added 4 commits July 23, 2026 01:01
Expose Mix balance as a configurator param (default 50%) and drive
Xfade from it; migrate legacy signed −100…+100 values on load.
Bring Super LFO UX up to the tested hardware session: wave-following
button brightness with a mute-safe floor, continuous HSV morph hue,
freeze-on-stop when clocked, flash hold-offs for dest/mix/sync feedback,
Ch1 Main=Character / Third=Warp, and always-on bipolar output metering.
Update the configurator manual to match.
@kosmar
kosmar marked this pull request as draft July 24, 2026 14:17
kosmar and others added 9 commits July 25, 2026 20:30
Replace Character with classic pulse-width shape and CV attenuator Alt
with an internal rate-mod wobble; extend CV destinations accordingly.

Co-authored-by: Cursor <cursoragent@cursor.com>
Stronger mid-fader PWM lean, faster/deeper rate wobble (±2× gain with
curved depth), and a crawl floor so full-depth troughs do not freeze.

Co-authored-by: Cursor <cursoragent@cursor.com>
Match UI/manual naming to phase-lean behavior (not true pulse-width
modulation).

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Authored by an AI coding agent on behalf of kosmar.
The branch still used the ID it was first drafted with. ID 31 now belongs to
another app in docs/wip-app-ids.md, and 28 is reserved for Sift, so two of these
app branches would have collided on merge.

Authored by an AI coding agent on behalf of kosmar.
Throttle the audio loop to 8 ms (stock LFO cadence), scale phase/timers,
and defer FRAM saves off the fader hot path so Grooves and peers stop
stalling when morph/skew/amp/speed are scrubbed.

Authored by an AI coding agent on behalf of kosmar.

Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant