Skip to content

feat: echolot MIDI/CV delay - #608

Draft
kosmar wants to merge 20 commits into
ATOVproject:mainfrom
kosmar:feat/echolot
Draft

feat: echolot MIDI/CV delay#608
kosmar wants to merge 20 commits into
ATOVproject:mainfrom
kosmar:feat/echolot

Conversation

@kosmar

@kosmar kosmar commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Adds Echolot (app id 33): 1-channel MIDI/CV delay with regenerative feedback, pitch interval, optional ping-pong MIDI outs, mute ring-out / long-press panic.
  • Configurator: manual entry; Routing / MIDI Out Pong for MIDI→MIDI and CV→MIDI; i32 params show min–max; wider delay/clock/interval/feedback ranges.
  • Ping-Pong MIDI notes alternate across Out A/B (with NoteOff pairing); feedback=0 still seeds a stereo tap. CV→CC remains delay-offset seed to Out B.
  • Gate→Note + Ping-Pong seeds Out B at input (same as MIDI→MIDI) so Pong is no longer silent.
  • Button LED: Mid→Low duck on delay activity (input flash still wins).
  • Feedback NoteOffs are no longer dropped when the queue is near capacity (stuck-note / beep fix); same-due events release before attack.
  • Idle delay metronome only ducks the button — Top/Bottom pulses mean real MIDI/CV out.

Test plan

  • Flash firmware with Echolot on a channel; load app from configurator
  • MIDI→MIDI: delay + feedback + interval; mute ring-out; long-press panic
  • MIDI→CV and CV→MIDI modes smoke-test on hardware
  • Ping-Pong + 2 distinct MIDI outs: successive notes / taps on Out A then Out B
  • CV→MIDI Gate→Note + Ping-Pong: both Out A and Out B fire (Out B one delay later)
  • High feedback + rapid gates: notes release cleanly (no stuck beep until panic)
  • Idle: Top/Bottom do not pulse without input; white button flash on gate/note in; Top/Bottom pulse only on actual out
  • Confirm Max delay range and Routing visibility match I/O mode

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.

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

kosmar and others added 20 commits July 23, 2026 10:01
Alternate delay repeats across MIDI Out A/B in CV→MIDI (Gate→Note and
CC), matching MIDI→MIDI. MIDI→CV stays single-jack.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Hide Routing + MIDI Out Pong only for MIDI→CV; keep them for MIDI→MIDI
and CV→MIDI. Update manual to match firmware Ping-Pong support.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
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.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Upstream PR ATOVproject#601 asserts at compile time that CONFIG strings are pure
ASCII, because postcard-bindgen JavaScript codec cannot round-trip anything
else. Doc and inline comments keep their typography.

Authored by an AI coding agent on behalf of kosmar.
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