code: public void sendOnAirCommand(Set<Integer> deviceNumbersOnAir) throws IOException {
          ensureRunning();
          byte[] payload = new byte[CHANNELS_ON_AIR_PAYLOAD.length];
          System.arraycopy(CHANNELS_ON_AIR_PAYLOAD, 0, payload, 0, CHANNELS_ON_AIR_PAYLOAD.length);
          payload[2] = getDeviceNumber();
  
          for (int i = 1; i <= 4; i++) {
              if (deviceNumbersOnAir.contains(i)) {
                  payload[i + 4] = 1;
              }
          }
  
          assembleAndSendPacket(Util.PacketType.CHANNELS_ON_AIR, payload, getBroadcastAddress(), BeatFinder.BEAT_PORT);
      }
docs: Broadcast a packet that tells the players which channels are on the air (audible in the mixer output).
  Numbers outside the range 1 to 4 are ignored. If there is an actual DJM mixer on the network, it will
  be sending these packets several times per second, so the results of calling this method will be quickly
  overridden.
  
  @param deviceNumbersOnAir the players whose channels are currently on the air
  
  @throws IOException if there is a problem broadcasting the command to the players
  @throws IllegalStateException if the {@code VirtualCdj} is not active