Goffredo Haus, editor
Fall 1995
© IEEE Computer Society Press.


2.3. Standard Specifications

Since data often contain some form of Cue Number designation, a "Standard" specification for transmission of Cue Number and related data provides consistency and saves space in the detailed data descriptions (see 2.5. below).

Cue Numbers

When a Cue Number is sent as data, the following additional information fields may or may not be included as part of a complete "Cue Number description: Q_list and Q_path. Q-list prescribes in which one of all currently Open Cue Lists the Q_number is to be placed or manipulated. Q_path prescribes from which Open Cue Path within all available cue storage media the Q_number is to be retrieved. The data include these information fields in the following order:

<Q_number> 00 <Q_List> 00 <Q_path> F7

Between each separate field a delimiter byte of the value 00H is placed as shown to indicate the end of the previous field and beginning of the next. It is acceptable to send only:

<Q_number> F7
or
<Q_number> 00 <Qlist> F7

Controlled Devices should be able to accept more than one set of delimiter bytes, including directly before F7H, and even if no Q_number, Q_list or Q_path data are sent. Data are always terminated by F7H.
Q_number, Q_list and Q_path are expressed as ASCII numbers 0-9 (encoded as 30H-39H) with the ASCII decimal point character (2EH) used to delineate subsections. In the example above, cue 235.6 list 36.6 path 59 would be represented by the hex data:

32 33 35 2E 36 00 33 36 2E 36 00 35 39 F7

Decimal points should be separated by at least one digit, but Controlled Devices should accommodate the error of sending two or more decimal points together. Any number of decimal point delineated subsections may be used and any number of digits may be used in each subsection except that the length of the data must not cause the total length of the MIDI Show Control message to exceed 128 bytes.
Controlled Devices which do not support Q_list and (or Q_path) data must detect the 00H byte immediately after the Q_number (or Q_list) data and then discard all data until F7H is detected. Likewise, Controlled Devices which do not support the received number of decimal point delineated subsections, the received number of digits in a subsection or the total number of received characters in any field must handle the data received in a predictable and logical manner.
Controlled Devices which support Q_list and/or Q_path will normally default to the current or base Q_list and Q_path if these fields are not sent with Q_number.
For lighting applications, Q_list optionally defines the Playback or Submaster Controls (0 to 127) with which the cue corresponds.
It is highly recommended that every manufacturer publish a clear and concise description of their equipment's response to the above conditions.

Time Code Numbers

Since data often contain some form of time reference, a "Standard" specification for transmission of time provides consistency and saves space in the data descriptions.
MIDI Show Control time code and user bit specifications are entirely consistent with the formats used by MIDI Time Code and MIDI Cueing and are identical to the Standard Time Code format proposed in MIDI Machine Control 0.05. Some extra flags have been added, but are defined such that if used in the MIDI Time Code/Cueing environment they would always be reset to zero, and so are completely transparent.

Standard Time Code (types {ff} and {st})

This is the "full" form of the Time Code specification, and always contains exactly 5 bytes of data.
Two forms of Time Code subframe data are defined:

hr mn sc fr (ff/st)
hr = Hours and type: 0 tt hhhhh
tt = time type (bit format):
00 = 24 frame
01 = 25 frame
10 = 30 drop frame
11 = 30 frame
hhhhh = hours (0-23, encoded as 00H-17H)
mn = Minutes: 0 c mmmmmm
c = color frame bit (copied from bit in time code stream):
0 = non color frame
1 = color framed code
mmmmmm = minutes (0-59, encoded as 00H-3BH)
sc = Seconds: 0 k ssssss
k = reserved - must be set to zero
ssssss =seconds (0-59, encoded as 00H-3BH)
fr = Frames, byte 5 ident and sign: 0 g i fffff
g = sign bit:
0 = positive
1 = negative (where signed time code is permitted)
i = final byte identiification bit:
0 = subframes
1 = status
fffff = frames (0-29, encoded as 00H-1DH)
IF final byte bit = subframes (i = 0):
ff = fractional frames: 0 bbbbbbb (0-99, encoded as 00H-63H)
IF final byte bit = status (i = 1):
st = code status bit map: 0 e v d xxxx
e = estimated code flag bit:
0 = normal time code
1 = tach or control track updated code
v = invalid code bit (ignore if e = 1):
0 = valid
1 = invalid (error or not current)
d = video field identification bit:
0 = no field information in this frame
1 = first frame in 4 or 8 field video sequence
xxxx = reserved bits - must be set to 0000

Drop Frame Notes

To convert from drop-frame to non-drop-frame, subtract the number of frames that have been "dropped" since the reference point 00:00:00:00. For example, to convert the drop-frame number 00:22:00:02 to non-drop-frame, subtract 40 frames, giving 00:21:58:22. The number 40 is produced by the fact that 2 frames were "dropped" at each of the minute marks 01 through 09, 11 through 19, 21 and 22. (Some manufacturers will prefer to store all internal time codes as a simple quantity of frames from reference point 00:00:00:00. This reduces calculation complexity, but does require that conversions are performed at all input or output stages.)


[Index | Main Paragraph | Previous Paragraph | Next Paragraph ]