code: public void setTempo(double bpm) {
          if (bpm == 0.0) {
              throw new IllegalArgumentException("Tempo cannot be zero.");
          }
  
          final double oldTempo = metronome.getTempo();
          metronome.setTempo(bpm);
          notifyBeatSenderOfChange();
  
          if (isTempoMaster() && (Math.abs(bpm - oldTempo) > getTempoEpsilon())) {
              deliverTempoChangedAnnouncement(bpm);
          }
      }
docs: Controls the tempo at which we report ourselves to be playing. Only meaningful if we are sending status packets.
  If {@link #isSynced()} is {@code true} and we are not the tempo master, any value set by this method will
  overridden by the the next tempo master change.
  
  @param bpm the tempo, in beats per minute, that we should report in our status and beat packets