MiniDexed icon indicating copy to clipboard operation
MiniDexed copied to clipboard

MIDI messages for MiniDexed Performance parameters

Open probonopd opened this issue 5 months ago • 21 comments

So far, MiniDexed Performances were not entirely editable via MIDI commands.

To change this, and to allow for interactive ways to change the performance parameters in user interfaces like this, we need MIDI commands.

image

Proposed MiniDexed Performance SysEx Message Format (still subject to change)

F0 7D XX pp pp vv vv F7

Where:

  • F0 and F7 are the start and end of the SysEx message.
  • 7D is the Manufacturer ID reserved for prototyping, test, private use and experimentation.
  • XX
    • 10 is the get (dump) command ID for MiniDexed global performance parameter request.
    • 11 is the get (dump) command ID for per-TG performance parameter request.
    • 20 is the set (write) command ID for MiniDexed global performance parameter change.
    • 21 is the set (write) command ID for per-TG performance parameter change.
  • pp is the parameter number.
  • vv vv is the parameter value (or empty if requesting a dump).
  • The sequence pp pp vv vv may be repeated as often as needed if more than one parameter shall be set.

To request a dump of the corresponding value, leave the vv vv away.

To request a dump of all global parameters:

F0 7D 10 F7

The response to this get request will be in the format:

F0 7D 20 pp pp vv vv pp pp vv vv F7

To request a dump of all parameters of TG nn:

F0 7D 11 nn F7

The response to this get request will be in the format:

F0 7D 21 nn pp pp vv vv pp pp vv vv F7

Table 1: Global Parameters (Non-Tone Generator-Specific)

Parameter SysEx Command (MiniDexed Format) Allowed Values (vv vv)
CompressorEnable F0 7D 10 00 00 F7 (get) / F0 7D 20 00 00 vv vv F7 (set) 00 00 (off) .. 00 01 (on)
ReverbEnable F0 7D 10 00 01 F7 (get) / F0 7D 20 00 01 vv vv F7 (set) 00 00 (off) .. 00 01 (on)
ReverbSize F0 7D 10 00 02 F7 (get) / F0 7D 20 00 02 vv vv F7 (set) 00 00 (0) .. 00 63 (99)
ReverbHighDamp F0 7D 10 00 03 F7 (get) / F0 7D 20 00 03 vv vv F7 (set) 00 00 (0) .. 00 63 (99)
ReverbLowDamp F0 7D 10 00 04 F7 (get) / F0 7D 20 00 04 vv vv F7 (set) 00 00 (0) .. 00 63 (99)
ReverbLowPass F0 7D 10 00 05 F7 (get) / F0 7D 20 00 05 vv vv F7 (set) 00 00 (0) .. 00 63 (99)
ReverbDiffusion F0 7D 10 00 06 F7 (get) / F0 7D 20 00 06 vv vv F7 (set) 00 00 (0) .. 00 63 (99)
ReverbLevel F0 7D 10 00 07 F7 (get) / F0 7D 20 00 07 vv vv F7 (set) 00 00 (0) .. 00 63 (99)

Table 2: Tone Generator-Specific Parameters

