Mate-tracTM Signal

Compiled by Adrian McCarthy
3-FEB-2002 Updated: 1-DEC-2004


Mate-trac is a synchronization signal for controlling slide shows. It was developed by Arion Corporation. Nearly all Arion show control products use it. Additionaly, Arion manufactures dissolve units for Kodak and 3M, and those products also use the Mate-trac signal.

Mate-trac can control up to 16 projectors by daisy-chaining eight two-projector dissolve units.

Mate-trac can also control up to 12 "auxiliary relays." Auxiliary relays can be used to trigger effects. Relays are generally grouped in a device that can decode the Mate-trac signal, such as the Arion AUX Control Module.

TODO: I believe Mate-trac can be used to control certain videodisc players. The Pro Sixteen manual makes reference to a supplemental manual for videodisc control. The Hawk manual has no reference to it. Holes in this specification may be related to videodisc control. Arion also made a light dimmer controller, but I'm not sure if it worked with Mate-trac.

Mate-trac is similar in functionality to Procall, a competing protocol developed by Audio Visual Laboratories. AVL is no longer in business, and I have found no information on Procall. There are other more advanced show control signals and protocols used in theaters, theme-park attractions, planetariums, etc. These include DMX and SPICE.

I have not found any patents that have been issued to Arion for Mate-trac or any other technology, so reverse engineering seems fair game.

Wings, a show control programming package, is capable of producing a Mate-trac signal. Wings is available from the German company Stumpfl. In an email exchange with Arion, an Arion said that Wings is not authorized by Arion, but that litigating against them would be prohibitively expensive because Wings doesn't support every nuance of Mate-trac and because Stumpfl is based in Germany.

Arion claims "Mate-trac" as a trademark, but they allowed the registered status of that trademark to expire in 1991. Arion is inconsistent in capitalization, calling it both "Mate-trac" and "Mate-Trac". I've chosen to use Mate-trac in this document.

I've learned this information from general observations about behavior of Arion products while programming shows, by experimenting with an Arion Hawk Presentation programmer (Model 816A, Version 2.56 (3257)) as discussed later in this section, and reading the following manuals:

None of the Arion documentation has any legal claims or discussion of license rights. Only the final version of the Hawk manual has a copyright notice.

With one exception, I did not open the case of any of the devices to examine circuitry. The exception was that I did once open my AUX Control module in order to get the part number from the relays. That was part of another project, and my goal was to find more information about the rating of the relay. In no instance, did I inspect or decompile software or firmware stored inside any of the Arion devices.

I did perform controlled experiments by entering simple programs and commands into the Hawk through its user interface and by analyzing the output signals from the "TIME CODE OUT" and "MATE-TRAC OUT" jacks.

The Hawk can produce a SMPTE time code signal as well as Mate-trac. Since SMPTE encoding information was readily available on the Internet, I tested my processes with that first. I recorded audio signals with MS Windows Sound Recorder at 22kHz, 8-bit mono. I viewed the raw waveform using CakeWalk Home Studio, and I wrote software to decode the .WAV file into bit and byte streams. My software was successful in finding the SMPTE bitstream in the WAV signal. Encouraged, I inspected the wave form of a Mate-trac recording and saw that there were substantially similar, so I started to analyze bit patterns from Mate-trac sequences which I recorded and decoded using the same software that read the SMPTE bitstream.

Since this information is derived from experimentation, I've named things, like commands, as I saw fit. My names may not match what Arion calls them.

