feat: add Super LFO app - #606
Draft
kosmar wants to merge 14 commits into
Draft
Conversation
Morphing dual-osc form LFO (app ID 31) with CV destinations, mix modes, and configurator manual including gesture tables.
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
marked this pull request as draft
July 24, 2026 14:17
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
IDs 28–30 reserved for Heat Pump (#603), Grooves (#604), Golden Gate (#605). Independent from
main.Test plan
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:App::clock_ticker, which replaces theClock::get_tickerthis branch was written againstThis branch is still based on an older
mainthat still had the removed clockhelper, 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::TickbecameTick(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.