Recent from talks
Nothing was collected or created yet.
MIDI Machine Control
View on WikipediaMIDI Machine Control, or MMC, a subset of the MIDI specification, provides specific commands for controlling recording equipment such as multi-track recorders. MMC messages can be sent along a standard MIDI cable for remote control of such functions as Play, Fast Forward, Rewind, Stop, Pause, and Record. These are "System Exclusive" (SysEx) messages, specifically Real Time Universal SysEx messages.
MIDI Universal Real Time SysEx message format
[edit]MIDI includes System Exclusive messages that are extensions of the MIDI format implemented by MIDI manufacturers. Some of the extensions, the "Universal" ones, are a set of the same functions that different manufacturers can implement differently in detail. Some of them are Non Real Time, with no reliable delivery timing. Others are Real Time, including MMC, so they are more reliably delivered when expected. SysEx messages start with (hexadecimal) F0 and end with F7. Universal Real Time SysEx messages start with F0, followed by 7F, then include other fields before the terminating F7.
The following shows Universal Real Time SysEx message format (all numbers hexadecimal):
F0 7F <Device-ID> <Sub-ID#1> [<Sub-ID#2> [<parameters>]] F7
where Device-ID is:
MMC device's ID#; value 00-7F (7F = all devices); AKA "channel number"
and Sub-ID#1: is one of the following values. The bolded values are MIDI Machine Control related:
| 01 = Long Form MTC |
| 02 = MIDI Show Control |
| 03 = Notation Information |
| 04 = Device Control |
| 05 = Real Time MTC Cueing |
| 06 = MIDI Machine Control Command |
| 07 = MIDI Machine Control Response |
| 08 = Single Note Retune |
MMC message format
[edit]An MMC message is either an MMC command (Sub-ID#1=06) or an MMC response (Sub-ID#1=07). As a SysEx message it is formatted (all numbers hexadecimal):
F0 7F <Device-ID> <06|07> [<Sub-ID#2> [<parameters>]] F7
Device-ID: MMC device's ID#; value 00-7F (7F = all devices); AKA "channel number"
Sub-ID#1: 06 = command
Sub-ID#2:
01 Stop
02 Play
03 Deferred Play (play after no longer busy)
04 Fast Forward
05 Rewind
06 Record Strobe (AKA [[Punch in/out|Punch In]])
07 Record Exit (AKA [[Punch out (music)|Punch out]])
08 Record Pause
09 Pause (pause playback)
0A Eject (disengage media container from MMC device)
0B Chase
0D MMC Reset (to default/startup state)
40 Write (AKA Record Ready, AKA Arm Tracks)
parameters: <length1> 4F <length2> <track-bitmap-bytes>
44 Goto (AKA Locate)
parameters: <length>=06 01 <hours> <minutes> <seconds> <frames> <subframes>
47 Shuttle
parameters: <length>=03 <sh> <sm> <sl> (MIDI Standard Speed codes)
Sub-ID#1: 07 = response Sub-ID#2: response state parameters: values detailing response state
MMC commands
[edit]MMC Commands are either MMC transport messages containing one byte representing the command, or other types containing the command byte followed by parameter bytes. Some parameters are lengths of collections of bytes in the message, some parameters are constants associated with the command, other parameters are variable data values specifying command execution.
Record Ready
[edit]The Record Ready (Arm Tracks) message will record-enable tracks. It is formatted (all numbers hexadecimal):
F0 7F <Device-ID> 06 40 <length1> 4F <length2> <track-bitmap> F7
length1: number of bytes between length1 and F7 length2: number of bytes in the track bitmap track-bitmap: Each track is assigned a bit in the track bitmap.
To set a track, you must know both the byte in which the track's bit lives, and also the bit corresponding to that track. Note that each byte can only hold 7 tracks.
Track 1: byte 1 + 0x20 Track 2: byte 1 + 0x40 Track 3: byte 2 + 0x01 Track 4: byte 2 + 0x02 Track 5: byte 2 + 0x04 Track 6: byte 2 + 0x08 Track 7: byte 2 + 0x10 Track 8: byte 2 + 0x20 Track 9: byte 2 + 0x40 Track 10: byte 3 + 0x01 and so on.
Goto/Locate
[edit]The Goto (AKA Locate) message cues recording or playback to an SMPTE time (a specific hour, minute, second, SMPTE frame number, and subframe code). It is formatted (all numbers hexadecimal):
F0 7F <Device-ID> 06 44 <length>=06 01 <hr> <mn> <sc> <fr> <ff> F7
Sub-ID#2 =44: LOCATE command length: 06 Data byte count (always six bytes) subcommand: 01 TARGET hr: hours and type (as with MTC Fullframe); values 0-17 (= 0-23 decimal) mn: minutes; values 0-3B (= 0-59 decimal) sc: seconds; values 0-3B (= 0-59 decimal) fr: frames; values 0-1D (= 0-29 decimal) ff: sub-frames / fractional frames (leave at zero if un-sure); values 0-63 (= 0-99 decimal)
(some manufacturers encode the subframe value differently at different frame rates to indicate subframe 0)
Shuttle
[edit]Both forward and backward shuttling share the same MMC message; direction is encoded as a sign value. It is formatted (all numbers hexadecimal):
F0 7F <Device0ID> 06 47 <length=03> <sh> <sm> <sl> F7 Note: sh, sm and sl are defined as Standard Speed in the MIDI 1.0 Recommended Practice RP-013. sh = Nominal Integer part of speed value: 0 g sss ppp g = sign (1 = reverse) sss = shift left count (see below) ppp = most significant bits of integer multiple of play-speed sm = MSB of nominal fractional part of speed value: 0 qqqqqqq sl = LSB of nominal fractional part of speed value: 0 rrrrrrr Speed values per shift left count: BINARY REPRESENTATION USABLE RANGES (DECIMAL) Integer multiple Fractional part Integer Fractional sss of play speed of play speed range resolution 000 ppp - qqqqqqqrrrrrrr 0-7 1/16384 001 pppq - qqqqqqrrrrrrr 0-15 1/8192 010 pppqq - qqqqqrrrrrrr 0-31 1/4096 011 pppqqq - qqqqrrrrrrr 0-63 1/2048 100 pppqqqq - qqqrrrrrrr 0-127 1/1024 101 pppqqqqq - qqrrrrrrr 0-255 1/512 110 pppqqqqqq - qrrrrrrr 0-511 1/256 111 pppqqqqqqq - rrrrrrr 0-1023 1/128
External links
[edit]- MIDI Standard Document Archived 2016-06-01 at the Wayback Machine
MIDI Machine Control
View on GrokipediaF0 7F (Universal Real-Time SysEx header), followed by the Device ID, sub-ID 06 for MMC, the command byte, optional data, and ending with F7—ensuring compatibility across diverse hardware from multiple manufacturers.[3]
Key MMC commands include Stop (01), Play (02), Deferred Play (03, for ramped starts), Fast Forward (04), Rewind (05), Record Strobe (06, to initiate recording), Record Exit (07, to end recording), Pause (09), and Locate (44, which specifies SMPTE timecode locations in hours, minutes, seconds, frames, and subframes for precise navigation).[3] Additional messages support track arming via bitmapped data in Record Ready (08), shuttle speed control (47), and device identification queries (F0 7E SysEx for identity requests), enabling robust synchronization in multitrack environments.[2] While MMC has been largely supplanted in modern digital audio workstations by network-based protocols like OSC or Ethernet AVB, it remains influential for legacy hardware integration and live performance setups requiring reliable, low-latency transport control.[1]
Introduction
Definition and Purpose
MIDI Machine Control (MMC) is a subset of the MIDI 1.0 specification that utilizes System Exclusive (SysEx) Real Time Universal messages to transmit commands for controlling multi-track recorders, tape machines, digital audio workstations (DAWs), and other audio/video equipment.[1][4] This protocol enables MIDI systems to interface with traditional recording and production hardware, providing a standardized method for device interaction without requiring proprietary connections.[5] The core purpose of MMC is to facilitate remote control of essential transport functions—such as play, stop, and record—as well as synchronization between devices, allowing MIDI controllers or sequencers to serve as master controllers in a studio environment.[1][6] By leveraging existing MIDI infrastructure, MMC eliminates the need for dedicated hardware interfaces, enabling seamless operation across interconnected systems.[2] Key benefits of MMC include its standardization, which ensures compatibility among devices from different manufacturers, promoting interoperability in professional setups.[5] Additionally, it offers cost-effectiveness by relying on standard MIDI cables and ports, while supporting a range of applications from simple cassette decks to sophisticated hard disk recorders.[6][4] Initially designed with a focus on audio recording control, MMC incorporates extensibility to accommodate video and mixed-media synchronization, broadening its utility in evolving production workflows.[1][4]Historical Development
MIDI Machine Control (MMC) emerged in the early 1990s as an extension of the MIDI protocol to address the need for standardized remote control of audio recording equipment, following the establishment of core MIDI in 1983 and MIDI Time Code (MTC) in 1986.[7] The protocol was developed by the MIDI Manufacturers Association (MMA), building on contributions from major instrument manufacturers that had pioneered the original MIDI standard, to enable interoperability between MIDI sequencers and traditional analog tape machines or early digital recorders, filling gaps in professional workflows where synthesizers and sequencers required synchronization with multitrack hardware.[1][8] Initially released in 1991, MMC focused on basic transport commands like play, stop, record, rewind, and fast-forward, allowing MIDI devices to operate tape recorder-type systems via System Exclusive messages.[7] This initial implementation drew from standards like ESbus and proprietary systems such as Fostex's, providing a universal alternative for centralized studio control.[9] By January 1992, the protocol was formally announced, marking its integration into commercial products for enhanced synchronization in music production.[9] The full specification, RP-013 version 1.0, was published by the MMA on January 4, 1996, expanding MMC to include advanced features such as track arming for multitrack recorders and shuttle/jog operations for precise navigation in digital audio workstations (DAWs).[1] These updates supported more complex, time-code-based systems, evolving from basic transport to comprehensive control suitable for synchronized audio and video production.[1] No significant revisions have occurred since the 1990s, as the rise of USB MIDI, Ethernet-based protocols, and software DAWs shifted focus to newer standards; however, MMC persists in legacy hardware and hybrid setups for its reliability in controlling older recording devices.[8]Protocol Fundamentals
SysEx Message Format
MIDI Machine Control (MMC) messages are transmitted exclusively using the Universal Real Time System Exclusive (SysEx) format, which ensures compatibility across devices from different manufacturers. The general structure of an MMC SysEx message is F0 7F [Device ID] [Sub-ID#1] [[Sub-ID#2] [parameters]] F7, where F0 marks the start of the SysEx message and F7 denotes the end. The byte 7F identifies the message as a Universal Real Time SysEx, distinguishing it from manufacturer-specific or non-real-time messages. This format allows MMC to operate independently of MIDI channels, providing a system-wide control mechanism for transport and recording functions.[4] Breaking down the bytes, the Device ID occupies the third position and ranges from 00 to 7F in hexadecimal, with 7F serving as a broadcast address to target all compatible devices simultaneously. The Sub-ID#1 byte follows, using 06 for MMC commands sent from a controller to a device, and 07 for responses returned by the device. If present, Sub-ID#2 specifies the particular command or response type, such as 01 for a basic stop operation, while parameters provide additional data tailored to the command, for instance, timecode values in a locate message. These variable-length parameters may include length bytes to indicate the size of data fields, like bitmaps for track selection.[4][10] Transmission occurs over standard MIDI cables using asynchronous serial communication at a fixed baud rate of 31.25 kbps, the same as all MIDI data. As Real Time SysEx messages, MMC commands receive high priority in the MIDI stream to minimize latency, interleaving seamlessly with other messages without disrupting ongoing performance data. Unlike channel voice or mode messages, MMC does not rely on MIDI channel addressing, enabling global synchronization in multi-device setups.[4] Error handling in MMC is minimal by design, with no mandatory checksums required for message integrity; receiving devices are expected to ignore malformed or incomplete SysEx packets to prevent system instability. Variable data lengths are managed through explicit length indicators where needed, allowing robust parsing without fixed message sizes. This approach prioritizes simplicity and real-time reliability over extensive validation.[4]Device ID and Response Handling
In MIDI Machine Control (MMC), the Device ID byte in System Exclusive (SysEx) messages serves to address specific devices or broadcast to multiple units within a setup. Values from 00 to 7E are assigned by manufacturers to individual devices, enabling targeted control in multi-device environments, such as directing a command to a particular tape deck or digital audio workstation while ignoring others. The value 7F is reserved for broadcast, ensuring all compatible devices on the MIDI chain receive and process the message simultaneously. This addressing scheme, inherited from the broader SysEx structure, facilitates precise operation in complex production systems without requiring additional hardware routing.[4] Responses in MMC are handled through dedicated SysEx messages with Sub-ID#1 set to 07, distinguishing them from commands (which use Sub-ID#1 = 06). These replies provide feedback from controlled devices (slaves) to the controller, including Command Acknowledged (Sub-ID#2 = 00) to confirm successful execution, Command Failed (Sub-ID#2 = 01) to indicate an error or unsupported operation, and specific notifications such as position status reports for locate operations. Such responses enable controllers to monitor status and adjust accordingly, supporting reliable operation in synchronized environments.[4] The protocol for handling these interactions involves controllers transmitting commands and subsequently polling slaves for responses, with typical response times in implementations on the order of 100-500 milliseconds to prevent delays in real-time control. This polling mechanism ensures acknowledgment or error detection, while chase mode allows slaves to synchronize their position to an incoming timecode stream, maintaining alignment during playback or recording. Unlike standard MIDI, which primarily uses unidirectional channel messages like note-on and note-off for performance data, MMC relies exclusively on bidirectional SysEx for all communications, incorporating response handling to support error correction and feedback in extended device chains.[4]Core Commands
Transport Controls
Transport controls in MIDI Machine Control (MMC) form the foundational set of commands for managing linear media playback and navigation in audio and video systems, enabling remote operation of devices such as tape recorders, digital audio workstations, and multitrack recorders. These commands are transmitted via System Exclusive (SysEx) messages in the format F0 7F [device ID] 06 [command byte] F7, where the Sub-ID byte 06 indicates an MMC command, the device ID addresses the target (with 7F for all devices), and the single-byte command follows immediately without additional parameters for basic transport functions.[1] This structure ensures efficient, low-latency transmission, often prioritized in implementations for real-time synchronization during live production sessions.[1] The Stop command (01h) immediately halts all transport motion, including playback or recording, without any parameters or transitional effects, returning the device to a ready state at the current position.[1] In contrast, the Play command (02h) initiates forward linear playback from the current location at nominal speed (1x), though some device implementations support variable speeds via extended MMC features; it defaults to standard rate unless otherwise specified.[1] The Deferred Play command (03h) queues playback to commence at the next valid frame boundary, primarily for achieving precise synchronization with external timecode sources like MIDI Time Code (MTC), avoiding abrupt starts in time-aligned workflows.[1] For navigation, the Fast Forward (04h) and Rewind (05h) commands engage high-speed scanning in the forward or reverse direction, respectively, with speeds typically defined by the device (e.g., 10x nominal rate) and no audio output during operation to facilitate quick positioning without playback interruption.[1] These commands exit any active recording modes automatically. The Pause command (09h) provides a non-destructive halt, suspending transport temporarily while preserving the exact position for seamless resumption upon receiving Play, distinguishing it from Stop by not requiring repositioning.[1]| Command | Code (hex) | Description | Parameters |
|---|---|---|---|
| Stop | 01 | Halts all motion immediately | None |
| Play | 02 | Starts playback at 1x speed | None |
| Deferred Play | 03 | Queues play for timecode sync | None |
| Fast Forward | 04 | High-speed forward scan | None |
| Rewind | 05 | High-speed reverse scan | None |
| Pause | 09 | Temporary suspension | None |
Record and Arming Functions
MIDI Machine Control (MMC) includes a set of commands dedicated to preparing tracks for recording and managing the recording process itself, enabling precise control over multi-track audio devices such as tape machines or digital recorders. These functions allow controllers to arm specific tracks, initiate recording from the current position, pause or exit the mode, and handle post-recording tasks like media ejection or state reset, all via Universal System Exclusive messages.[4][11] The Record Ready command (40H), also known as arming tracks, prepares specific tracks for recording by loading a track bitmap into the device's arm mask. The message format isF0 7F [device ID] 06 40 [length byte(s)] [track bitmap] F7, where the length indicates the number of bitmap bytes (1-8), and the track bitmap represents up to 64 tracks, with each bit corresponding to a track (bit 0 for track 1, bit 1 for track 2, up to bit 63 for track 64; a '1' bit arms the track for recording). If recording is already active, the arming is deferred until a subsequent Record Strobe command. This selective arming is essential in professional multi-track setups to enable recording on only designated channels without affecting others.[4][11]
The Record Strobe command (06H), or Punch In, begins recording on the currently armed tracks starting from the present position. Its message format is F0 7F [device ID] 06 06 F7, applying the current arm mask (including any deferred from Record Ready), entering record mode on armed tracks and exiting on disarmed ones; if the transport is stopped, it also starts playback to initiate recording. This command requires prior arming via Record Ready and resumes from a paused state without needing additional setup. In workflows, it facilitates overdubbing or punch-in corrections by seamlessly transitioning armed tracks into record mode.[4][11]
To halt recording while preserving the armed state and transport motion, the Record Exit command (07H), or Punch Out, is used. Sent as F0 7F [device ID] 06 07 F7, it exits record mode on all armed tracks and switches them to playback, allowing immediate review of the recorded material without stopping the session. Unlike a full stop, this maintains momentum for continued editing.[4][11]
The Record Pause command (08H) temporarily suspends recording on armed tracks while keeping the arm status intact and the transport running. Its format is F0 7F [device ID] 06 08 F7, pausing audio capture without disarming or stopping playback; a subsequent Record Strobe resumes recording on the armed tracks from the pause point. This is useful for brief interruptions during sessions, such as adjusting levels, and does not interfere with the Record Strobe's ability to re-enter record mode.[4]
For post-recording operations, the Eject command (0AH) signals the device to remove the recording medium, such as tape or a disk. The message is F0 7F [device ID] 06 0A F7 with no parameters, typically executed after stopping to safely unload media and conclude a session. Additionally, the MMC Reset command (0DH) clears all MMC states, including armed tracks and record modes, returning the device to its initial configuration. Sent as F0 7F [device ID] 06 0D F7, it ensures a clean slate for new projects by resetting arming, transport, and other flags without affecting the underlying media.[4]
