This is about synchronizing music, light and video in a club, festival or open-air scenario.

Symbiosis with the music

When we control lighting or visuals, we usually want this to happen in harmony with the music being played. This includes the type of effects, the hardness of the transitions and the tempo. For example, hard light transitions go well with techno and smoother chasers with Chicago house on vinyl. A lot of strobe can go well with drum ‘n’ bass, but less so with dub.
However, we almost always want the speed of the light changes to match the speed of the music. With most dance music, we achieve this by synchronizing the BPM of the music to the speed in the lighting console or visual software.

Tempo, BPM

The classic approach is to set the speed manually using a fader on the lighting console or to tap a button. How well this works depends on the operator’s experience, attention and sense of rhythm. Another approach is to determine the tempo of the music by analyzing the audio signal in real time. There is various software that attempts to approximate the speed of the music using an FFT, but in our experience the results are always worse than manual synchronization. In the future, the use of a neural network (People say AI) may improve the situation, but the fact that such software can only analyze the past audio signal remains, which means that beat changes can only be guessed at best.

Fortunately, digital DJs have the tempo and other track information analyzed in advance. A standard club setup consists of CDJs, so it makes sense to get the information from the Pioneer network.

Network and protocols

The CDJs synchronize with each other via an ethernet network, from which you also get information such as the tempo or the count times of the individual beats. Accordingly, the FoH network must also be connected to the network of the deck. It should be noted at this point that an Ethernet cable should be laid between the deck and FoH and that time-critical packets should not be synchronized via Wifi.

Network Setup with CDJs and light console

Pioneer calls the protocol between the CDJs PRO DJ LINK and offers the PRO DJ LINK Bridge software, which connects the internal network of the CDJs to an external network. For the external network, Pioneer provides the TCNet protocol. In principle, software that is to evaluate the BPM and Sync network packets can work in the PRO DJ LINK network as well as in the TCNet. However, Pioneer seems to want to establish TCNet as a standard, similar to Ableton Link.

Software

There are various commercial software packages that allow you to translate either PRO DJ LINK or TCNet into more widely used protocols such as Ableton Link, MTC or Artnet Timecode.
The following is an incomplete list of FoH software for your own research. We have not tested any of them and therefore cannot make a recommendation.

The sympathetic team Deep Symmetry is actively developing the open source software Beat Link Trigger, which obtains various parameters such as BPM, beat times, track names, phrases etc. from the CDJs’ network packages. As the name suggests, various triggers can be defined that execute a function when a certain event occurs. For example, a trigger can be defined that sends an OSC signal with the count time every time a new beat is reached.
The triggers are defined in the Clojure programming language, which means that Beat Link Trigger can be used very flexibly and almost all lighting consoles and VJ software can be addressed directly. However, working with Clojure requires familiarization and a rudimentary understanding of programming. The documentation already provides many examples for the integration of various tools.

Integration of grandMA3

For example, if you want to synchronize the Speed Master 1 of grandMA3 with the master tempo of the CDJs deck, you can define the following trigger.

First you have to define a Setup Expression that creates an OSC connection between Beat Link Trigger and grandMA3.

1
(swap! locals assoc :grandma (osc/osc-client "localhost" 8000))

At this point, you should also define the Shutdown Expression, which closes the port again after Beat Link Trigger has ended

1
(osc/osc-close (:grandma @locals))

The Beat Expression is executed every time the CDJ changes from one beat to the next. The following function sends the tempo to the Speed Master 1 object in grandMA3 every time the player changes to the first beat, i.e. at the beginning of each BAR. The conversion is necessary because the object is addressed via a scale of 0 - 100 by default, but a SpeedMaster in grandMA3 (up to version 1.9) has a non-linear range of 0 - 240.

1
2
3
(when (and trigger-output (= 1 beat-within-bar))
(osc/osc-send (:grandma @locals) "/13.12.3.1" "FaderMaster" (int 1) ((Math/sqrt (effective-tempo / 240)) * 100))
)

After you have activated the OSC input in grandMA3, the CDJs should synchronize with the Speed Master 1. When creating phasers in grandMA3, the Measure parameter should be a multiple of 2 so that the chasers actually change at the same speed as the music.

Beat sync

So far, we have achieved that the speed of the chaser in the lighting console always matches the speed of the music being played. We have therefore achieved BPM synchronization. But we want to go one step further and achieve beat synchronization.
Let’s assume a techno or house track with a four on the floor rhythm is being played. Currently, a dimmer chaser would start at any time. It is therefore not in phase with the beat pattern of the music.

Beat grid four on the floor not in phase with light chaser

What we want to achieve is that the dimmer of a fixture group opens at exactly the same time as the sound waves of the kick or the snare need to spread in the room.
In the example below, there is a fixture group Beams, which starts on the kick without transition and then slowly fades out (ramp-down dimmer). On the snare, a Washer group goes on hard and then fades out hard again after a short decay. Finally, on the fourth beat, a Blinder lamp group goes on. This lamp group should optionally only come on every fourth bar instead of every bar.

Beat grid four on the floor in phase with light chaser

However, synchronizing the phase is not always trivial. Light consoles such as grandMA3 do not allow you to change the phase of a Phaser in the Executor. As an alternative, you can restart the current CUE in a Sequence via the Executor address. This also restarts the Phaser in the current CUE at step 1.
The following command, for example, restarts the current CUE of Executor 201 on page 1.

1
goto page 1.201 cue /NC;

To synchronize a grandMA3 phaser to a certain beat, you have to send the command listed above to the trigger for a certain beat. In our example above, this means that we want to restart the CUE for Dimmer Beams on the first beat, the CUE for Washer on the second and finally the CUE for Blinder on the fourth.