Skip to content

Timecode Sync ​

Exaplay 3 can chase external timecode from lighting consoles, audio systems and show-control systems — and it can also act as a timecode master that sends LTC and OSC out to drive other equipment.

How close it holds

A slaved composition is chased, not hard-locked frame by frame: while the difference to the incoming timecode stays under the composition's Chase Threshold (0.1 s by default) the playhead is slewed gently towards it, and it is seeked only when the difference is larger. Tighten the threshold for a closer follow, at the cost of more seeks; see Chase Settings.

Supported Sync Sources ​

SourceProtocolTypical Use
LTCAudio signalTraditional linear timecode on tape or audio output
OSCUDP/IPSoftware timecode, custom show control
MTCMIDIHardware MIDI controllers, legacy DAW integration
Art-NetUDP/IP (OpTimeCode)Lighting consoles and media servers that emit Art-Net timecode

ArtNet DMX — output from Data Tracks, and input from a lighting console over Art-Net or sACN — is a separate feature, see ArtNet & DMX.

Timecode Modes ​

The global mode is set in Menu → Settings → Timecode → Timecode Mode:

ModeDirectionBehaviour
Disabled—Exaplay drives its own clock; no external TC is consumed or emitted.
OSC Timecode (slave)ReceiveLocks to OSC timecode received on the configured listen port.
LTC (slave)ReceiveDecodes LTC from an audio input channel.
MTC (slave)ReceiveLocks to MIDI Timecode from a Windows MIDI device.
Art-Net Timecode (slave)ReceiveLocks to Art-Net OpTimeCode packets received on the Art-Net input port (UDP 6454).
Master (send TC)SendA chosen composition becomes the timecode source. Exaplay broadcasts that timecode as OSC and/or LTC to other equipment.

Changing the mode shows the relevant settings group below it. Save applies every setting on this tab at once — the receiver is restarted with the new device, channel or mode. Apply & Restart Timecode saves and restarts the receiver without changing anything, which is what to press after an audio or MIDI interface was unplugged and plugged back in.

Framerate & Global Offset ​

These two settings apply in every mode:

  • Framerate — 24, 25, 29.97 DF, or 30 fps. Must match the timecode framerate of your sync source (or, in Master mode, the rate you want to send).
  • Global Offset — seconds (positive or negative) added to the timecode value before it is consumed (slave modes) or sent (master mode). Use this to slip Exaplay against an external source.

Receive: ArtNet Timecode ​

  1. Open Menu → Settings → Timecode, set Timecode Mode to Art-Net Timecode (slave) and Save.
  2. Point the console's Art-Net timecode output at this machine (broadcast or unicast) on UDP 6454 — the port is the Art-Net Port under Settings → Communication, and this mode opens the socket by itself. The Art-Net Input switch there is the separate DMX input (a console driving playback); it does not need to be on for timecode.
  3. The frame rate comes from each packet's own type code (24 / 25 / 29.97 DF / 30); Global Offset is applied like in every other slave mode.

The Monitor's artnet:timecode events show what arrives (ltc:audio and mtc:midi are the same readback for the other two receivers). In any other Timecode Mode, incoming Art-Net timecode is shown as status only and never moves a composition — a desk that emits TC next to its DMX cannot drive a show by accident.

Receive: LTC ​

  1. Connect the LTC source to an audio input on your audio interface.
  2. Open Menu → Settings → Timecode, set Timecode Mode to LTC (slave).
  3. Pick the Input Channel (ASIO devices list named channels; the PortAudio path shows numbered channels).
  4. On the PortAudio path, choose the Sample Rate that matches the audio input (44.1 / 48 / 96 kHz). With ASIO the decoder hears the device at the engine's own rate, so the tab shows that rate instead of a selector — the LTC framerate is derived from it, which is why it has to be the real one.
  5. Save. The decoder follows the composition's Timecode Sync settings from there; see Chase Settings.

Receive: OSC Timecode ​

  1. Open Menu → Settings → Timecode, set Timecode Mode to OSC Timecode (slave).
  2. Adjust OSC Address if your sender uses something other than the default /timecode.
  3. The OSC listen port is configured globally under Menu → Settings → Communication → OSC.

Receive: MTC ​

  1. Connect a MIDI interface that emits MTC.
  2. Open Menu → Settings → Timecode, set Timecode Mode to MTC (slave).
  3. Pick the MIDI Input Device from the drop-down and Save.

