code: @SuppressWarnings("all")
    public void normalize() {
      // Start on samples
      int samplesPerFrame = (int) ((float) getSamplesPerSecond() / (float) getFramesPerSecond());
      setFrames(getFrames() + (int) (getSamples() * (1.0f / samplesPerFrame)));
      setSamples(getSamples() % samplesPerFrame);
  
      setSeconds(getSeconds() + (int) ((float) getFrames() / getFramesPerSecond()));
      setFrames((int) (getFrames() % getFramesPerSecond()));
  
      while (getSeconds() >= 60) {
        setSeconds(getSeconds() - 60);
        setMinutes(getMinutes() + 1);
      }
      while (getMinutes() >= 60) {
        setMinutes(getMinutes() - 60);
        setHours(getHours() + 1);
      }
    }
docs: Goes through the system and sanitizes badly formed values : 00:00:60:00 will become
  00:01:00:00, etc.