Skip to content

Latest commit

 

History

History
233 lines (170 loc) · 14.4 KB

midicompendium.org

File metadata and controls

233 lines (170 loc) · 14.4 KB

MIDI Compendium

This section tries to give a overview of available MIDI command types.

Not every command listed here is implemented, please check the section “Implemented Midi Commands” above for a updated list.

An overview of Midi command types

CommandMeaning# parametersparam 1param 2comments
0x80Note-off2notevelocity
0x90Note-on2notevelocity
0xA0Aftertouch2notetouch
0xB0Continous Controller2controller #controller valuesee table of CC IDs below
0xC0Patch Change1instrument #
0xD0Channel Pressure1pressure
0xE0Pitch Bend2lsb (7bits)msb (7bits)
0xF0(non-musical commands)see section “System Commands” below

MIDI Information Sources

The internet is full with information on Midi.

If you have no idea what Midi is try this link: Introduction to Computer Music: Volume One ; Chapter 3: Midi

More links:

Continous Controller (CC) IDs

See your synths manual for specific implementation details. CC IDs which are marked as “switch” are best mapped to buttons.

If you feel overwhelmed by the options try CC 0x01 first. Most synths will respond to this. Here an example, how you could do it:

;; Map axis 1 to CC 0x01 (Modulation) on channel 1
((a 1) ((0xB0 0x00) 0x01))

Currently not all mappings are usefull, due to the fact that commands can only take one parameter.

e.g.:

  • Mapping 0x00 to an axis would make it hard to select a bank
  • Mapping 0x00 to an button would always select bank 0x7F
  • so mapping 0x00 would make no sense in the current implementation .. sorry
IDcommentswitch“Channel Mode”
0x00Bank Select
0x01Modulation
0x02Breath Controller
-
0x04Foot Controller
0x05Portamento Time
0x06Data Entry MSB (controls values for [N]RPN parameters)
0x07Volume (Channel)
0x08Balance (0x00 = hard left, 0x40 = center, 0x7F = hard right)
-
0x0APan (0x00 = hard left, 0x40 = center, 0x7F = hard right)
0x0BExpression
0x0CEffect Controller 1
0x0DEffect Controller 2
-
0x10 - 0x13General Purpose
-
0x20 - 0x3FController 0 - 31 LSB (fine tune CC 0x00 - 0x1F)
0x40Damper/Sustain Pedal (0x00 - 0x3F: OFF; 0x40 - 0x7F: ON)*
0x41Portamento (0x00 - 0x3F: OFF; 0x40 - 0x7F: ON)*
0x42Sostenuto (0x00 - 0x3F: OFF; 0x40 - 0x7F: ON)*
0x43Soft Pedal (0x00 - 0x3F: OFF; 0x40 - 0x7F: ON)*
0x44Legato Foot Switch (0x00 - 0x3F: OFF; 0x40 - 0x7F: ON)*
0x45Hold 2
0x46Sound Controller 1 (default = variation)
0x47Sound Controller 2 (default = VCF resonance)
0x48Sound Controller 3 (default = VCA release time)
0x49Sound Controller 4 (default = attack
0x4ASound Controller 5 (default = VCF cutoff)
0x4B - 0x4FSound Controller 6 - 10 generic
0x50 - 0x53Generic Switch (0x00 - 0x3F: OFF; 0x40 - 0x7F: ON)*
0x54Portamento amount
-
0x5B - 0x5FEffect Depth 1 - 5
0x60Increment Data (for [N]RPN messages)
0x61Decrement Data (for [N]RPN messages
0x62Selects LSB NPRN parameter (0x06, 0x26, 0x60, 0x61)
0x63Selects MSB NPRN parameter (0x06, 0x26, 0x60, 0x61)
0x64Selects LSB PRN parameter (0x06, 0x26, 0x60, 0x61)
0x65Selects MSB PRN parameter (0x06, 0x26, 0x60, 0x61)
-
0x78Mutes all sounding notes (ignore sustain / release)*
0x79Resets all controllers to default*
0x7ALocal On/Off**
0x7BMutes all sounding notes (respects sustain / release)*
0x7COmni Mode OFF*
0x7DOmni Mode On*
0x7EMono Mode*
0x7FPoly Mode*

Undefined MIDI CCs:

These CC IDs are not defined, but may be used by your synth. See your manual as always.

0x03; 0x09; 0x0E; 0x0F; 0x14 - 0x1F; 0x55 - 0x5C; 0x66 - 0x77;

System Commands

System Common Commands

Currently there are no plans to support System Common Commands (not including 0xF7 aka EOX aka End of system exclusive message).

System Realtime Commands (NOT YET SUPPORTED)

CMDDescriptiongona implement?
0xF8Timing Clocknope
0xFAStart (from beginning of song)yup
0xFBContinue (from current position)yup
0xFCStopyup
0xFEActive Sensingnope
0xFFSysten Reset (back to state after power on)yup

configuration example:

System reset on button 1 ((b 1) ((0xFF)))

SysEx Commands

Structure of System Exclusive Commands on byte level.

Please consult your synths manual for more information.

General Format:

012 …n -1n
0xF0IDdata (0x00 - 0x7F)0xF7

MIDI Universal System Exclusive Messages

Format: 0xF0 0x7E <Device-ID> <Sub-ID#1> [<Sub-ID#2> [<parameters>]] 0xF7

Midi Real-Time Universal System Exclusive Messages [ Midi Machine Control (MMC)]

Format: 0xF0 0x7F <Device-ID> <Sub-ID#1> [<Sub-ID#2> [<parameters>]] 0xF7

Example:

0xF0 0x7F 0x7F 0x06 0x02 0xF7 send play to all devices

tokencomment
Device-IDMMC device’s ID# (0x00 - 0x7F ; 0x7F = all devices)
Sub-ID#1Commandgroup
Sub-ID#2exact Command
parametersparameters for exact command
Sub-ID#1commentMMC related
0x01Long Form MTC
0x02Midi Show Control
0x03Notation Informataion
0x04Device Control
0x05Real Time MTC Cueing
0x06MIDI Machine Control Command*
0x07Midi Machine Control Response*
0x08Single Note Retune
Sub-ID#1Sub-ID#2commentparameters
0x060x01Stop
0x02Play
0x03Deferred Play (play after no longer busy)
0x04Fast Forward
0x05Rewind
0x06Record Strobe (AKA Punch In)
0x07Record Exit (AKA Punch Out)
0x08Record Pause
0x0AEject (disengage media container from MMC device)
0x0BChase
0x0DMMC Reset (to default/startup state)
0x40Write (AKA Record ready, AKA Arm Tracks)<length1> 0x4F <length2> <track-bitmap-type>
0x44GoTo (AKA Locate)<length>=0x06 01 <hours> <minutes> <seconds> <frames> <subframes>
0x47Shuttle<length>=0x03 <sh> <sm> <sl> (MIDI Standard Speed codes)
0x070xXXresponse statevalues detailing response state

Roland:

012345 …78 … n -2n -1n
0xF0manufacture iddevice idmodel id0x12 (send) / 0x11 (receive)start addrdata (send) / size (receive)checksum0xF7

Calculating Roland checksum:

ck_sum = 0
for byte in sysex:
    ck_sum += byte
    ck_sum = ck_sum % 128
ck_sum = 128 - ck_sum