Skip to content

Light a modular's patched line and keyboard on the routing view (t-148) - #120

Merged
JohnD-EE merged 3 commits into
mainfrom
feature/t148-modular-glow
Oct 30, 2026
Merged

JohnD-EE merged 3 commits into
mainfrom
feature/t148-modular-glow

Conversation

@JohnD-EE

Copy link
Copy Markdown
Contributor

What

On the routing view, a modular (System 55 / the 900 series) now glows the way a fixed synth does: its patched audio line follows the output's level and its keyboard follows the key.

  • Audio path from cables. A modular has no routing edges, so the audio path now also includes live audio cables. A cable counts only when it carries audio on from a module that makes it, or from a block already on the path, so a CP3A-M mixer or mult that passes only control stays off the line (lib/app/synths/lib/routing-activity.ts).
  • CM1A gate. The CM1A has the gate meter. On the 900 path the engine now meters the gate as the key held, not as its own envelopes' trigger settings, which the 900 sound path doesn't use, so a drone or repeat no longer lights it (lib/app/synths/audio/dsp-core.ts).
  • Modules without a meter. The engine reports nothing per module, so on a modular a live module that makes signal and has no meter (a 911 envelope, a 921 modulating another) follows the output's level. An envelope stays lit through its release, and a modulator no longer copies the key gate.
  • Fixed synths are unchanged. The module rule applies only to routings whose every path is a cable. The cable rule only matters where a routing declares audioJacks (VCS3, Syntrx II and the 900), because without it every cable is control.

Review

/pre-pr and /security-review passed. /code-review raised 8 findings, all addressed in ff0e653:

  1. A 921 modulator lit with the key gate. Fixed: it now follows the sound.
  2. A 911 went dark during its release. Fixed: it now follows the sound through the release.
  3. The gate meter followed the trigger settings, not the key. Fixed in dsp-core; a test fails without the fix.
  4. A mixer passing control was put on the audio line. Fixed by tracing audio from the module that makes it.
  5. Fixed-panel synths might be affected. Checked: Model D, 2-XM and the others have no audioJacks, so their cables are all control and nothing changes for them. The pin-matrix synths are covered by the fix for 4.
  6. Live cables were filtered twice per frame. Now filtered once.
  7. A test picked cables by array index. It now selects them by signal.
  8. The gate test split readings at a meter index. It now reads the gate from whole renders.

The new routing-activity tests fail against the old rule (3 of 21), and the drone case fails against the old engine meter.

Test plan

  • npx tsc --noEmit is clean.
  • vitest over synths/lib, synths/routing and dsp-core: 721 pass.
  • By eye on the routing view with a System 55 patch: the owner's batched end-of-app check.

🤖 Generated with Claude Code

JohnD-EE and others added 3 commits October 30, 2026 12:48
…view (t-148)

routingActivity() built the audio line from audio edges alone, and a
900-series routing has none, so a System 15, 35 or 55 stayed dark while it
played. Live audio cables now join the line, and the CM1A follows the
engine's gate, which is the key held.

The 911s get no meter: the engine's env1/env2 are its own envelopes, not
the 911 slots in moog-core.ts, so they glow from what triggers them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…low the sound (t-148)

- The engine meters the 900 path's gate as the key held, not its own envelopes' trigger settings, so a drone no
  longer lights the CM1A.
- On a modular, a live module that makes signal and has no meter (a 911, a modulating 921) follows the output's
  level, so an envelope stays lit through its release and a modulator no longer copies the key gate.
- A live audio cable puts its blocks on the audio path only when it carries audio from a module that makes it, so a
  mixer or mult passing control stays off the line.
- Live cables are filtered once per frame; the tests pick audio cables by signal and read the gate from whole
  renders rather than a meter index.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@JohnD-EE
JohnD-EE merged commit 76d9631 into main Oct 30, 2026
19 checks passed
@JohnD-EE
JohnD-EE deleted the feature/t148-modular-glow branch October 30, 2026 14:48
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