home *** CD-ROM | disk | FTP | other *** search
/ The CDPD Public Domain Collection for CDTV 4 / CDPD_IV.bin / amfm / amfm6 / text / msc.txt.pp / msc.txt
Text File  |  1994-06-20  |  45KB  |  1,174 lines

  1.  
  2.  MIDI SHOW CONTROL (MSC) 1.0
  3.  MIDI 1.0 Recommended Practice RP-002
  4.  1991-07-25
  5.  
  6.  MIDI Manufacturers Association
  7.  5316 West 57th Street
  8.  Los Angeles, CA 90056 USA
  9.  1-213/649-6434
  10.  fax:  1-213/215-3380
  11.  PAN:  MMA
  12.  Internet:  MMA@pan.com
  13.  
  14.  
  15.  1.   INTRODUCTION
  16.  
  17.  The purpose of MIDI Show Control is to allow MIDI systems to
  18. communicate with and to control dedicated intelligent control
  19. equipment in theatrical, live performance, multi-media,
  20. audio-visual and similar environments.
  21.  
  22.  Applications may range from a simple interface through which a
  23. single lighting controller can be instructed to GO, STOP or
  24. RESUME, to complex communications with large, timed and
  25. synchronized systems utilizing many controllers of all types of
  26. performance technology.
  27.  
  28.  The set of commands is modeled on the command structure of
  29. currently existing computer memory lighting, sound and show
  30. control systems.  The intent is that translation between the MIDI
  31. Show Control specification and dedicated controller commands
  32. will be relatively straightforward, being based on the same
  33. operating principles.  On the other hand, it has been assumed
  34. that translation will involve more than table look-up, and
  35. considerable variation will be found in data specifications and
  36. other communications details.  In essence, MIDI Show Control
  37. is intended to communicate easily with devices which are designed
  38. to execute the same set or similar sets of operations.
  39.  
  40.  
  41.  2.   GENERAL STRUCTURE
  42.  
  43.  
  44.  2.1. UNIVERSAL SYSTEM EXCLUSIVE FORMAT
  45.  
  46.  MIDI Show Control uses a single Universal Real Time System
  47. Exclusive ID number (sub-ID 1 = 02H) for all Show commands
  48. (transmissions from Controller to Controlled Device).
  49.  
  50.  In this version of Show Control, no command responses (from
  51. Controlled Device to Controller) are specified or required in
  52. order to optimize bandwidth requirements, system response time
  53. and system reliability in the event of communication difficulties
  54. with one or more Controlled Device.  The guiding philosophy
  55. behind live performance control is that, as much as possible,
  56. failures of individual Controlled Devices should not impair
  57. communications with other Controlled Devices.  This concept has
  58. been a part of MIDI design from the beginning and MIDI Show
  59. Control continues to use an "open-loop" design in order that
  60. standard MIDI practices may continue to be successfully utilized
  61. in applications using all types of standard Channel and System
  62. messages.  However, a "closed-loop" version of Show Control has
  63. been discussed and may be created in the future.
  64.  
  65.  In this document all transmitted characters are represented in
  66. hex unless otherwise noted.  The initials "msc" will be used to
  67. denote the new MIDI Show Control sub-ID 1 (= 02H). 
  68.  The format of a Show Control message is as follows:
  69.  
  70.  F0 7F <device_ID> 02 <command_format> <command> <data> F7
  71.  
  72.  NOTES: 
  73.  
  74.  1.    No more than one command can be transmitted in a Sysex.
  75.  2.    The total number of bytes in a Show Control message
  76.        should not exceed 128.
  77.  3.    Sysex's must always be closed with an F7H as soon as all
  78.        currently prepared information has been transmitted.
  79.  
  80.  
  81.  2.2. DEVICE IDENTIFICATION
  82.  
  83.  <device_ID> is always a DESTINATION device address.
  84.  
  85.  Commands are most often addressed to one device at a time.  For
  86. example, to command two lighting consoles to GO, transmit:
  87.  
  88.  F0 7F <device_ID=1> 02 <command_format=lighting> <GO> F7
  89.  F0 7F <device_ID=2> 02 <command_format=lighting> <GO> F7
  90.         <device_ID> values:
  91.                00-6F   Individual ID's
  92.                70-7E   Group ID's 1-15 (optional)
  93.                7F      "All-call" ID for system wide broadcasts 
  94.  
  95.  Every device must be able to respond to both an individual and
  96. the "all-call" (7FH) ID.  The group addressing mode is optional. 
  97. A device may respond to one or more individual ID and one or more
  98. group ID.  Both <device_ID> and <command_format> of a message
  99. must match the device_ID and command_format of a controlled
  100. device before the message is recognized.
  101.  
  102.  If two separate controlled devices responding to the same
  103. command_format are set to respond to the same device_ID then only
  104. one message need be sent for both to respond.
  105.  
  106.  The "all-call" device_ID (7FH) is used for system wide
  107. "broadcasts" of identical commands to devices of the same
  108. command_format (or to all devices when used with
  109. <command_format=all-types>; see 4.1, below.)
  110.  
  111.  Before fully interpreting the <device_ID> byte, parsing routines
  112. will need to look at <msc> and <command_format>, both of which
  113. follow <device_ID>, in order to first determine that the Sysex
  114. contains Show Control commands in the appropriate format.
  115.  
  116.  A typical system will consist of at least one Controller
  117. attached to one or more Controlled Devices.  It is possible for
  118. the same machine to be both a Controlled Device and a Controller
  119. at the same time.  In this case, the machine may act as a
  120. translator, interpreter or converter of Show Control commands.
  121. According to its programmed instructions, the receipt of one type
  122. of command may result in the transmission of similar or different
  123. commands.
  124.  
  125.  It is also a possibility that multiple Controller outputs could
  126. be merged and distributed to one or more Controlled Devices.
  127.  
  128.  Optionally, Controlled Devices may be able to transmit (from a
  129. MIDI Out connector) MIDI Show Control commands of the type
  130. required by themselves to produce a desired result.  In this
  131. condition, the Controlled Device will be transmitting a valid
  132. MIDI Show Control Command but may not necessarily be doing so as
  133. a Controller.
  134.  
  135.  This is useful when the Controller has the ability (through MIDI
  136. In) to capture valid MIDI Show Control messages in order to
  137. conveniently create and edit the database of messages needed for
  138. the performances being controlled.  In this case, the Controlled
  139. Device will be transmitting to the Controller, but only for the
  140. purposes of capturing messages to store and retransmit during
  141. performance.
  142.  
  143.  Another application allowed by the transmission of Show
  144. Control commands by Controlled Devices is the slaving of multiple
  145. Devices of similar type.  For example, if a dedicated lighting
  146. console transmits a Show Control command to "GO" when its GO
  147. button is pressed, then any other dedicated lighting console that
  148. obeys MIDI Show Control commands will also GO if it receives
  149. MIDI from the first console.  In this way, many Controlled
  150. Devices may be controlled by another Controlled Device acting as
  151. the Controller.  Interconnection would follow the same pattern as
  152. the normal Controller to Controlled Device arrangement.
  153.  
  154.  
  155.  2.3. COMMAND_FORMATS
  156.  
  157.  A command_format is a message byte from a Controller to a
  158. Controlled Device which identifies the format of the following
  159. Command byte.  Each command_format has a format code between 01H
  160. and 7FH, and must be followed by a valid command byte. 
  161. (Command_format 00H is reserved for extensions, and not all codes
  162. are currently defined.)
  163.  
  164.  
  165.  2.4. COMMANDS
  166.  
  167.  A command is a message byte from a Controller to a Controlled
  168. Device.  Each command has a command code between 01H and 7FH,
  169. and may be followed by one or more data bytes, up to a total
  170. message length of 128 bytes.  (Command 00H is reserved for
  171. extensions, and not all codes are currently defined.)
  172.  
  173.  
  174.  2.5. EXTENSION SETS
  175.  
  176.  Command_Format 00H and command 00H are reserved for two
  177. extension
  178. sets:
  179.  
  180.  00 01     1st command_format or command at 1st extension level
  181.  00 00 01  1st command_format or command at 2nd extension level
  182.  
  183.  At this time, no extended functions have been defined. 
  184. Nevertheless, to accommodate future extensions to MIDI Show
  185. Control, parsing routines must always check for extensions
  186. wherever command_format or command fields are encountered in
  187. data.
  188.  
  189.  
  190.  2.6. DATA LENGTH
  191.  
  192.  The only restriction to the number of data bytes sent is that
  193. the total number of message bytes must not be more than 128.  The
  194. actual data format of the transmitted message will be defined by
  195. the manufacturer of the Controlled Device.  This means that the
  196. Controller (or the programmer of the Controller) must know the
  197. exact data format of the Controlled Device.  This information
  198. will be manufacturer and equipment specific, so it is important
  199. that every manufacturer publish a thorough and unambiguous Sysex
  200. Implementation document.
  201.  
  202.  Because this specification is intended to accommodate the needs
  203. of an extremely wide variety of equipment and industry needs,
  204. from very low cost light boards to the most complex audio/video
  205. multimedia extravaganzas, the data formats used in simpler
  206. systems will be considerably shorter and less complex than in
  207. comprehensive equipment.  Data are transmitted in the order of
  208. most generic information first, with null character delimiters
  209. between each group of data bytes in order to signify the sending
  210. of progressively less generic data.  For instance, simple
  211. Controlled Devices may look only at the basic data and discard
  212. the rest.
  213.  
  214.  As an example, a complex Controlled Device may be able to
  215. process cue numbers with a large number of decimal point
  216. delineated subsections i.e. "235.32.7.8.654"  If a Controller
  217. transmits this cue number to a simple Controlled Device that can
  218. only process numbers in the form "xxx.x", then the simple Device
  219. can either ignore these data or else respond to them in a
  220. predictable manner, such as processing cue number "235.3."
  221.  
  222.  As a further example, cue number data may be transmitted calling
  223. up cue 235.3 then followed by a delimiter and data specifying cue
  224. list 36.6 and followed by a further delimiter specifying cue path
  225. 59.  If the Device supports multiple cue lists but not multiple
  226. cue paths, it would process cue 235.3 in cue list 36.6 (or 36)
  227. and ignore the cue path data, simply using the current or default
  228. cue path.
  229.  
  230.  Looking at the situation in the opposite manner, if simple cue
  231. number data were transmitted to a Device capable of processing
  232. all cue data, it would respond by processing that cue number in
  233. the current or default cue list using the current or default cue
  234. path.
  235.  
  236.  
  237.  3.   STANDARD SPECIFICATIONS
  238.  
  239.  Since data often contain some form of Cue Number designation, a
  240. "Standard" specification for transmission of Cue Number and
  241. related data provides consistency and saves space in the detailed
  242. data descriptions (Section 5).
  243.  
  244.  3.1. CUE NUMBERS
  245.  
  246.  When a Cue Number is sent as data, the following additional
  247. information fields may or may not be included as part of a
  248. complete "Cue Number" description:  Q_list and Q_path.  Q_list
  249. prescribes in which one of all currently Open Cue Lists the
  250. Q_number is to be placed or manipulated.  Q_path prescribes from
  251. which Open Cue Path within all available cue storage media the
  252. Q_number is to be retrieved.  The data include these information
  253. fields in the following order:
  254.  
  255.   <Q_number> 00 <Q_list> 00 <Q_path> F7
  256.  
  257.  Between each separate field a delimiter byte of the value 00H is
  258. placed as shown to indicate the end of the previous field and
  259. beginning of the next.  It is acceptable to send only:
  260.  
  261.   <Q_number> F7
  262.    or
  263.   <Q_number> 00 <Q_list> F7.
  264.  
  265.  Controlled Devices should be able to accept more than one set
  266. of delimiter bytes, including directly before F7H, and even if no
  267. Q_number, Q_list or Q_path data are sent.  Data are always
  268. terminated by F7H.
  269.  
  270.  Q_number, Q_list and Q_path are expressed as ASCII numbers 0-9
  271. (encoded as 30H-39H) with the ASCII decimal point character
  272. (2EH) used to delineate subsections.  In the example above, cue
  273. 235.6 list 36.6 path 59 would be represented by the hex data:
  274.  
  275.   32 33 35 2E 36 00 33 36 2E 36 00 35 39 F7
  276.  
  277.  Decimal points should be separated by at least one digit, but
  278. Controlled Devices should accommodate the error of sending
  279. two or more decimal points together.  Any number of decimal point
  280. delineated subsections may be used and any number of digits may
  281. be used in each subsection except that the length of the data
  282. must not cause the total length of the MIDI Show Control
  283. message to exceed 128 bytes.
  284.  
  285.  Controlled Devices which do not support Q_list and (or Q_path)
  286. data must detect the 00H byte immediately after the Q_number (or
  287. Q_list) data and then discard all data until F7H is detected. 
  288. Likewise, Controlled Devices which do not support the received
  289. number of decimal point delineated subsections, the
  290. received number of digits in a subsection or the total number of
  291. received characters in any field must handle the data received in
  292. a predictable and logical manner.
  293.  
  294.  Controlled Devices which support Q_list and/or Q_path will
  295. normally default to the current or base Q_list and Q_path if
  296. these fields are not sent with Q_number.
  297.  
  298.  For lighting applications, Q_list optionally defines the
  299. Playback or Submaster Controls (0 to 127) with which the cue
  300. corresponds.
  301.   
  302.  It is highly recommended that every manufacturer publish a
  303. clear and concise description of their equipment's response to
  304. the above conditions.
  305.  
  306.  
  307.  3.2. TIME CODE NUMBERS
  308.  
  309.  Since data often contain some form of time reference, a
  310. "Standard" specification for transmission of time provides
  311. consistency and saves space in the data descriptions.
  312.  
  313.  MIDI Show Control time code and user bit specifications are
  314. entirely consistent with the formats used by MIDI Time Code and
  315. MIDI Cueing and are identical to the Standard Time Code format
  316. proposed in MIDI Machine Control 0.05. Some extra flags have
  317. been added, but are defined such that if used in the MIDI
  318. Time Code/Cueing environment they would always be reset to zero,
  319. and so are completely transparent.
  320.  
  321.  3.2.1. STANDARD TIME CODE (types {ff} and {st}):
  322.  
  323.  This is the "full" form of the Time Code specification, and
  324. always contains exactly 5 bytes of data.
  325.  
  326.  Two forms of Time Code subframe data are defined:
  327.  
  328.  The first (labelled {ff}), contains subframe data exactly as
  329. described in the MIDI Cueing specification i.e. fractional frames
  330. measured in 1/100 frame units.
  331.  
  332.  The second form (labelled {st}) substitutes time code "status"
  333. data in place of subframes.  For example, when reading data from
  334. tape, it is useful to know whether these are real time code data,
  335. or simply time data updated by tachometer pulses during a high
  336. speed wind.  In this case, as in other cases of "moving" time
  337. code, subframe data are practically useless, being difficult both
  338. to obtain and to transmit in a timely fashion.
  339.  
  340.      hr mn sc fr (ff|st)
  341.           hr = Hours and type:  0 tt hhhhh
  342.                tt = time type (bit format):
  343.                     00 = 24 frame
  344.                     01 = 25 frame
  345.                     10 = 30 drop frame
  346.                     11 = 30 frame
  347.                hhhhh = hours (0-23, encoded as 00-17hex)
  348.           mn = Minutes: 0 c mmmmmm
  349.                c = colour frame bit (copied from bit in time code
  350.                    stream):
  351.                     0 = non colour frame
  352.                     1 = colour framed code
  353.                mmmmmm = minutes (0-59, encoded as 00-3Bhex)
  354.           sc = Seconds: 0 k ssssss
  355.                k = reserved - must be set to zero
  356.                ssssss = seconds (0-59, encoded as 00-3Bhex)
  357.           fr = Frames, byte 5 ident and sign: 0 g i fffff
  358.                g = sign bit:
  359.                     0 = positive
  360.                     1 = negative (where signed time code is      
  361.                         permitted)
  362.                i = final byte identification bit:
  363.                     0 = subframes
  364.                     1 = status
  365.                fffff = frames (0-29, encoded as 00-1Dhex)
  366.      If final byte bit = subframes (i = 0):
  367.           ff = fractional frames:  0 bbbbbbb (0-99, encoded as   
  368.                00-63hex)
  369.      If final byte bit = status (i = 1):
  370.           st = code status: 0 e v d xxxx
  371.                e = estimated code flag bit:
  372.                     0 = normal time code
  373.                     1 = tach or control track updated code
  374.                v = invalid code bit (ignore if e = 1):
  375.                     0 = valid
  376.                     1 = invalid (error or not current)
  377.                d = video field identification bit:
  378.                     0 = no field information in this frame
  379.                     1 = first frame in 4 or 8 field video        
  380.                         sequence
  381.                xxxx = reserved bits - must be set to 0000
  382.  
  383.  
  384.  DROP FRAME NOTES
  385.  
  386.  1.  When writing time code data, the drop-frame or
  387.      non-drop-frame status of the data being written may be
  388.      overridden by the status of the Controlled Device (i.e. the
  389.      time code from the device itself).
  390.  
  391.      For example, if the SET_CLOCK data are loaded with a
  392.      non-drop-frame number and if the time code on the Controlled
  393.      Device is drop-frame, then the SET_CLOCK data will
  394.      simply be interpreted as a drop-frame number, with no
  395.      attempt being made to perform any mathematical
  396.      transformations.
  397.  
  398.  2.  Furthermore, if the above SET_CLOCK number had in fact been
  399.      loaded with a non-existent drop-frame number (e.g.
  400.      00:22:00:00), then the next higher valid number would have  
  401.      been used (in this case, 00:22:00:02).
  402.  
  403.  3.  Calculation of offsets, or simply the mathematical          
  404.      difference between two time codes, can cause confusion when 
  405.      one or both of the numbers is drop-frame.
  406.  
  407.      For the purposes of this specification, DROP-FRAME NUMBERS  
  408.      SHOULD FIRST BE CONVERTED TO NON-DROP-FRAME BEFORE OFFSET   
  409.      CALCULATIONS ARE PERFORMED.  Results of an offset
  410.      calculation will then be expressed as non-drop-frame        
  411.      quantities.
  412.  
  413.      To convert from drop-frame to non-drop-frame, subtract the  
  414.      number of frames that have been "dropped" since the         
  415.      reference point 00:00:00:00.  For example, to convert the   
  416.      drop-frame number 00:22:00:02 to non-drop-frame, subtract 40
  417.      frames, giving 00:21:58:22.  The number 40 is produced by
  418.      the fact that 2 frames were "dropped" at each of the minute
  419.      marks 01 through 09, 11 through 19, 21 and 22.
  420.  
  421.      (Some manufacturers will prefer to store all internal time
  422.      codes as a simple quantity of frames from reference point
  423.      00:00:00:00.  This reduces calculation complexity, but does
  424.      require that conversions are performed at all input or
  425.      output stages.)
  426.  
  427.  
  428.  4.   INDEX LIST
  429.  
  430.  4.1. COMMAND_FORMATS
  431.  
  432.  Command_formats fall into the categories of General, Specific
  433. and All-types.  General command_formats have a least significant
  434. nibble equal to 0, except for lighting which is 01H.  Specific
  435. command_formats are related to the General command_format with
  436. the most significant nibble of the same value, but represent a
  437. more restricted range of functions within the format.
  438.  
  439.  Command_format "All-types" (7FH) is used for system wide
  440. "broadcasts" of identical commands to devices of the same
  441. device_ID (or to all devices when used with <device_ID=All-call>;
  442. see 2.2, above.)
  443.  
  444.  For example, use of the All-types command_format along with the
  445. All-call device_ID allows a complete system to be RESET with a
  446. single message.
  447.  
  448.  Controlled Devices will normally respond to only one
  449. command_format besides All-types.  Occasionally, more complex
  450. control systems will respond to more than one command_format
  451. since they will be in control of more than one technical
  452. performance element.  Controllers, of course, should normally be
  453. able to create and send commands in all command_formats,
  454. otherwise their usefulness will be limited.
  455.  
  456.  
  457.  Hex     command_format
  458.  ------------------------------------------------------
  459.  00      reserved for extensions
  460.  
  461.  01      Lighting          (General Category)
  462.  02      Moving Lights
  463.  03      Colour Changers
  464.  04      Strobes
  465.  05      Lasers
  466.  06      Chasers
  467.  
  468.  10      Sound             (General Category)
  469.  11      Music
  470.  12      CD Players
  471.  13      EPROM Playback
  472.  14      Audio Tape Machines
  473.  15      Intercoms
  474.  16      Amplifiers
  475.  17      Audio Effects Devices
  476.  18      Equalisers
  477.  
  478.  20      Machinery         (General Category)
  479.  21      Rigging
  480.  22      Flys
  481.  23      Lifts
  482.  24      Turntables
  483.  25      Trusses
  484.  26      Robots
  485.  27      Animation
  486.  28      Floats
  487.  29      Breakaways
  488.  2A      Barges
  489.  
  490.  30      Video              (General Category)
  491.  31      Video Tape Machines
  492.  32      Video Cassette Machines
  493.  33      Video Disc Players
  494.  34      Video Switchers
  495.  35      Video Effects
  496.  36      Video Character Generators
  497.  37      Video Still Stores
  498.  38      Video Monitors
  499.  
  500.  40      Projection         (General Category)
  501.  41      Film Projectors
  502.  42      Slide Projectors
  503.  43      Video Projectors
  504.  44      Dissolvers
  505.  45      Shutter Controls
  506.  
  507.  50      Process Control     (General Category)
  508.  51      Hydraulic Oil
  509.  52      H20
  510.  53      CO2
  511.  54      Compressed Air
  512.  55      Natural Gas
  513.  56      Fog
  514.  57      Smoke
  515.  58      Cracked Haze
  516.  
  517.  60      Pyro                 (General Category)
  518.  61      Fireworks
  519.  62      Explosions
  520.  63      Flame
  521.  64      Smoke pots
  522.  
  523.  7F      All-types
  524.  
  525.  Although it can be seen that a wide variety of potentially
  526. dangerous and life-threatening performance processes may be under
  527. MIDI Show Control, the intent of this specification is to
  528. allow the user considerably more exacting and precise control
  529. over the type of command_format and command which will result in
  530. the desired result than normally may be provided in a non-
  531. electronic cueing situation.  The major advantages to the use of
  532. MIDI Show Control in these conditions are:
  533.  
  534.  1.  Less likelihood of errors in cueing.  Digital communications
  535.      can be demonstrated to be extremely reliable in repetitive
  536.      duty conditions; much more so than tired or inexperienced
  537.      stagehands.
  538.  
  539.  2.  More precise timing.  Likewise, digital communications and
  540.      computer control can be consistently accurate in automatic
  541.      timing sequences and exactly as accurate as their human
  542.      operators when under manual control.
  543.  
  544.  IN NO WAY IS THIS SPECIFICATION INTENDED TO REPLACE ANY ASPECT
  545. OF NORMAL PERFORMANCE SAFETY WHICH IS EITHER REQUIRED OR MAKES
  546. GOOD SENSE WHEN DANGEROUS EQUIPMENT IS IN USE.  MANUAL CONTROLS
  547. SUCH AS EMERGENCY STOPS, DEADMAN SWITCHES, CONFIRMATION ENABLE
  548. CONTROLS OR LIKE SAFETY DEVICES SHALL BE USED FOR MAXIMUM SAFETY.
  549.  
  550.  AUTOMATIC SAFETY DEVICES SUCH AS LIMIT SWITCHES, PROXIMITY
  551. SENSORS, GAS DETECTORS, INFRARED CAMERAS AND PRESSURE AND MOTION
  552. DETECTORS SHALL BE USED FOR MAXIMUM SAFETY.  MIDI SHOW CONTROL
  553. IS NOT INTENDED TO TELL DANGEROUS EQUIPMENT WHEN IT IS SAFE TO
  554. GO:  IT IS ONLY INTENDED TO SIGNAL WHAT IS DESIRED IF ALL
  555. CONDITIONS ARE ACCEPTABLE AND IDEAL FOR SAFE PERFORMANCE.  ONLY
  556. PROPERLY DESIGNED SAFETY SYSTEMS AND TRAINED SAFETY PERSONNEL CAN
  557. ESTABLISH IF CONDITIONS ARE ACCEPTABLE AND IDEAL AT ANY TIME.
  558.  
  559.  
  560.  4.2. RECOMMENDED MINIMUM SETS
  561.  
  562.  MIDI Show Control does not specify an absolute minimum set of
  563. commands and data which must be implemented in each
  564. device responding to a given command_format.
  565.  
  566.  However, in order to ease the burden of interfacing between
  567. Controllers and Controlled Devices from different manufacturers,
  568. four RECOMMENDED MINIMUM SETS of commands and data have been
  569. created.  Once a Controlled Device is specified to conform to a
  570. particular Recommended Minimum Set, then the task of designing a
  571. Controller which will successfully operate that device is
  572. considerably simplified.
  573.  
  574.  The currently defined Recommended Minimum Sets are:
  575.  
  576.  1.   Simple Controlled Device; no time code; basic data only
  577.  2.   No time code; full data capability
  578.  3.   Full time code; full data capability
  579.  
  580.  Assignment of any particular command or data to a Recommended
  581. Minimum Set may be found in the far right hand column of the
  582. Index List.
  583.  
  584.  Recommended Minimum Sets are in no way intended to restrict the
  585. scope of operations supported by any device.  They are offered
  586. only in the spirit of a "lowest common denominator".
  587.  
  588.  
  589.  4.3. GENERAL COMMANDS
  590.  
  591.  The following commands are basic to the current implementation
  592. of Memory Lighting systems and probably apply to all dedicated
  593. theatrical show control systems in a general sense.  Although it
  594. is not required that Controlled Devices incorporate all of these
  595. commands, it is highly recommended:
  596.  
  597.                                                Number
  598.                                                of data  Recomm'd
  599.  Hex command                                   bytes    Min Sets
  600.  ---------------------------------------------------------------
  601.  00  reserved for extensions
  602.  01  GO                                        variable 123
  603.  02  STOP                                      variable 123
  604.  03  RESUME                                    variable 123
  605.  04  TIMED_GO                                  variable -23
  606.  05  LOAD                                      variable -23
  607.  06  SET                                       4 or 9   -23
  608.  07  FIRE                                      1        -23
  609.  08  ALL_OFF                                   0        -23
  610.  09  RESTORE                                   0        -23
  611.  0A  RESET                                     0        -23
  612.  0B  GO_OFF                                    variable -23 
  613.  
  614.  
  615.  4.4. SOUND COMMANDS
  616.  
  617.  The following commands, in addition to the above, are basic to
  618. the current implementation of Computer Controlled Sound Memory
  619. Programming Systems and are widely used by Show Control Systems
  620. in more comprehensive applications.  It is recommended that
  621. Controllers support the transmission of these commands:
  622.  
  623.                                                Number
  624.                                                of data  Recomm'd
  625.  Hex command                                   bytes    Min Sets
  626.  ---------------------------------------------------------------
  627.  10  GO/JAM_CLOCK                              variable --3
  628.  11  STANDBY_+                                 variable -23
  629.  12  STANDBY_-                                 variable -23
  630.  13  SEQUENCE_+                                variable -23
  631.  14  SEQUENCE_-                                variable -23
  632.  15  START_CLOCK                               variable --3
  633.  16  STOP_CLOCK                                variable --3
  634.  17  ZERO_CLOCK                                variable --3
  635.  18  SET_CLOCK                                 variable --3
  636.  19  MTC_CHASE_ON                              variable --3
  637.  1A  MTC_CHASE_OFF                             variable --3
  638.  1B  OPEN_CUE_LIST                             variable -23
  639.  1C  CLOSE_CUE_LIST                            variable -23
  640.  1D  OPEN_CUE_PATH                             variable -23
  641.  1E  CLOSE_CUE_PATH                            variable -23
  642.  
  643.  
  644.  5.  DETAILED COMMAND AND DATA DESCRIPTIONS
  645.  
  646.     00   Reserved for extensions
  647.  
  648.     01   GO
  649.  
  650.          Starts a transition or fade to a cue.  Transition time
  651.          is determined by the cue in the Controlled Device.  If
  652.          no Cue Number is specified, the next cue in numerical
  653.          sequence GOes.  If a Cue Number is specified, that cue
  654.          GOes.
  655.          Transitions "run" until complete.
  656.          If the Controller wishes to define the transition time,
  657.          TIMED_GO should be sent.
  658.  
  659.          In Controlled Devices with multiple Cue Lists, if no Cue
  660.          Number is Specified, the next cues in numerical order
  661.          and numbered identically and which are in Open Cue Lists
  662.          GO.  If Q_number is sent without Q_list, all cues with a
  663.          number identical to Q_number and which are in
  664.          Open Cue Lists GO.
  665.  
  666.  
  667.           01              GO
  668.           <Q_number>      optional; required if Q_list is sent 
  669.           00              delimiter
  670.           <Q_list>        optional; required if Q_path is sent
  671.           00              delimiter
  672.           <Q_path>        optional
  673.  
  674.  
  675.     02   STOP
  676.  
  677.          Halts currently running transition(s).  If no Cue Number
  678.          is specified, all running transitions STOP.  If a Cue
  679.          Number is specified, only that single, specific
  680.          transition STOPs, leaving all others unchanged.
  681.  
  682.           02              STOP
  683.           <Q_number>      optional; required if Q_list is sent
  684.           00              delimiter
  685.           <Q_list>        optional; required if Q_path is sent
  686.           00              delimiter
  687.           <Q_path>        optional
  688.  
  689.  
  690.     03   RESUME
  691.  
  692.           Causes STOPped transition(s) to continue running. If no
  693.           Cue Number is specified, all STOPped transitions
  694.           RESUME.  If a Cue Number is specified, only that
  695.           transition RESUMEs, leaving all others unchanged.
  696.  
  697.            03             RESUME
  698.            <Q_number>     optional; required if Q_list is sent
  699.            00             delimiter
  700.            <Q_list>       optional; required if Q_path is sent
  701.            00             delimiter
  702.            <Q_path>       optional
  703.  
  704.  
  705.     04   TIMED_GO
  706.  
  707.          Starts a timed transition or fade to a cue.  If no Cue
  708.          Number is specified, the next cue in numerical sequence
  709.          GOes.  If a Cue Number is specified, that cue GOes.
  710.          Transitions "run" until complete.
  711.  
  712.          Time is Standard Time Specification with subframes (type
  713.          {ff}), providing anything from "instant" to 24 hour
  714.          transitions.  If a Controlled Device does not support
  715.          TIMED_GO it should GO instead, ignoring the time data
  716.          but processing Cue Number data normally.  If the
  717.          transition time desired is the preexisting default cue
  718.          time, GO should be sent instead of TIMED_GO.
  719.  
  720.          Rules for Controlled Devices with multiple Cue Lists are
  721.          the same as for GO, above.
  722.  
  723.           04              TIMED_GO
  724.           hr mn sc fr ff  Standard Time Specification
  725.           <Q_number>      optional; required if Q_list is sent 
  726.           00              delimiter
  727.           <Q_list>        optional; required if Q_path is sent
  728.           00              delimiter
  729.           <Q_path>        optional
  730.  
  731.  
  732.     05   LOAD
  733.  
  734.          Places a cue into a standby position.  Cue Number must
  735.          be specified.  LOAD is useful when the cue desired takes
  736.          a finite time to access.  LOAD is sent in advance so
  737.          that the cue will GO instantly.
  738.  
  739.          In Controlled Devices with multiple Cue Lists,
  740.          if Q_number is sent without Q_list, all cues with a
  741.          number identical to Q_number and which are in
  742.          Open Cue Lists LOAD to standby.
  743.  
  744.           05              LOAD
  745.           <Q_number>      required
  746.           00              delimiter
  747.           <Q_list>        optional; required if Q_path is sent
  748.           00              delimiter
  749.           <Q_path>        optional
  750.  
  751.  
  752.     06   SET
  753.  
  754.          Defines the value of a Generic Control.  The Generic
  755.          Control and its value are each specified by a 14 bit
  756.          number.  A Controlled Device may treat virtually any of
  757.          its variables, attributes, rates, levels, modes,
  758.          functions, effects, subs, channels, switches, etc. as
  759.          Generic Controls which may be sent values via SET. 
  760.          Optionally, the time it takes the Generic Control to
  761.          achieve its value may be sent.
  762.  
  763.          Time is Standard Time Specification with subframes (type
  764.          {ff}), providing anything from "instant" to 24 hour
  765.          transitions.  If a Controlled Device does not support
  766.          times in SET, it should ignore time data.
  767.  
  768.            Standard Generic Control Numbers for Lighting:
  769.  
  770.               0-127      Sub masters
  771.               128-129    Masters of the first playback
  772.               130-131    Masters of the second playback
  773.                ...
  774.                etc.
  775.                ...
  776.               190-191    Masters of the 32nd playback
  777.               192-223    Speed controllers for the 32 playbacks
  778.               224-255    Chase sequence masters
  779.               256-287    Chase sequence speed masters
  780.               510        Grand Master for all channels
  781.               511        General speed controller for all fades
  782.               512-1023   Individual channel levels
  783.  
  784.           06              SET
  785.           cc cc           Generic Control Number, LSB first
  786.           vv vv           Generic Control Value, LSB first
  787.           hr mn sc fr ff  Standard Time Specification, optional
  788.  
  789.  
  790.     07   FIRE
  791.  
  792.          Triggers a preprogrammed keyboard Macro.  The Macro is
  793.          defined by a 7 bit number.  The Macros themselves are
  794.          either programmed at the Controlled Device, or loaded
  795.          via MIDI file dump facilities using the ASCII Cue Data
  796.          format or any method applicable to the Controlled
  797.          Device.
  798.  
  799.           07              FIRE
  800.           mm              Macro Number
  801.  
  802.  
  803.     08   ALL_OFF
  804.  
  805.          Independently turns all functions and outputs off
  806.          without changing the control settings.  Operating status
  807.          prior to ALL_OFF may be reestablished by RESTORE.
  808.  
  809.           08              ALL_OFF
  810.  
  811.  
  812.     09   RESTORE
  813.  
  814.          Reestablishes operating status to exactly as it was
  815.          prior to ALL_OFF.
  816.  
  817.           09              RESTORE
  818.  
  819.  
  820.     0A   RESET
  821.  
  822.          Terminates all running cues, setting all timed functions
  823.          to an initialized state equivalent to a newly powered-up
  824.          condition and loads the first cue of each applicable cue
  825.          list into the appropriate standby positions.  In other
  826.          words, RESET stops the show without arbitrarily changing
  827.          any control values and loads the top of the show to
  828.          standby.
  829.  
  830.          It should be decided by the manufacturer of the
  831.          Controlled Device whether or not RESET should
  832.          automatically open all CLOSEd_CUE_LISTs and
  833.          CLOSEd_CUE_PATHs and this decision should be stated
  834.          clearly in the device's MIDI Implementation
  835.          documentation.
  836.  
  837.           0A              RESET
  838.  
  839.  
  840.     0B   GO_OFF 
  841.  
  842.          Starts a transition or fade of a cue to the off state.
  843.          Transition time is determined by the cue in the 
  844.          Controlled Device. 
  845.  
  846.          If no Cue Number is specified, the current cue GOes OFF.
  847.          If a Cue Number is specified, that cue GOes OFF.
  848.  
  849.          In Controlled Devices with multiple Cue Lists, if no Cue
  850.          Number is Specified, all currently active cues in Open
  851.          Cue Lists GO OFF.  If Q_number is sent without Q_list,
  852.          all cues with a number identical to Q_number and which
  853.          are in Open Cue Lists GO OFF.
  854.  
  855.          For compatibility with Controlled Devices which do not
  856.          automatically replace an existing cue with a new cue
  857.          upon receipt of the GO command, Controllers should
  858.          optionally prompt the programmer to simultaneously
  859.          create a GO_OFF command.
  860.  
  861.           0B              GO_OFF
  862.           <Q_number>      optional; required if Q_list is sent
  863.           00              delimiter
  864.           <Q_list>        optional; required if Q_path is sent
  865.           00              delimiter
  866.           <Q_path>        optional 
  867.  
  868.  
  869.     10   GO/JAM_CLOCK
  870.  
  871.          Starts a transition or fade to a cue simultaneous with
  872.          forcing the clock time to the 'Go Time' if the cue is
  873.          an 'Auto Follow' cue.  Transition time is determined by
  874.          the cue in the Controlled Device.
  875.  
  876.          If no Cue Number is specified, the next cue in numerical
  877.          sequence GOes and the clock of the appropriate Cue List
  878.          JAMs to that cue's time.  If the next cue in numerical
  879.          sequence is a 'Manual' cue (i.e. if it has not been
  880.          stored with a particular 'Go Time,' making it an
  881.          'Auto Follow' cue), the GO/JAM_CLOCK command is ignored.
  882.  
  883.          If a Cue Number is specified, that cue Gop and the clock
  884.          of the appropriate Cue List JAMs to the cue's time
  885.          unless the cue is 'Manual' in which case no change
  886.          occurs.
  887.  
  888.          Rules for Controlled Devices with multiple Cue Lists are
  889.          the same as for GO, above.
  890.  
  891.          
  892.           10              GO/JAM_CLOCK
  893.           <Q_number>      optional; required if Q_list is sent 
  894.           00              delimiter
  895.           <Q_list>        optional; required if Q_path is sent
  896.           00              delimiter
  897.           <Q_path>        optional
  898.  
  899.  
  900.     11   STANDBY_+
  901.  
  902.          Places into standby position the next cue in numerical
  903.          order after the cue currently in standby.
  904.  
  905.          If Q_list is not sent, the Open Cue List containing the
  906.          next cue in numerical order is used.  If more than one
  907.          Open Cue List have cues with an identical number then
  908.          those cues will move to their respective standby
  909.          positions.
  910.  
  911.          If Q_list is sent in Standard Cue Number Form, only
  912.          the next cue in the Cue List specified moves to the
  913.          standby position.
  914.  
  915.           11              STANDBY_+
  916.           <Q_list>        optional
  917.  
  918.  
  919.     12   STANDBY_-
  920.  
  921.          Places into standby position the previous cue in
  922.          numerical order prior to the cue currently in standby.  
  923.  
  924.          If Q_list is not sent, the Open Cue List containing the
  925.          previous cue in numerical order is used.  If more than
  926.          one Open Cue List have cues with an identical number
  927.          then those cues will move to their respective standby
  928.          positions.
  929.  
  930.          If Q_list is sent in Standard Form, only the previous
  931.          cue in the Cue List specified moves to the standby
  932.          position.
  933.  
  934.           12              STANDBY_-
  935.           <Q_list>        optional
  936.  
  937.  
  938.     13   SEQUENCE_+
  939.  
  940.          Places into standby position the next parent cue in
  941.          numerical sequence after the cue currently in standby.
  942.  
  943.          'Parent' refers to the integer value of the cue's
  944.          number prior to the first decimal point (the "most
  945.          significant number")  For example, if cue 29.324.98.7
  946.          was in standby and the cues following were 29.325, 29.4,
  947.          29.7, 29.9.876, 36.7, 36.7.832, 36.8, 37., and 37.1,
  948.          then cue 36.7 would be loaded to standby by SEQUENCE_+.
  949.  
  950.          If Q_list is not sent, the Open Cue List containing the
  951.          next cue in parental sequence is used.  If more than one
  952.          Open Cue List have cues with a completely identical
  953.          number then those cues will move to their respective
  954.          standby positions.
  955.  
  956.          If Q_list is sent in Standard Form, only the next
  957.          parent cue in the Cue List specified moves to the
  958.          standby position.
  959.  
  960.           13              SEQUENCE_+
  961.           <Q_list>        optional
  962.  
  963.  
  964.     14   SEQUENCE_-
  965.  
  966.          Places into standby position the lowest numbered parent
  967.          cue in the previous numerical sequence prior to the cue
  968.          currently in standby.
  969.  
  970.          'Parent' refers to the integer value of the cue's
  971.          number prior to the first decimal point (the "most
  972.          significant number")  For example, if cue 37.4.72.18.5
  973.          was in standby and the cues preceding were 29.325, 29.4,
  974.          29.7, 29.9.876, 36.7, 36.7.832, 36.8, 37., and 37.1,
  975.          then cue 36.7 would be loaded to standby by SEQUENCE_-.
  976.  
  977.          If Q_list is not sent, the Open Cue List containing the
  978.          previous parental sequence is used.  If more than one
  979.          Open Cue List have cues with identical lowest numbered
  980.          parent cues in previous parental sequence then those
  981.          cues will move to their respective standby positions.
  982.  
  983.          If Q_list is sent in Standard Form, only the first
  984.          parent cue in the previous sequence of the Cue List
  985.          specified moves to the standby position.
  986.  
  987.           14              SEQUENCE_-
  988.           <Q_list>        optional
  989.  
  990.  
  991.     15   START_CLOCK
  992.  
  993.          Starts the 'Auto Follow' clock timer.  If the clock is
  994.          already running, no change occurs.  The clock continues
  995.          counting from the time value which it contained while it
  996.          was Stopped.
  997.  
  998.          If Q_list is not sent, the clocks in all Open Cue Lists
  999.          Start simultaneously.
  1000.  
  1001.          If Q_list is sent in Standard Form, only the clock in
  1002.          that Cue List Starts.
  1003.          
  1004.           15              START_CLOCK
  1005.           <Q_list>        optional
  1006.  
  1007.  
  1008.     16   STOP_CLOCK
  1009.  
  1010.          Stops the 'Auto Follow' clock timer.  If the clock is
  1011.          already stopped, no change occurs.  While the clock is
  1012.          stopped, it retains the time value which it contained
  1013.          at the instant it received the STOP command.
  1014.  
  1015.          If Q_list is not sent, the clocks in all Open Cue Lists
  1016.          Stop simultaneously.
  1017.  
  1018.          If Q_list is sent in Standard Form, only the clock in
  1019.          that Cue List Stops.
  1020.          
  1021.           16              STOP_CLOCK
  1022.           <Q_list>        optional
  1023.  
  1024.  
  1025.     17   ZERO_CLOCK
  1026.  
  1027.          Sets the 'Auto Follow' clock timer to a value of
  1028.          00:00:00:00.00, whether or not it is running.  If the
  1029.          clock is already stopped and Zeroed, no change occurs. 
  1030.          ZERO_CLOCK does not affect the clock's running status.
  1031.  
  1032.          If Q_list is not sent, the clocks in all Open Cue Lists
  1033.          Zero simultaneously.
  1034.  
  1035.          If Q_list is sent in Standard Form, only the clock in
  1036.          that Cue List Zeros.
  1037.          
  1038.           17              ZERO_CLOCK
  1039.           <Q_list>        optional
  1040.  
  1041.  
  1042.     18   SET_CLOCK
  1043.  
  1044.          Sets the 'Auto Follow' clock timer to a value equal to
  1045.          the Standard Time sent, whether or not it is running.
  1046.          SET_CLOCK does not affect the clock's running status.
  1047.  
  1048.          If Q_list is not sent, the clocks in all Open Cue Lists
  1049.          Set simultaneously.
  1050.  
  1051.          If Q_list is sent in Standard Form, only the clock in
  1052.          that Cue List Sets.
  1053.          
  1054.           18              SET_CLOCK
  1055.           hr mn sc fr ff  Standard Time Specification
  1056.           <Q_list>        optional
  1057.  
  1058.  
  1059.     19  MTC_CHASE_ON
  1060.  
  1061.          Causes the 'Auto Follow' clock timer to continuously
  1062.          contain a value equal to incoming MIDI Time Code.  If no
  1063.          MTC is being received when this command is received, the
  1064.          clock remains in its current running or stopped status
  1065.          until MTC is received, at which time the clock
  1066.          continuously exhibits the same time as MTC.  If MTC
  1067.          becomes discontinuous, the clock continues to display
  1068.          the last valid MTC message value received.
  1069.  
  1070.          If Q_list is not sent, the clocks in all Open Cue Lists
  1071.          Chase simultaneously.
  1072.  
  1073.          If Q_list is sent in Standard Form, only the clock in
  1074.          that Cue List Chases.
  1075.          
  1076.           19              MTC_CHASE_ON
  1077.           <Q_list>        optional
  1078.  
  1079.  
  1080.     1A  MTC_CHASE_OFF
  1081.  
  1082.          Causes the 'Auto Follow' clock timer to cease Chasing
  1083.          incoming MIDI Time Code.  When MTC_CHASE_OFF is
  1084.          received, the clock returns to running or stopped status
  1085.          according to its operating status at the instant
  1086.          MTC_CHASE_ON was received.
  1087.  
  1088.          MTC_CHASE_OFF does not change the clock time value; i.e.
  1089.          if the clock is stopped, it retains the last valid MTC
  1090.          message value received (or simply the most recent time
  1091.          in the clock register); if the clock is running, it
  1092.          continues to count from the most recent time in its
  1093.          register.
  1094.  
  1095.          If Q_list is not sent, the clocks in all Open Cue Lists
  1096.          stop Chasing simultaneously.
  1097.  
  1098.          If Q_list is sent in Standard Form, only the clock in
  1099.          that Cue List stops Chasing.
  1100.          
  1101.           1A              MTC_CHASE_OFF
  1102.           <Q_list>        optional
  1103.  
  1104.  
  1105.     1B   OPEN_CUE_LIST
  1106.  
  1107.          Makes a Cue List available to all other commands and
  1108.          includes any cues it may contain in the current show.
  1109.  
  1110.          When OPEN_CUE_LIST is received, the specified Cue List
  1111.          becomes active and cues in it can be accessed by normal
  1112.          show requirements.  Q_list in Standard Form must be
  1113.          sent.
  1114.  
  1115.          If the specified Cue List is already Open or if it
  1116.          does not exist, no change occurs.
  1117.  
  1118.           1B              OPEN_CUE_LIST
  1119.           <Q_list>        required
  1120.  
  1121.  
  1122.     1C   CLOSE_CUE_LIST
  1123.  
  1124.          Makes a Cue List unavailable to all other commands and
  1125.          excludes any cues it may contain from the current show.
  1126.  
  1127.          When CLOSE_CUE_LIST is received, the specified Cue List
  1128.          becomes inactive and cues in it cannot be accessed by
  1129.          normal show requirements, but the status of the cues in
  1130.          the list does not change.  Q_list in Standard Form must
  1131.          be sent.
  1132.  
  1133.          If the specified Cue List is already Closed or if it
  1134.          does not exist, no change occurs.
  1135.  
  1136.           1C              CLOSE_CUE_LIST
  1137.           <Q_list>        required
  1138.  
  1139.  
  1140.     1D   OPEN_CUE_PATH
  1141.  
  1142.          Makes a Cue Path available to all other MIDI Show
  1143.          Control commands and to all normal show cue path access
  1144.          requirements as well.
  1145.  
  1146.          When OPEN_CUE_PATH is received, the specified Cue Path
  1147.          becomes active and cues in it can be accessed by the
  1148.          Controlled Device.  Q_path in Standard Form must be
  1149.          sent.
  1150.  
  1151.          If the specified Cue Path is already Open or if it
  1152.          does not exist, no change occurs.
  1153.  
  1154.           1D              OPEN_CUE_PATH
  1155.           <Q_path>        required
  1156.  
  1157.  
  1158.     1E   CLOSE_CUE_PATH
  1159.  
  1160.          Makes a Cue Path unavailable to all other MIDI Show
  1161.          Control commands and to all normal show cue path access
  1162.          requirements as well.
  1163.  
  1164.          When CLOSE_CUE_PATH is received, the specified Cue Path
  1165.          becomes inactive and cues in it cannot be accessed by
  1166.          the Controlled Device.  Q_path in Standard Form must be
  1167.          sent.
  1168.  
  1169.          If the specified Cue Path is already Closed or if it
  1170.          does not exist, no change occurs.
  1171.  
  1172.           1E              CLOSE_CUE_PATH
  1173.           <Q_path>        required
  1174.