Skip to main content

MIDI implementation

Meiji Sampler’s MIDI surface covers control mapping, a live monitor, and optional transport response.

Control identification

Each MIDI control is uniquely identified by three properties: A CC on channel 1 number 60 and a Note on channel 1 number 60 are treated as two separate controls.

Mapping behavior

Mappings are one-to-one in both directions:
  • One control maps to at most one action.
  • One action maps to at most one control.
When you move a control that already has a mapping, MIDI Learn returns to the Listening list, selects that mapping row, and briefly shows already mapped. Press Enter on the selected row to edit that control’s assignment. When you pick an action that is already mapped to a different control, MIDI Learn also selects the existing mapping row instead of replacing it. Mappings are persisted in the settings file and survive app restarts. After assigning a trigger action, MIDI Learn preselects the next matching trigger target for the next unmapped control: Pad, loop, scene, and chop indices stop at the final display slot, 0. Non-trigger actions keep the exact last assigned action as the next preselected action.

Mappable actions

Transport

Pads

Pad slots use display numbering 1-9 then 0 (matching the keyboard number row).

Loops

Scenes

Mixer

Keypress

PerformFX

These actions are available when the PerformFX feature is enabled.

MIDI learn flow phases

The learn flow uses these phases and capture states:

Trigger behavior

Each mapping carries a Behavior that decides how the control’s value drives the action. Both behaviors carry a threshold (1-127, default 64) and an inverted flag (default false).
  • Note triggers default to Trigger { threshold: 1 }. Note On velocity 0 and Note Off are forwarded as value 0, so stateful actions such as PerformFX Hold slots and mapped FX Library presets receive a falling edge.
  • CC value 0 is forwarded to the app (it is the falling-edge signal for Gate). Gate mappings will not act on a Recording / Armed loop slot to protect takes in progress.
  • Mappings loaded from configs saved before this version load with Trigger { threshold: 1 } so existing projects keep their prior behavior.

MIDI tab shortcuts

Mappings sub-view (Listening phase)

Mappings sub-view (Assigning phase)

Mappings sub-view (Keypress capture)

Mappings sub-view (Editing Behavior step)

Sub-tab navigation

MIDI transport

The settings include a transport_enabled toggle. When disabled, transport messages are visible in the monitor but do not trigger transport behavior.

Monitor coverage

The MIDI monitor displays all incoming MIDI events, not just mapping-eligible ones. Visible message types:
  • Note Off, Note On, Poly Pressure
  • Control Change, Program Change, Channel Pressure, Pitch Bend
  • Clock, Start, Stop, Continue
  • Active Sensing, SysEx, Unknown
Clock and Active Sensing generate high message volume and can flood the display. Use monitor filters to suppress them unless diagnosing a sync problem.

Route allowlist

MIDI mappings use two route rules:
  • Keypress mappings replay the captured key through the normal key handler after the MIDI control is resolved. They work anywhere the same keyboard key would work, including the Trim/chop editor and other focused modal or view states. The MIDI Mapping assignment page still blocks mapped-controller actions while it is learning a control.
  • Direct app-action mappings use a conservative allowlist so pad, loop, scene, transport, and mixer actions cannot silently dismiss stateful UI.
The direct-action allowlist is: New modal or view variants added to the codebase are blocked by default. New Channel variants require an explicit allow or block decision at compile time.
If a direct app-action mapping does nothing, check whether the current view is on this allowlist. If a keypress mapping does nothing, verify that the same physical key works in the current UI state. See MIDI And Sync Problems for more.

Current caution

The public marketing copy still describes MIDI controller support as emerging. Use this page as the implementation reference, not as a promise of broader DAW-style MIDI coverage.