Skip to content

feat: Hold Sam clocked CV sample-and-hold to MIDI - #615

Closed
kosmar wants to merge 1 commit into
ATOVproject:mainfrom
kosmar:feat/hold-sam
Closed

kosmar wants to merge 1 commit into
ATOVproject:mainfrom
kosmar:feat/hold-sam

Conversation

@kosmar

@kosmar kosmar commented Jul 30, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • New 1-channel app Hold Sam (ID 36): clocked sample-and-hold from CV in to MIDI Note/CC
  • Note mode: cut+retrigger each division tick; gate % from Main; velocity = base + sensitivity × |ΔCV|
  • Soft mute / Stop ausklingen; long-press without fader move = panic; Shift+short = manual sample
  • Clippy fix: as_chunks::<4>() in USB MIDI RX path

Test plan

  • Flash firmware and add Hold Sam on one channel
  • Patch CV into the jack; confirm Note mode fires on global clock with gate length from Main
  • Confirm Alt sets division and Third changes velocity with CV jumps
  • Soft mute: note finishes gate; long-press (no fader move): hard Note Off + muted
  • Shift+short manual sample works; CC mode sends scaled CC
  • Stop leaves note to finish; Reset keeps sample/note

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.

@kosmar
kosmar marked this pull request as ready for review August 22, 2026 08:48
Wave-1 scope: app source, registry line, and docs/apps manual only.
LED spectrum helpers inlined into hold_sam.rs.

Authored by an AI coding agent on behalf of kosmar.

Co-authored-by: Cursor <cursoragent@cursor.com>
@kosmar

kosmar commented Aug 22, 2026

Copy link
Copy Markdown
Contributor Author

Written by an AI coding agent on @kosmar's behalf.

Force-pushed a Wave-1 scope cleanup onto this branch (single commit vs main):

Please re-run CI on this branch. Happy to adjust anything for review.

@ArthurGibert

Copy link
Copy Markdown
Member

Hey @kosmar — two things, one about where this belongs and one about the manual format you're using.

Where it belongs: this looks like a great fit for faderpunk-community-apps, which just went public. New on-device apps are meant to land there rather than here directly — see CONTRIBUTING.md's "Standalone companion tools" section, and the pointer it promised once that repo was live.

Ran hold_sam.rs against the actual submission gate (pr-scope-check.sh) — clean, no unsafe code, no panics, no MAX11300/storage bypass, no un-yielding loop — and did a real cargo build against current main with it dropped in, which passed too. It does have 11 .unwrap()/.expect() calls without a justification comment, which the gate soft-flags for human judgment rather than blocking (same treatment some existing official apps get) — worth a look before resubmitting, not a blocker.

About docs/apps/36-hold-sam/manual.{json,md}: this one's on us, not you — it was listed as a sanctioned option in CONTRIBUTING.md/the scope-check script without anyone actually verifying it was backed by real tooling, and it wasn't: nothing in the configurator reads it (confirmed against #606; its entry doesn't show up on the /#/manual page at all). You followed the policy as documented — the policy was wrong. Filed as #656, and #657 has already removed it as an option here. So faderpunk-community-apps isn't just a better fit organizationally — right now it's the only place this content would actually end up visible anywhere.

To resubmit there: just the app file itself (no mod.rs/registration changes — those are generated), a community app ID in the 100+ range, and a manual-tab.json entry built from your existing manual.{json,md}. Most of it maps over directly (manual.md is the entry's text field verbatim; name→title; description/color/icon/params/storage and most of channels are already the same shape) — but the schema also has fnPlusShiftTitle/ledTopPlusShift/ledBottomPlusShift-style fields for documenting combined Shift/Fn/Button behavior, which your format doesn't have dedicated slots for; where that's described inline in fnDescription/ledTop today, it'd need pulling out into those fields for parity with how official apps are documented. Happy to help with the conversion if useful. Whether/when to close this one is up to you or a maintainer — just flagging where it belongs.

@kosmar

kosmar commented Aug 23, 2026

Copy link
Copy Markdown
Contributor Author

Moving this to faderpunk-community-apps as requested: ATOVproject/faderpunk-community-apps#10

Closing here. App ID remapped 36 → 107 (community range).

@kosmar kosmar closed this Aug 23, 2026
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.

2 participants