MTC quarter-frame messages name the time at the START of their eight-message sequence, which is complete two frames later; Exaplay adds those two frames, so an MTC slave sits on the sender's frame rather than 80 ms (at 25 fps) behind it. A full-frame message (sent on locate) is taken as it is.

Chase Settings (slave modes) ​

When a slave mode is active, the Chase Settings group controls how the playhead follows external TC:

SettingWhat it does
Smoothing0 = hard follow, 1 = heavy averaging. Higher values mask jitter at the cost of latency.
Freewheel TimeIf the TC signal disappears, keep running on the local clock for this many seconds before stopping.

The jump threshold — how far incoming TC may differ from the local clock before Exaplay seeks instead of smoothing — is a per-composition setting: select the composition and set Timecode Sync → Chase Threshold in the Inspector (default 0.1 s). A stopped slave with Auto-play on TC off is re-seeked every time the incoming time drifts past it, so a larger threshold there means fewer seeks.


Send: Master Timecode Mode ​

In Master mode Exaplay generates timecode from a chosen composition and transmits it to other equipment. This lets Exaplay act as the show's timecode source — useful when you want a media composition to drive lighting, audio, or other media servers.

Setup ​

  1. Open Menu → Settings → Timecode, set Timecode Mode to Master (send TC).
  2. Master Composition — pick the composition whose playhead drives the outgoing timecode. The composition's transport (play/pause/seek) is what listeners follow.
  3. Set Framerate to the rate you want to send (24 / 25 / 29.97 DF / 30). Note that 29.97 DF is reported on the wire as 30.
  4. Set Global Offset if you need the outgoing timecode to lead or trail the composition (for cueing other devices early).
  5. Enable one or both of:
    • OSC Timecode Out — sends a tightly-paced OSC bundle to all OSC clients configured under Communication → OSC Clients.
    • LTC Timecode Out — encodes LTC onto an audio output channel.
  6. Save to commit and start the broadcaster.

OSC Output ​

When OSC Timecode Out is enabled, every tick sends an OSC bundle to the configured OSC Address (default /timecode) carrying three arguments:

TypeValue
float32Master composition time in seconds (including the Global Offset).
int32Framerate as 24, 25, or 30 (29.97 DF reports as 30).
stringWall-clock timecode formatted as HH:MM:SS:FF.

The bundle is sent to every client listed in Communication → OSC Clients — there is no per-client toggle, so the same timecode reaches all of them. To deliver to a single target only, leave just that one client enabled.

LTC Output ​

When LTC Timecode Out is enabled, Exaplay encodes LTC onto a chosen audio output channel:

  • LTC Output Channel — when the engine runs on ASIO, this is a named channel of the active ASIO device. On PortAudio, it is a numbered channel of the selected device.
  • LTC Output Device (PortAudio only) — pick the output device. Default Output Device follows the Windows default.
  • The encoder automatically tracks the engine's audio sample rate, so changing the audio rate at runtime restarts the encoder at the new rate (no pitch shift on the LTC carrier).

Wire the right channel to your destination

LTC is a square-wave audio signal — route the chosen channel to a balanced output and feed it into the LTC input of the receiving device. Mixing LTC into a program-audio bus will produce audible noise.

Master + Slave at the same machine ​

Master mode is mutually exclusive with the slave modes — Exaplay is either consuming external timecode or generating its own, not both. To have Exaplay's master TC drive a second Exaplay instance as a slave, point the second instance's OSC or LTC receiver at the first.


Testing IN and OUT ​

The Monitor tab has a Timecode panel that reads all of the above back live: the active receiver's last timecode, receiving / locked and the age of the last frame; every slaved composition's playhead, the value it is chasing, the error in milliseconds and whether it is locked, chasing or stale; and in Master mode the outgoing timecode with every OSC target and the LTC encoder state. Its test generator runs a continuous timecode into the slaved compositions from any start value, so the slave side can be proven before the real source is on site. See Monitor › Timecode IN / OUT.


Sending Timecode (legacy OSC-out for slave modes) ​

Even when running in a slave mode, Exaplay can be configured to forward the locked timecode as OSC:

  1. Open Menu → Settings → Communication → OSC Clients.
  2. Add the destination IP, port, and OSC address.

Slave-mode forwarding does not include the framerate or formatted-string fields used by Master mode — only the seconds value at the configured address.


Frame Rate ​

Set the project frame rate in Menu → Settings → Timecode → Framerate. This must match the timecode frame rate of your sync source (slave modes) or your downstream consumers (master mode).

Exaplay 3 User Documentation