[WIP] Loop Jefe - #192
Draft
sastraxi wants to merge 25 commits into
Draft
Conversation
mod-host/mod-ui now broadcast an absolute-timestamped downbeat over WebSocket (beat_sync); pi-Stomp parses it, tracks a BeatGrid anchored to CLOCK_MONOTONIC, and flashes the tap-tempo footswitch's LED/pixel on each beat as a visual metronome (no audible click is available on v3's single shared DAC). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… group
Extends the 'longpress' config field to accept {midi_CC: N} alongside the
existing named-group form (string or list), so a footswitch's longpress can
MIDI-learn directly onto a plugin port (e.g. loopjefe's future "reset")
without inventing a new pi-Stomp-internal callback for every such action.
Kept as one field rather than a sibling 'longpress_midi_CC' key so a
per-pedalboard overlay can't leave a stale chord-group registration behind
when a later config only overrides one of the two.
Consolidates the near-duplicate _emit_midi (mod.py/modhandler.py) into a
single implementation on the Handler base, since both were already routing
through self.hardware — no new shared state needed, just an optional CC
override so longpress can target a different port than the short-press
binding. Also adds 'toggle_tuner_enable' to the longpress schema enum: it
was already a registered callback and used in both shipped templates, but
the old loose ["array","string"] schema silently skipped enum validation
for the bare-string form.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
# Conflicts: # modalapi/websocket_bridge.py
Brings the branch up to v3.3.0 (AGPL relicense, footswitch UI, v1 removal). Longpress-sends-MIDI was implemented independently on both sides; main's is the superset (LongpressActionConfig -> RawMidiCcEffect, plus preset/pedalboard targets), so the branch's narrower Footswitch.set_longpress/longpress_midi_CC layer and its tests are dropped in favor of it. Likewise Handler. _handle_footswitch, superseded by main's Effects/BindingDecl dispatch. Kept from the branch: the per-tick LED driver (set_led is a pure state update, _drive_footswitch_leds renders), LedSpec/render_led_spec, generic output_set mirroring into Plugin.output_values, BeatGrid, and Parameter Type.TRIGGER / is_momentary. v1 (modalapi/mod.py) is gone with main's "Remove v1", taking the branch's v1 metronome work with it. Momentary trigger semantics are NOT yet wired into main's Effect model -- MidiCcEffect and RawMidiCcEffect both still toggle, so a pprops:trigger port (loopjefe advance/reset) only fires every other press. Follow-up. Co-Authored-By: Claude Opus 5 <noreply@anthropic.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.
Putting together a live loop pedalboard and needed some more pi-Stomp features...
TODO