MIDI Machine Control (MMC) is a protocol specifically designed to remotely control hard disk recording systems, and other machines used for record or playback, over a MIDI cable. The only way to do this is with System Exclusive messages, and so several specific SysEx messages were defined in order to implement MIDI Machine Control. Many devices support this protocol (although a more elaborate protocol was later created called MIDI Show Control, which features a command set to control non-musical equipment such as lights and effects devices).

The information below is only a small portion of the complete specification, gleaned from material sent to me by various sources. Some of this information was obtained via trial and error, so some important details may be missing.

Device ID

Every device which can respond to MIDI Machine Control messages should have a unique (ie, individual) ID number. For example, a hard disk recorder may have an ID of 1. A MIDI sequencer controlling the hard disk recorder's record and playback may have an ID of 2. Usually, a device will allow the user to set its individual ID, so that any conflicts between devices can be resolved. The range of allowable ID numbers is 0 to 127 inclusive. By having unique ID numbers, you can use one of these ID numbers in a System Exclusive message, and then the various devices that are all daisy-chained together via MIDI can determine which device a particular System Exclusive message is meant for. Of course, even the master controller which is being used to control the entire MIDI Machine Control network can have its own, unique ID, in case slaved controllers wish to create and send messages back to the master.

NOTE: It is possible to have two (or more) devices set to the same ID number. What this means is that both devices always respond to the same MIDI Machine Control messages with that ID number, and you completely lose individual control over each. There is also no limit as to how many individual ID numbers a given device can respond to. If desired, a device can even respond to all 127 individual ID numbers, but this would be akin to a sound module that only operates in Omni mode (ie, not too useful if you have other units daisy-chained). As you'll see below, the All-Call Controllers ID make it a moot point to have a controller respond to more than one individual ID number.

An ID number of 127 (referred to as the "All-Call ID number") is reserved to mean "all devices respond". When a MIDI Machine Control message with an ID of 127 is sent along the MIDI bus, all devices should respond to this message if appropriate (ie, if they support the particular command of that message), regardless of their individual ID numbers.

The general form of an MMC message

The general form of an MMC message (that is sent to, or generated by, an MMC device) is:

0xF0 0x7F <deviceID> 0x06 <command> 0xF7

The third byte is the Device ID.

The fifth byte is the <command>. It is one of the following values:

0x01 Stop
0x02 Play
0x03 Deferred Play
0x04 Fast Forward
0x05 Rewind
0x06 Record Strobe (Punch In)
0x07 Record Exit (Punch out)
0x09 Pause

The Goto MMC message

The Goto message allows recording or playback to be cued to a specific position in terms of SMPTE time (ie, a specific hour, minute, second, SMPTE frame number, and subframe number). The format of the message is as follows:

0xF0 0x7F <deviceID> 0x06 0x44 0x06 0x01 <hr> <mn> <sc> <fr> <ff> 0xF7

Identity Request

It is possible to query an MMC device to find out it's identity. To do so, you send the device an Indentity Request message as follows:

0xF0 0x7E <channel> 0x06 0x01 0xF7

The reply is device/manufacturer specific. For example, a Fostex D-160 will return the following System Exclusive message:

0xF0, 0x7E, <channel>, 0x06 0x02 <ID> <fc1> <fc2> <fn1> <fn2> <v1> <v2> <v3> <v4> 0xF7

where the above message contains the following parameters:

<ID> - Device's ID
<fc1> <fc2>  - Device's family code
<fn1> <fn2>  - Device's family number
<v1> <v2> <v3> <v4> - Software Version

Consult the manual for a specific MMC device to see what particular values to use for the above parameters.

Other MMC messages

There are likely more MMC messages that allow other functions. The format of these messages is not documented here.