Mixer Integration

This section describes a couple of packet types that support the tight interaction between DJM mixers and CDJs, specifically the “Fader Start” feature that can start and stop playback in response to movements of channel faders and the cross-fader, and the “Channels on Air” feature that allows players to change the color with which their platter is illuminated depending on whether their output is currently audible in the mix.

Although the channels-on-air feature does work on the XDJ-XZ, it is so subtle there that at first I thought it was missing entirely: instead of changing the platter color, it instead displays small on-air indicators in the LCD screen.

Fader Start

Thanks to @ErikMinekus we know that we can cause players to start or stop playing by sending a packet like the one shown below to port 50001 of the players, with appropriate command values for C1 through C4 telling that player what to do. A command value of 00 tells the corresponding player to start playing if it isn’t already, as long as it is positioned at the current cue point. The command 01 tells that player to stop playing and return to the cue point, and the value 02 tells the player to stay in its current state. (It also seems to work to broadcast the packet on port 50001, which makes sense, since it can be interpreted individually by each player, so a single packet can be used to affect the states of all four players if desired.)

0123456789abcdef5173707431576d4a4f4c020010Device Name (padded with 00)012000DlenrC1C2C3C4
Fader start packet.

Since this packet uses subtype 00, the length sent in lenr has the value 0004, reflecting the four bytes which follow it.

The XDJ-XZ does not support fader start, and its built-in decks do not respond to the command even if they are sent from another program. Sadly, the newer CDJ-3000 does not support fader start either, it is starting to look like an abandoned feature.

Channels on Air

Thanks to @jan2000 we know how the mixer reports which channels are currently on-air, and we can simulate this feature ourselves when there is no DJM (or XDJ-XZ) on the network. (If there is a DJM or XDJ-XZ present, it will quickly reassert its own on-air state for all the channels.)

The mixer broadcasts a packet like the one shown below to port 50001, with appropriate flag values for F1 through F4 telling each player whether its channel is on-air. A flag value of 00 tells the corresponding player it is off the air (silenced, due to the cross fader, channel fader, trim, filters, or input source switch for that channel, or the master level for the entire mix), while 01 means the player’s channel is on the air.

0123456789abcdef5173707431576d4a4f4c030010Device Name (padded with 00)012000DlenrF1F2F3F40000000000
On Air flags packet.

Since this packet uses subtype 00, the length sent in lenr has the value 0009, reflecting the nine bytes which follow it.

Six Channel Version

The advent of the CDJ-3000 and DJM-V10 introduced the possibility of having devices on up to six channels. To support that, the mixer sends a larger variant of the packet, with two new flag values, F5 and F6 (thanks to @AhnHEL for the packet captures which revealed these details):

#[on-air-packet-six-channels] .On Air flags packet (six channels).

0123456789abcdef5173707431576d4a4f4c030010Device Name (padded with 00)012003DlenrF1F2F3F40000000000F5F600300000000000

This packet uses a new subtype 03 for some reason (perhaps to differentiate it from the four-channel version), and the length sent in lenr has the value 0011, reflecting the seventeen bytes which follow it.