Skip to content

Add tulip.amy_midi_thru() — MIDI thru on hardware (amy #738)#1016

Open
bwhitman wants to merge 1 commit into
mainfrom
claude/compassionate-boyd-33c9ec
Open

Add tulip.amy_midi_thru() — MIDI thru on hardware (amy #738)#1016
bwhitman wants to merge 1 commit into
mainfrom
claude/compassionate-boyd-33c9ec

Conversation

@bwhitman

Copy link
Copy Markdown
Collaborator

Companion to shorepine/amy#739 (closes amy issue #738).

What

Adds tulip.amy_midi_thru(True/False). When on, AMY echoes every incoming MIDI byte straight to MIDI out, in addition to processing it normally. Off by default.

tulip.amy_midi_thru(True)   # MIDI in -> MIDI out (byte for byte) + normal processing
tulip.amy_midi_thru(False)  # default

How

  • The amy side adds an amy_config.midi_thru flag and does the byte-by-byte forwarding inside convert_midi_bytes_to_messages() (see amy#739).
  • tulip.amy_midi_thru() just sets amy_global.config.midi_thru, mirroring the existing tulip.external_midi_sync() binding. It lives in the #ifndef __EMSCRIPTEN__ block, so it's a hardware-targets-only control (Tulip Web / AMYboard Web are intentionally left out for now).

Submodule

Bumps amy to claude/midi-thru (28ed5ae, the amy#739 branch) so this PR is testable. Before merge to main, the amy PR must merge first and the pin be moved to that merged commit (per the AMY submodule policy). The vendored tulip/server/refdocs/amy/ snapshot was refreshed to match the new pin.

Test

  • tulip/macos/build.sh — builds & links cleanly with the new binding.
  • tulip/amyboard (ESP32-S3) idf.py build — firmware compiles (36% partition free).
  • amy make test — all 94 tests pass (midi_thru off by default; no change to existing behavior).

Docs: new "MIDI Thru" section in docs/tulip_api.md.

tulip.amy_midi_thru(True/False) sets amy_config.midi_thru, which makes AMY
echo every incoming MIDI byte straight to MIDI out (in addition to processing
it normally). Off by default. Hardware targets only (guarded out of the web
build, alongside external_midi_sync).

Bumps the amy submodule to shorepine/amy#739 (claude/midi-thru) and refreshes
the vendored amy refdocs snapshot to match.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

🔌 AMYboard PR preview

Editor + flasher: https://amyboard-pr-1016.vercel.app/editor/

This preview bundles this PR's firmware — its flasher only flashes this build (not the release). Rebuilt on every push; removed when the PR closes.

The hardware CI has been kicked off and should return within a few minutes, stand by!

@github-actions

Copy link
Copy Markdown

🌷 Tulip Web PR preview

Tulip Web: https://tulip-pr-1016.vercel.app/run/

Flash a Tulip to this build: on-device run tulip.upgrade(pr=1016).

Rebuilt on every push; removed when the PR closes.

@github-actions

Copy link
Copy Markdown

🎛️ HW CI (physical bench)

AMYboard (USB-MIDI + AMY zP → audio): ✅ PASS — flashed this PR’s firmware; all checks matched the references.

Tulip (TULIP4_R11; serial-REPL audio + WiFi screenshot): ✅ PASS — flashed this PR’s firmware; all checks matched the references.

⬇️ Artifacts: recordings · screenshot · serial logs · run logs

Self-hosted bench. Audio spectral-compared to ref/hwci_basic.wav + ref/tulip_basic.wav; Tulip screenshot pixel-compared to ref/tulip_screenshot.png. Both analog outs share one capture card, so the tests run sequentially.

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