← all articles

Light in time with the music: tap, MIDI Clock and the DJ problem

Three ways to keep the lighting in tempo, how they differ, how to send MIDI Clock on one machine and between two, and what to do when the source only speaks Ableton Link.

The task sounds simple: the chase should run in tempo, the strobe should hit the beat. In practice these are three different mechanisms with different costs, and confusing them is expensive.

Three ways, and they are not interchangeable

Tap. The TAP button in the header: three or four taps in time and the tempo is set. Always works, needs nothing and depends on nothing. Its weak spot is obvious: the tempo stays exactly where you left it. A steady track it holds all the way through; a live drummer will drift within a verse.

MIDI Beat Clock. The music source sends 24 ticks per quarter note, the console derives the tempo from them and follows continuously. This is what you want at a club night and on any set where the tempo moves.

Timecode. MTC or Art-Net timecode is not about tempo at all — it is about position: a tightly scripted show where a specific cue belongs at 2:14. That has its own article.

The rest of this one is about the second, because that is where the questions are.

Turning it on here

Settings → MIDI, the checkbox "Follow MIDI Clock tempo". Next to it there is a readout: MIDI Clock: 128.0 BPM when the source is alive, and "No MIDI Clock coming in" when it is not.

The readout always works, the following only with the checkbox, and that is deliberate. Half the synths and drum machines free-run a clock, and following it by default would mean that for some people the tempo lives its own life unasked. First check that the readout appears, then switch following on.

While the clock leads, the BPM field and the TAP button are disabled — with a tooltip explaining why. That is deliberate too: tapping against a live clock would snap back to the source's tempo within a beat, and that reads as a malfunction rather than "the source is in charge".

Turning it on at the source

Clock output is almost always off by default and lives in the sync settings: in a DAW it is usually "MIDI Clock Send" to a specific port, in DJ software it is the Sync or Link/MIDI section. If you cannot find that switch, there is no point looking for the fault in the console: without it nothing goes down the wire at all.

Wiring it up

One machine. You need a virtual MIDI port: the source writes into it, the console reads from it.

  • macOS: the built-in IAC Driver (Audio MIDI Setup → MIDI Studio window), enable the device and select it as the port in both programs.
  • Windows: the system has no virtual port of its own, so a third-party free utility is installed (the best known is loopMIDI).
  • Linux: ALSA provides virtual ports out of the box.

Two machines. Three options, from simplest to most proper:

  • A MIDI cable through any USB-MIDI interface. Boring, but it works with zero configuration and does not depend on the network.
  • Network MIDI. On macOS it is built in (MIDI Network Session in the same Audio MIDI Setup), on Windows you need third-party rtpMIDI. It runs over the same network as Art-Net — no extra cable.
  • A bridge from Ableton Link, if the source only speaks that: Link drives a bridge program and the bridge sends MIDI Clock. Usually the DAW already installed on the machine plays that role.

Ableton Link: plainly

We do not support it. The reason is not difficulty: the Link library is dual-licensed — open GPL or proprietary by agreement with Ableton — and the first option is incompatible with ours. On top of that it is a native module for three platforms.

What that means for you in practice: where a DJ runs Link over Wi-Fi from their own laptop, we need a bridge into MIDI Clock. One extra program in the chain. Everything else — tempo, following, phase — works the same.

Diagnosis: where the chain breaks

Look at the readout in the MIDI settings; it splits the problem in two.

No readout. Nothing is reaching the console:

  1. Clock output is not enabled at the source (by far the most common).
  2. The wrong port is selected — a system usually has several virtual ports.
  3. The port is held by another program. Windows hands out a MIDI port exclusively: while the DAW holds it, the second program will not get it.

Readout is there, the light is not in tempo. Check the effect: only those whose period is set in beats, not in seconds, follow the tempo. That is the toggle next to the period field.

The tempo is double or half. Clock is always 24 ticks per quarter, there is nothing to lie about there — but the source may well be counting in a different subdivision. This is not fixed by a setting: set the effect's period to 2 or 0.5 beats.

The tempo jitters. One lost tick we survive (tempo is computed from the median of intervals rather than the mean — otherwise a single loss would move it by five percent). Systematic jitter can only be cured at the source: a loaded CPU and a chain of USB hubs produce exactly that.

Two sources at once. The one that speaks first takes the lead; the others stay silent while it is alive. Otherwise the intervals of two devices would mix and the tempo would swing by a factor of two.

Phase: why the light is in tempo but off the beat

Tempo and beat are different things. The stream of ticks gives you the tempo; where exactly "one" is, only the Start message tells you, and the source sends it when playback begins from the top.

So: connect mid-track and you get the correct tempo, but the console cannot guess the phase. Restart the track from the beginning (or hit stop-start at the source) and effects with a period in beats will land on the start of a beat.

Pulling the phase on every beat is something we deliberately did not do: the tempo estimate always carries an error, and constant correction would show up as stutter on slow effects — a cure worse than the disease.

What to check at the venue

  • Unplug the cable and watch. The readout goes dark after a couple of seconds while the tempo stays at its last value — the light neither freezes nor runs away. That is deliberate: mid-number, being a couple of percent off beats coming to a halt.
  • Test on a real track, not a metronome. A metronome is steady, a live set is not; the transitions are where you see whether the source keeps up.
  • Decide in advance what leads. If the clock leads, the BPM field is disabled — that should not come as a discovery a minute before the show.

Read next