The unvoiced engine's mod matrix is unreachable from the editor #73

Open
opened 2026-09-07 04:27:14 +00:00 by bcox · 0 comments
Owner

DrawUnvoicedLayer (editor/patch_view.h:2695-3096) never calls
DrawModMatrix. Every other engine page does -- DrawFmPairPage:1637,
DrawVaPage:2677, DrawPartialPage:3552, DrawModalPage:4084 -- so the
unvoiced engine is the one engine whose modulation matrix has no UI at all.

The matrix itself is real and complete everywhere else:

  • dsp/unvoiced_layer.h defines 16 destinations (kDestinationCount): the
    12 timeline lanes, kTimelineSpeed, and the three the LPG added --
    kLpgTarget, kLpgCutoff, kLpgResonance.
  • plugin/patch_format.h serializes it through the same
    WriteModMatrix/ReadModMatrix pair as every other engine, so entries
    round-trip through a .dsppatch correctly.
  • dsp/unvoiced_layer_test.cc drives routes onto those destinations
    (ARouteOntoTheCutoffMovesTheRing, ARouteOntoResonanceShortensTheRing),
    so the DSP side is exercised.

So an unvoiced route can be authored in C++ as a factory patch and will
load, save and sound correctly -- but it cannot be created, inspected or
removed in the editor, and a patch that has one shows no sign of it.
Opening such a patch, editing something unrelated and saving preserves the
route silently, which is the safe outcome rather than the obvious one.

This predates #43; every unvoiced destination has always been unreachable.
#43 made it conspicuous by adding three destinations whose whole point is a
gate you modulate -- an LPG whose target, cutoff and resonance cannot be
routed from the editor leaves most of that engine's new expressive range
off the panel.

Scope

Call DrawModMatrix from DrawUnvoicedLayer the way the other four pages
do, with a MatrixSpec naming the unvoiced destinations. The destination
labels are the only genuinely new content: editor/destination_table.h and
the sectioned-destination idiom at editor/patch_view.h:896 already carry
the machinery.

`DrawUnvoicedLayer` (`editor/patch_view.h:2695-3096`) never calls `DrawModMatrix`. Every other engine page does -- `DrawFmPairPage:1637`, `DrawVaPage:2677`, `DrawPartialPage:3552`, `DrawModalPage:4084` -- so the unvoiced engine is the one engine whose modulation matrix has no UI at all. The matrix itself is real and complete everywhere else: - `dsp/unvoiced_layer.h` defines 16 destinations (`kDestinationCount`): the 12 timeline lanes, `kTimelineSpeed`, and the three the LPG added -- `kLpgTarget`, `kLpgCutoff`, `kLpgResonance`. - `plugin/patch_format.h` serializes it through the same `WriteModMatrix`/`ReadModMatrix` pair as every other engine, so entries round-trip through a `.dsppatch` correctly. - `dsp/unvoiced_layer_test.cc` drives routes onto those destinations (`ARouteOntoTheCutoffMovesTheRing`, `ARouteOntoResonanceShortensTheRing`), so the DSP side is exercised. So an unvoiced route can be authored in C++ as a factory patch and will load, save and sound correctly -- but it cannot be created, inspected or removed in the editor, and a patch that has one shows no sign of it. Opening such a patch, editing something unrelated and saving preserves the route silently, which is the safe outcome rather than the obvious one. This predates #43; every unvoiced destination has always been unreachable. #43 made it conspicuous by adding three destinations whose whole point is a gate you modulate -- an LPG whose target, cutoff and resonance cannot be routed from the editor leaves most of that engine's new expressive range off the panel. ## Scope Call `DrawModMatrix` from `DrawUnvoicedLayer` the way the other four pages do, with a `MatrixSpec` naming the unvoiced destinations. The destination labels are the only genuinely new content: `editor/destination_table.h` and the sectioned-destination idiom at `editor/patch_view.h:896` already carry the machinery.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
bcox/tymbal#73
No description provided.