It appears Arion may be heading out of business. Their web site ( lists Music2 as the company name on their business address. Kodak ceased production of Carousel, Ektagraphic, and Ektapro slide projectors in Novemeber 2004.


Projectors are designated by a letter (A, B, C, or D) and a number (1, 2, 3, or 4). Each dissolve unit has a way to select its address, typically by setting a letter switch and a toggle switch to select 1&2 or 3&4.

Slide projector light bulbs are called lamps. Lamps can be on or off. On most projectors, it's possible to vary the intensity of the lamp from completely off to full brightness.

A slide projector holds a collection of slide images in a tray. The projector can move foward to the next slide in the tray, or backward to the previous one. The two most common types of slide trays hold up to 80 or 140 slides. A tray position is thus an integer from 1 to 80 or 1 to 140. Note that both types of trays also have a "slot zero", but it's difficult to keep a slide in that slot, so it generally goes unused. If you step forward from the highest numbered slot in the tray, then you come back around to slot zero.

Stepping a tray forward or backward typically takes 1.5 seconds. Older projectors may take even longer. Thus show programmers have to be careful not to try to bring up the lamp while a projector is still "cycling".

A dissolve unit controls one or more slide projectors by taking control of the tray stepping mechanism and the lamp brightness. Some newer projectors have dissolve units built into them.

A "fade" is the smooth ramping of a projector's lamp. To "fade on" (or "fade up"), the lamp is ramped from complete darkness up to full brightness. To fade off (or "fade down") means to do the opposite.

A "dissolve", (or "cross-fade") means to fade up one projector while simultaneously fading down another. Thus one image "dissolves" into the other.

"Fade to level" means to ramp the lamp up to a certain brightness which is typically less than its full brightness. This is often used when superimposing one image over another.

"Fade rate" (or "fade time") is the amount of time a given fade takes. For example a fade up with a one-second rate means the lamp intensity will go from 0 to full brightness in a one-second period.

A "cut" is a nearly-instantaneous change from one image to the next by doing a cross fade with a fade rate of zero.

A dissolve unit can repeatedly flash a lamp on and off. This is called a "flash". Dissolve units usually have parameters for the flash, such as how long to keep the lamps on and off. By adjusting these parameters and the phase between different flash cycles, you can achieve an "animation loop."

"Alternate" is an unecessary term, but it often shows up in this context. An alternate is a cut without advancing the tray of the projector that just when dark.


The Mate-trac digital signal is modulated into an audio signal using bi-phase mark (BPM) encoding, just like a linear SMPTE code is. BPM is a simple form of frequency modulation. Bits are sent at a constant rate, with a zero bit represented by one transition from high to low or low to high, and a one by by two transitions. I managed to extract the bitstream at 2400 baud (just like SMPTE), even though the Mate-trac wave form appeared to be closer to 2005 baud. My software is pretty tolerant with regard to rate, relying on the signal itself for most of the clock information.

The signal is one way: it travels from the source (a programming unit or a pre-recorded audio track) down a daisy-chain of one or more devices. Devices down the chain cannot talk back or to each other.

Unlike SMPTE, Mate-trac signals appear to repeat each bit. Either this is for backward compatibility with lower-speed devices, or it's a crude form of redundancy for error-detection and correction. (Or perhaps they had to boost the frequency to have it record well on older audio equipment.) (Or perhaps this is a perfectly normal form of BPM.) The rest of this document will ignore the extra copies of each bit.

Bits are assembled into eight-bit bytes with a 0 start bit and a 1 stop bit. Bits are transmitted from least to most significant.


There seem to be three variants of the protocol. The Hawk can produce any of them.

  1. Standard. Arion dissolve units built before approximately 1990 were usually limited to a fixed set of fade rates, typically 0 (cut), 1/2, 1, 2, 4, and 8 seconds. Standard Mate-trac is geared toward this limited set of fade rates.
  2. SPC. Arion made a Single Projector Controller. The major difference between SPC and Standard appears to be finer control over dissolve rates and support for 100 levels for "fade to level" commands. Modern dissolve units typically support fade times from 0.0 to 9.9 in tenth of a second increments, and times from 10 to 100 in two second increments. Even in SPC mode, the programmer seems to send the older fade times in a way that older devices would still recognize them.
  3. +Shutter. This appears to be an extension to support certain models of Kodak projector with an externally controllable shutter. This model may have been (or may still be) common in planetariums.

TODO: Double check that the protocol switch doesn't do anything to the low-level signal or bitstream.

Each Mate-Trac message starts with one FF byte and is followed by four bytes. That works out to 20 messages per second, which is the timing precision Arion claims for its current products.

Although the messages are organized into 8-bit bytes, much of the protocol seems to be geared toward 4-bit nibbles. Perhaps early implementations of Mate-trac hardware used 4-bit microprocessors.

The high nibble of the first byte of each message determines the type of message.

1Fade Lamps
2Fade Lamps, Advance
3Fade to Level
4Start Flash
5Stop Flash
7Preload Lamp Level
9Lamp Status
DFlash Status
ETray/Level Status
FPreload Fade Rate/Auxiliary

Messages fall into two categories: commands and status. Commands are sent when a device is supposed to do something (like fading a lamp). When commands are not being sent, the signal contains repetitious status messages that remind the devices of their current states. The status messages serve two purposes: (1) keeping devices in sync even if the signal is temporarily lost or garbled, (2) facilitating random access into a show.

The last message, Preload Fade Rate/Auxiliary, is both a command message and a status message. Details are in the description of that message.

Command Messages

Commands may be sent at any time. They may even interrupt a status message. Presumably the interrupted message is simply ignored. Note that the Preload Fade Rate message is often essential and thus must not be interrupted.

Often, commands are sent three times in a row. This appears to be a form of redundancy for error tolerance. Sometimes, however, the command is sent only once. I have not found a definitive pattern. Note that devices must be prepared for rapid copies of the command. For example, if the programmer sends the command to start a one-second dissolve three times and the target device successfully recognizes the first one, then it must realize that repeated commands are duplicates. There is no clock information in the commands.

Status Messages

Status messages are sent any time a command is not being sent. The same messages are sent repeatedly, apparently in a fixed sequence. When the status messages are interrupted by a command, the sequence starts again with the beginning of the sequence.

The sequence is:

  1. 7 - Preload Lamp Level (omitted if program doesn't use Fade to Level)
  2. F - Preload Fade Rate/Auxiliary
  3. 9 - Lamp Status
  4. B - ?
  5. D - Flash Status
  6. E - Level Status (only sent for projectors executing a Fade to Level)
  7. E - Tray Status (projectors A1 and A2)

Message Conventions

Several messages share conventions for representing similar information such as fade rates and specifying subsets of projectors. Rather than repeat the description with each relevant message, these common conventions are described in this section.

Fade Rates

Early dissolve units had a limited set of fade rates. The protocol originally supported this small set directly. As dissolve units expanded their repertoire of dissolve rates, the protocol was extended but backward compatibility was maintained. As a result, there are many ways to encode a fade rate.

All of the fade commands have a Selector nibble. This nibble is used to determine the fade rate, either directly, or as an index into a larger fade rate table.

The following table shows how the classic fade rates are encoded directly into the Selector. Note that even newer dissolve units understand these older rates. For maximum compatibility, signal sources should use the classic encoding for these rates, even when there is a more modern way to encode the rate. Some cheaper dissolve units have a limited set of fade times you can enter through the front panel, but many of these can still support the full range of fade times supported by Mate-trac.

Classic Fade Rates
Rate (seconds)Selector
0 (cut)9

To encode a wider range of dissolve units, extra bytes were needed. Thus the Preload Fade Rates/Auxiliary message can be used to preload a fade rate before the actual fade command. To indicate that the preloaded value should be used, the Selector in the fade command should be D.

For fade times from 0.1 to 9.9 seconds, use the Code specified in the High Resolution Fade Rates table in the Preload Fade Rate message. Note that the high bit of Code is probably a signal to distinguish these fine resolution fade times from the longer fade times discussed further down.

For fade rates of 10 to 100 seconds, use the Longer Fade Rates table to determine the Code for the Preload Fade Rate command. Arion documentation says only even numbers are supported with SPC for longer fade rates, but the Hawk allows you to enter odd numbers and produces seemingly rational codes. Note that it is nearly linear.

High Resolution Fade Rates
Rate (s)Code (hex)Rate (s)Code (hex)Rate (s)Code (hex)
Longer Fade Rates
Rate (s)Code (hex)Rate (s)Code (hex)
5514C ?98hhh

TODO: Complete the above table and double check the code for 55 seconds.

TODO: Figure out if you can specify an arbitrary level even though the programmers only have the fixed list.

Fade Level

Fade to Level commands set lamps to a specified brightness other than fully on or fully off. These levels are specified as a percentage of full brightness from 1 to 99%. When encoded, the percetage is doubled and the result is stored in a byte. A percentage of 100% is specified as 0. There may be differences here between Standard and SPC.

Projector Bitmask

The lower nibbles of each byte form a bitmask with one bit for each projector. The first low nibble is for the A projectors, the second is for the B projectors, etc. Within a nibble, the least significant bit corresponds to projector 1, and the most significant bit corresponds to projector 4.

In fade commands, a 1 means that the projector lamp should turn on or remain on, and a 0 means that the projector lamp should turn off or remain off. In tray commands, the bitmask selects which projectors are to be affected.

Relay Bitmask

Up to 12 auxiliary relays may be controlled by Mate-trac along with projectors. A relay bitmask is like a projector bitmask, except that there are only three relays per nibble instead of four. Thus the relays are designated A1, A2, A3, B1, B2, B3, C1, C2, C3, D1, D2, and D3.

It is possible to control more relays via Mate-trac. Each Arion AUX control has four relays. In standard mode, relay 4 triggers at the same time as relay 3. The AUX device also has an extended mode that responds to lamp commands instead of auxiliary commands. Thus if you aren't using a bank of projectors, you can use those projector slots as four independent relays. A show with no projectors can have up to 16 relays (in extended mode) in addition to the normal 12 relays.

Message Reference

1 Fade Lamps

The lower nibbles of all four bytes form a projector bitmask as described earlier. The Selector nibble is used to decode the fade rate, which is also discussed earlier.

Byte 0 Command A4 A3 A2 A1
Byte 1 ???? B4 B3 B2 B1
Byte 2 Selector C4 C3 C2 C1
Byte 3 ???? D4 D3 D2 D1
Command is 1. Selector selects the fade rate as described in the Fade Rate conventions above.

2 Fade Lamps, Advance

This command is just like Fade Lamps above, except that when a lamp fades to zero, that projector's tray will also advance.

The lower nibbles of all four bytes form a projector bitmask as described earlier. The Selector nibble is used to decode the fade rate, which is also discussed earlier.

Byte 0 Command A4 A3 A2 A1
Byte 1 ???? B4 B3 B2 B1
Byte 2 Selector C4 C3 C2 C1
Byte 3 ???? D4 D3 D2 D1
Command is 2. Selector selects the fade rate as described in the Fade Rate conventions above.

3 Fade to Level

This message fades projector lamps to an intermediate intensity. The intensity is determined by the most recent Preload Lamp Level command. The rate of the fade is determined by the selector.

I believe the fade rate is as though the fade were over the full range. Thus a one second fade to 50% only takes half of a second.

Byte 0 Command A4 A3 A2 A1
Byte 1 ???? B4 B3 B2 B1
Byte 2 Selector C4 C3 C2 C1
Byte 3 ???? D4 D3 D2 D1
Command is 3. Selector determines the fade rate as described above.

4 Start Flash

This command tells the dissolve units to begin flashing the specified lamps. This is often combined with a long fade which acts as an envelope limiting the illuminated intensity. The flash is to repeat indefinitely until stopped.

A flash rate is set in terms of two times, the on time and the off time. These times are in tenths of a second. The on time is the high nibble of the second byte. The off time is the high nibble of the third byte.

The lower nibbles of the command are a projector lamp bitmask indicating which lamps should be flashing.

Byte 0 Command A4 A3 A2 A1
Byte 1 On Time B4 B3 B2 B1
Byte 2 Off Time C4 C3 C2 C1
Byte 3 ???? D4 D3 D2 D1
Command is 4. On Time is how long the lamp should be on for each flash, from 1 to 9 tenths of a second. Off Time is how long the lamp should be off for each flash, also from 1 to 9.

5 Stop Flash

This command cancels a previous Start Flash command.

The high nibbles of the second and third bytes re-iterate the on and off times of the lamps. This seems unecessary, except, perhaps to a sequencer that must back up during editing.

The lower nibbles of the command are a projector lamp bitmask indicating which lamps should stop flashing. Programmers typically set the bits for all lamps that should not be flashing, regardless of whether that lamp was in a flashing state.

Byte 0 Command A4 A3 A2 A1
Byte 1 On Time B4 B3 B2 B1
Byte 2 Off Time C4 C3 C2 C1
Byte 3 ???? D4 D3 D2 D1
Command is 5. On Time is how long the lamp should be on for each flash, from 1 to 9 tenths of a second. Off time is how long the lamp should be off for each flash, also from 1 to 9.

7 Preload Lamp Level

This message tells the dissolve units the lamp level for the next Fade to Level message. The Hawk programmer doesn't send this message unless the program contains at least one Fade to Level message.

The desired lamp level is specified as a percentage, 1 - 99. The value 0 can also be used, but it's interpretted as 100% rather than 0. The percentage is doubled and stored as the high nibbles of the second and third bytes of the message.

Byte 0 Command ????
Byte 1 Level1 ????
Byte 2 Level0 ????
Byte 3 ???? ????
Command is 7. Level1 is the high nibble of the lamp level. Level0 is the low nibble. When combined, Level is twice the percentage.

8 Reverse

Moves the specified trays back one position. The lower nibbles are a projector bitmask of the trays that are affected.

Byte 0 Command A4 A3 A2 A1
Byte 1 ???? B4 B3 B2 B1
Byte 2 ???? C4 C3 C2 C1
Byte 3 ???? D4 D3 D2 D1
Command is 8.

9 Lamp Status

This message reiterates the state of each of the projector lamps. The lower nibble of each byte forms a projector bitmask as described above. When a bit is set, the corresponding lamp should be on, fading on, or flashing.

The high nibble of the third byte is the same as the Selector on the last 1 Fade Lamp or 2 Fade Lamp, Advance command.

Byte 0 Command A4 A3 A2 A1
Byte 1 ???? B4 B3 B2 B1
Byte 2 Selector C4 C3 C2 C1
Byte 3 ???? D4 D3 D2 D1
Command is 9. Selector re-iterates the most recent fade rate selector.

A Forward

Moves the specified trays forward one position. The lower nibbles are a projector bitmask of the trays that are affected. It seems this is a low-priority message. Missing it is not a big deal since the Tray Status message will eventually correct the situation.

Byte 0 Command A4 A3 A2 A1
Byte 1 ???? B4 B3 B2 B1
Byte 2 Selector C4 C3 C2 C1
Byte 3 ???? D4 D3 D2 D1
Command is A.

B ???

TODO: Crack this one. The Selector always seems to match the previous fade command. The lower nibbles may be a projector bitmask.

Byte 0 Command A4 A3 A2 A1
Byte 1 ???? B4 B3 B2 B1
Byte 2 Selector C4 C3 C2 C1
Byte 3 ???? D4 D3 D2 D1
Command is B.

D Flash Status

The lower nibbles of each byte are a projector lamp bitmask of the lamps that are not flashing. In other words, when a bit is 0, the corresponding lamp should be flashing.

Byte 0 Command A4 A3 A2 A1
Byte 1 ???? B4 B3 B2 B1
Byte 2 ???? C4 C3 C2 C1
Byte 3 ???? D4 D3 D2 D1
Command is D. This unknown nibbles seem to change when the different variants of the protocol are selected.

E Tray Status

These messages remind the devices which tray position each projector should be on. The lower nibble of the first byte indicates a pair of projectors. The second and third bytes are the current tray position. The first slot is slot 1. If the highest slot is 80, then slot 0 is represented as 81, not 0.

Byte 0 Command Pair
Byte 1 Tray Position 1
Byte 2 Tray Position 2
Byte 3 ????????
Command is E. Pair selects which pair of projectors this status message refers to (see table). Tray Positions are the current positions of the slide trays for the indicated projectors. A Tray Position of 1 is the first slide. Typically trays hold 80 slides (50 hex) or 140 (8C hex). The "slot zero" position is indicated by adding one to the maximum value. If you step forward from "slot zero", you return to 1.
2A1 & A2
3A3 & A4
4B1 & B2
5B3 & B4
6C1 & C2
7C3 & C4
0D1 & D2
1D3 & D4

E Level Status

These status messages reiterate the intermediate lamp level currently targetted for each projector given the prior Fade to Level commands. Typically, these are omitted when there are no fade-to-level commands in progress. The lower nibble of the first byte indicates a pair of projectors. The second and third bytes are the current lamp levels for those projectors.

Byte 0 Command Pair
Byte 1 Level 1
Byte 2 Level 2
Byte 3 ????????
Command is E. Pair selects indicates which pair of projectors this status message refers to (see table). Levels are the intermediate lamp level for the indicated projectors. Levels are twice the selected percentage brightness, except that 0 means 100%.
AA1 & A2
BA3 & A4
CB1 & B2
DB3 & B4
EC1 & C2
FC3 & C4
8D1 & D2
9D3 & D4

F Preload Fade Rate/Auxiliary

This message tells the devices the fade rate for the next Fade Lamp or Fade Lamp, Advance command. It also indicates the status of the auxiliary relays.

This message has multiple purposes. It's sent repeatedly like a status message, but it can also be used as a command to change an auxiliary relay. Unlike other status messages, a fade command should not interrupt this message since the fade rate must be pre-loaded before the actual fade. Every instance of the message has the next fade rate and the status of the auxiliary relays regardless of which reason prompted it.

Since the fade rate must be pre-loaded, it generally takes two messages to initiate a fade (unless the fade is the same rate as the previous fade). Thus consecutive fades with different rates must be separated by at least 0.10 seconds. Consecutive fades at the same rate only take one more message, so they may use the maximum speed of 0.05 seconds. This is consistent with a misworded statement in the glossary of the Arion Pro Sixteen Operating Manual.

Preloading Fade Rate

The fade rate is encoded as a 12-bit number that probably corresponds to a timer or stepping amount used by the dissolve unit. The high bit is set for the fine-resolution fade rates (0.1 to 9.9 seconds) and is cleared for the longer fade rates (10 - 100 seconds). At first glance, the encoded values seem to have a linear relationship with the fade rate. But that relationship does not hold up exactly, thus they have been tabulated in the Message Conventions section. The encoded value is passed as the high nibbles of the second, third, and fourth bytes of the message. See the Message Conventions section for details on preloading rates.

Auxiliary Relays

The low nibbles are a bitmask indicating the state of the auxiliary relays. (Auxiliary relays can be used to control effects in the show, such as strobe lights, smoke machines, etc.) Relays are labelled like projectors, except that there are only three per letter rather than four.

The high bits of the relay bitmasks may have a special meaning, but I haven't seen anything other than 0. The Hawk shows some weird things on the display if you try to select auxiliary A4 or D4. It may be a bug or an undocumented feature.

Byte 0 Command ? A3 A2 A1
Byte 1 Code2 ? B3 B2 B1
Byte 2 Code1 ? C3 C2 C1
Byte 3 Code0 ? D3 D2 D1
Command is F. Code2 is the high nibble of the next fade rate to be preloaded. Code1 and Code0 are the middle and low nibbles of the fade rate, respectively. The letter-number pairs form a bitmask of auxiliary relays. Note that there are only 12 relays in the bitmask, rather than the 16 in a projector relay.

Protocol Differences

TODO: This section will summarize the differences between Standard, SPC, and +Shutter.

Optimization Opportunities

TODO: Discuss some of the problems of always restarting status at the beginning and sending status for projectors not in use.