Appearance
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
| Source | Protocol | Typical Use |
|---|---|---|
| LTC | Audio signal | Traditional linear timecode on tape or audio output |
| OSC | UDP/IP | Software timecode, custom show control |
| MTC | MIDI | Hardware MIDI controllers, legacy DAW integration |
| Art-Net | UDP/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:
| Mode | Direction | Behaviour |
|---|---|---|
| Disabled | — | Exaplay drives its own clock; no external TC is consumed or emitted. |
| OSC Timecode (slave) | Receive | Locks to OSC timecode received on the configured listen port. |
| LTC (slave) | Receive | Decodes LTC from an audio input channel. |
| MTC (slave) | Receive | Locks to MIDI Timecode from a Windows MIDI device. |
| Art-Net Timecode (slave) | Receive | Locks to Art-Net OpTimeCode packets received on the Art-Net input port (UDP 6454). |
| Master (send TC) | Send | A 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, or30 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
- Open Menu → Settings → Timecode, set Timecode Mode to Art-Net Timecode (slave) and Save.
- 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. - 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
- Connect the LTC source to an audio input on your audio interface.
- Open Menu → Settings → Timecode, set Timecode Mode to LTC (slave).
- Pick the Input Channel (ASIO devices list named channels; the PortAudio path shows numbered channels).
- 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.
- Save. The decoder follows the composition's Timecode Sync settings from there; see Chase Settings.
Receive: OSC Timecode
- Open Menu → Settings → Timecode, set Timecode Mode to OSC Timecode (slave).
- Adjust OSC Address if your sender uses something other than the default
/timecode. - The OSC listen port is configured globally under Menu → Settings → Communication → OSC.
Receive: MTC
- Connect a MIDI interface that emits MTC.
- Open Menu → Settings → Timecode, set Timecode Mode to MTC (slave).
- 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:
| Setting | What it does |
|---|---|
| Smoothing | 0 = hard follow, 1 = heavy averaging. Higher values mask jitter at the cost of latency. |
| Freewheel Time | If 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
- Open Menu → Settings → Timecode, set Timecode Mode to Master (send TC).
- Master Composition — pick the composition whose playhead drives the outgoing timecode. The composition's transport (play/pause/seek) is what listeners follow.
- Set Framerate to the rate you want to send (
24/25/29.97 DF/30). Note that29.97 DFis reported on the wire as30. - Set Global Offset if you need the outgoing timecode to lead or trail the composition (for cueing other devices early).
- 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.
- 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:
| Type | Value |
|---|---|
float32 | Master composition time in seconds (including the Global Offset). |
int32 | Framerate as 24, 25, or 30 (29.97 DF reports as 30). |
string | Wall-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 Devicefollows 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:
- Open Menu → Settings → Communication → OSC Clients.
- 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).
