code: @SuppressWarnings("WeakerAccess")
      public synchronized void setDeviceNumber(byte number) {
          if (isSendingStatus()) {
              throw new IllegalStateException("Can't change device number while sending status packets.");
          }
          if (number == 0 && isRunning()) {
              selfAssignDeviceNumber();
          } else {
              announcementBytes[DEVICE_NUMBER_OFFSET] = number;
          }
      }
docs: <p>Set the device number to be used when sending presence announcements on the network to pose as a virtual CDJ.
  If this is set to zero before {@link #start()} is called, the {@code VirtualCdj} will watch the network to
  look for an unused device number, and assign itself that number during startup. If you
  explicitly assign a non-zero value, it will use that device number instead. Setting the value to zero while
  already up and running reassigns it to an unused value immediately. If {@link #getUseStandardPlayerNumber()}
  returns {@code true}, self-assignment will try to find a value in the range 1 to 4. Otherwise (or if those
  values are all used by other players), it will try to find a value in the range 5 to 15.</p>
  
  <p>The device number defaults to 0, enabling self-assignment, and will be reset to that each time the
  {@code VirtualCdj} is stopped.</p>
  
  @param number the virtual player number
  @throws IllegalStateException if we are currently sending status updates