Parameter SysEx Command (MiniDexed Format) Allowed Values (vv vv)
BankNumber F0 7D 11 nn 00 00 F7 / F0 7D 21 nn 00 00 vv vv F7 00 00 (0) .. 00 7F (127)
VoiceNumber F0 7D 11 nn 00 01 F7 / F0 7D 21 nn 00 01 vv vv F7 00 00 (0) .. 00 1F (31)
MIDIChannel F0 7D 11 nn 00 02 F7 / F0 7D 21 nn 00 02 vv vv F7 00 00 (0) .. 00 0F (15), 00 10 (omni), 00 11 (off)
Volume F0 7D 11 nn 00 03 F7 / F0 7D 21 nn 00 03 vv vv F7 00 00 (0) .. 00 7F (127)
Pan F0 7D 11 nn 00 04 F7 / F0 7D 21 nn 00 04 vv vv F7 00 00 (0) .. 00 7F (127)
Detune F0 7D 11 nn 00 05 F7 / F0 7D 21 nn 00 05 vv vv F7 3F 1D (-99) .. 00 63 (99) 7-bit note
Cutoff F0 7D 11 nn 00 06 F7 / F0 7D 21 nn 00 06 vv vv F7 00 00 (0) .. 00 63 (99)
Resonance F0 7D 11 nn 00 07 F7 / F0 7D 21 nn 00 07 vv vv F7 00 00 (0) .. 00 63 (99)
NoteLimitLow F0 7D 11 nn 00 08 F7 / F0 7D 21 nn 00 08 vv vv F7 00 00 (0) .. 00 7F (127)
NoteLimitHigh F0 7D 11 nn 00 09 F7 / F0 7D 21 nn 00 09 vv vv F7 00 00 (0) .. 00 7F (127)
NoteShift F0 7D 11 nn 00 0A F7 / F0 7D 21 nn 00 0A vv vv F7 3F 38 (-24) .. 00 18 (24) 7-bit note
ReverbSend F0 7D 11 nn 00 0B F7 / F0 7D 21 nn 00 0B vv vv F7 00 00 (0) .. 00 7F (127)
PitchBendRange F0 7D 11 nn 00 0C F7 / F0 7D 21 nn 00 0C vv vv F7 00 00 (0) .. 00 0C (12)
PitchBendStep F0 7D 11 nn 00 0D F7 / F0 7D 21 nn 00 0D vv vv F7 00 00 (0) .. 00 0C (12)
PortamentoMode F0 7D 11 nn 00 0E F7 / F0 7D 21 nn 00 0E vv vv F7 00 00 (off) .. 00 01 (on)
PortamentoGlissando F0 7D 11 nn 00 0F F7 / F0 7D 21 nn 00 0F vv vv F7 00 00 (off) .. 00 01 (on)
PortamentoTime F0 7D 11 nn 00 10 F7 / F0 7D 21 nn 00 10 vv vv F7 00 00 (0) .. 00 63 (99)
MonoMode F0 7D 11 nn 00 11 F7 / F0 7D 21 nn 00 11 vv vv F7 00 00 (off) .. 00 01 (on)
ModWheelRange F0 7D 11 nn 00 12 F7 / F0 7D 21 nn 00 12 vv vv F7 00 00 (0) .. 00 63 (99)
ModWheelTarget F0 7D 11 nn 00 13 F7 / F0 7D 21 nn 00 13 vv vv F7 00 00 .. 00 07
FootCtrlRange F0 7D 11 nn 00 14 F7 / F0 7D 21 nn 00 14 vv vv F7 00 00 (0) .. 00 63 (99)
FootCtrlTarget F0 7D 11 nn 00 15 F7 / F0 7D 21 nn 00 15 vv vv F7 00 00 .. 00 07
BreathCtrlRange F0 7D 11 nn 00 16 F7 / F0 7D 21 nn 00 16 vv vv F7 00 00 (0) .. 00 63 (99)
BreathCtrlTarget F0 7D 11 nn 00 17 F7 / F0 7D 21 nn 00 17 vv vv F7 00 00 .. 00 07
AftertouchRange F0 7D 11 nn 00 18 F7 / F0 7D 21 nn 00 18 vv vv F7 00 00 (0) .. 00 63 (99)
AftertouchTarget F0 7D 11 nn 00 19 F7 / F0 7D 21 nn 00 19 vv vv F7 00 00 .. 00 07

Notes:

  • For get (dump) requests: Leave the vv vv field empty. For example, to get the CompressorEnable status:

    F0 7D 10 00 00 F7
    

    The system will respond with:

    F0 7D 20 00 00 00 01 F7
    

    indicating the value is 00 01 (on).

  • For set (write) requests: Include the vv vv field to specify the value. For example, to set the CompressorEnable to on:

    F0 7D 20 00 00 00 01 F7
    

    This writes the value 00 01 (on) to the CompressorEnable parameter.

  • 7-bit note: For signed values (Detune, NoteShift), use 2's complement (2 bytes across two 7-bit bytes), split into two MIDI-safe 7-bit bytes:

    • Detune: 3F 1D (-99) .. 00 63 (99)
    • NoteShift: 3F 38 (-24) .. 00 18 (24)
  • For boolean values, 00 00 = off/false, 00 01 = on/true.

  • For MIDI Channel: 00 00 (0) .. 00 0F (15), 00 10 (omni), 00 11 (off).

  • nn in the SysEx command is the Tone Generator (TG) number, not the MIDI channel.

  • For unknown or unsupported parameter numbers, or malformed SysEx messages, the system should simply ignore the message and take no action.

probonopd avatar May 11 '25 18:05 probonopd