Skip to content

MIDI Implementation

Kevin edited this page Sep 29, 2024 · 17 revisions

MiniDexed recognises the following MIDI commands (taken from the source file: https://github.com/probonopd/MiniDexed/blob/main/src/mididevice.cpp).

MIDI Channel Voice Messages

All channel voice messages will act on a specific MIDI channel and will thus apply to any Tone Generators (TGs) listening on that specific MIDI channel and any TGs in MIDI OMNI Mode.

MIDI Command Hex Values Notes
Note Off 0x80 0..127
Note On 0x90 0..127
Control Change 0xB0 Various See table below
Program Change 0xC0 0..127 Only if MIDIRXProgramChange=1 in minidexed.ini.
Responds to 0..127 if ExpandPCAcrossBanks=1
Responds to 0..31 if ExpandPCAcrossBanks=0
Can be configured to correspond to either voices or performances depending on the PerformanceSelectChannel (or PCCH in the Performance menu) setting.
(More details here)
Pitch Bend 0xE0 0..16383
Aftertouch 0xD0 0..127

MIDI Channel Control Change Messages

All channel control change messages will act on a specific MIDI channel and will thus apply to any Tone Generators (TGs) listening on that specific MIDI channel and any TGs in MIDI OMNI Mode.

MIDI CC Decimal Hex Values Notes
Bank Select (MSB) CC#00 0x00 0..127 Most significant 7-bits of the 14-bit bank number (0..16383). When received it is saved until a BANKSEL LSB is received.
Mod Wheel CC#01 0x01 0..127
Breath Control CC#02 0x02 0..127
Foot Control CC#04 0x04 0..127
Channel Volume CC#07 0x07 0..127 Local volume for a specific MIDI channel
Pan CC#10 0x0A 0..127
Bank Select (LSB) CC#32 0x20 0..127 Least significant 7-bits of the 14-bit bank number (0..16383) (see Voice Data Syx Files). Note the bank is changed as soon as the LSB is received using whatever MSB is remembered from the last MSB received (or 0 if no MSB was sent).
Sustain CC#64 0x40 0..127 <=63 = OFF; >=64 = ON
Sound Controller 2 CC#71 0x47 0..127 Filter resonance
Sound Controller 5 CC#74 0x4A 0..127 Filter cut-off
Effects 1 Depth CC#91 0x5B 0..127 Reverb level
Effects 4 Depth CC#94 0x5E 0..127 Detune
All sound off CC#120 0x78 0
All notes off CC#123 0x7B 0

Additional TG Control Messages

When in performance mode (i.e. all TGs are responding to the same MIDI channel) there is an option to provide control of the volume, pan and detune settings of each individual tone generator over MIDI.

Each parameter requires 8 MIDI CC values (one per tone generator) and several fixed CC maps are possible for use as shown below. Note that apart from the General Purpose controllers (16-19 and 80-83), all of the ranges are considered "undefined" in the MIDI spec.

Which map is used for each parameter depends on the setting of MIDISystemCCVol, MIDISystemCCPan, and MIDISystemCCDetune in minidexed.ini. The default is 0, i.e. not enabled.

Note: These are in addition to the above system-wide MIDI CC messages which will still acted upon, by all Tone Generators configured for the MIDI channel over which they are received. It is recommended that either the above common or the below individual scheme are used, but not both. Whilst combining the two is possible, sending the common "channel volume" (for example) will set the volume of all listening TGs back to the common setting regardless of what had previously been set individually. The same will apply for the pan and detune settings.

Map CC Numbers Hex Usage
1 CC#16-19,80-83 0x10-0x13,0x50-0x53 TG 1-8 Volume, Pan or Detune
2 CC#20-27 0x14-0x1B (as above)
3 CC#52-59 0x34-0x3B (as above)
4 CC#102-109 0x66-0x6D (as above)
5 CC#110-117 0x6E-0x75 (as above)
6 CC#3,9,14,15,28-31 0x03,0x09,0x0E,0x0F,0x1C-0x1F (as above)
7 CC#35,41,46,47,60-63 0x23,0x29,0x2E,0x2F,0x3C-0x3F (as above)

MIDI System Messages

tbd

MIDI System Real-time Messages

tbd

MIDI System Exclusive Messages

Master Volume

F0 7F 7F 04 01 ll mm F7
ll (LSM) = ignored
mm (MSB) = master volume level