ReducedFraction toMuseScoreTicks(int tick, int oldDivision, bool isDivisionInTps)
      {
      if (isDivisionInTps)
            return ReducedFraction::fromTicks(tick);

      Q_ASSERT_X(!isDivisionOverflow(tick, oldDivision),
                 "ReducedFraction::toMuseScoreTicks", "Division overflow");
      Q_ASSERT_X(!isRemainderOverflow(tick, oldDivision),
                 "ReducedFraction::toMuseScoreTicks", "Remainder overflow");

      const int integral = tick / oldDivision;
      const int remainder = tick % oldDivision;

      Q_ASSERT_X(!isMultiplicationOverflow(remainder, MScore::division),
                 "ReducedFraction::toMuseScoreTicks", "Multiplication overflow");
      Q_ASSERT_X(!isAdditionOverflow(remainder * MScore::division, oldDivision / 2),
                 "ReducedFraction::toMuseScoreTicks", "Addition overflow");

      const int tmp = remainder * MScore::division + oldDivision / 2;

      Q_ASSERT_X(!isDivisionOverflow(tmp, oldDivision),
                 "ReducedFraction::toMuseScoreTicks", "Division overflow");
      Q_ASSERT_X(!isMultiplicationOverflow(integral, MScore::division),
                 "ReducedFraction::toMuseScoreTicks", "Multiplication overflow");
      Q_ASSERT_X(!isAdditionOverflow(tmp / oldDivision, integral *  MScore::division),
                 "ReducedFraction::toMuseScoreTicks", "Addition overflow");

      return ReducedFraction::fromTicks(tmp / oldDivision + integral * MScore::division);
      }
int ReducedFraction::ticks() const
      {
      int integral = numerator_ / denominator_;
      int newNumerator = numerator_ % denominator_;
      int division = MScore::division * 4;

      Q_ASSERT_X(!isMultiplicationOverflow(newNumerator, division),
                 "ReducedFraction::ticks", "Multiplication overflow");
      Q_ASSERT_X(!isAdditionOverflow(newNumerator * division, denominator_ / 2),
                 "ReducedFraction::ticks", "Addition overflow");

      const int tmp = newNumerator * division + denominator_ / 2;

      Q_ASSERT_X(!isDivisionOverflow(tmp, denominator_),
                 "ReducedFraction::ticks", "Division overflow");
      Q_ASSERT_X(!isMultiplicationOverflow(integral, division),
                 "ReducedFraction::ticks", "Multiplication overflow");
      Q_ASSERT_X(!isAdditionOverflow(tmp / denominator_, integral * division),
                 "ReducedFraction::ticks", "Addition overflow");

      return tmp / denominator_ + integral * division;
      }
ReducedFraction toMuseScoreTicks(int tick, int oldDivision)
      {

      Q_ASSERT_X(!isMultiplicationOverflow(tick, MScore::division),
                 "ReducedFraction::toMuseScoreTicks", "Multiplication overflow");
      Q_ASSERT_X(!isAdditionOverflow(tick * MScore::division, oldDivision / 2),
                 "ReducedFraction::toMuseScoreTicks", "Addition overflow");

      const int tmp = tick * MScore::division + oldDivision / 2;

      Q_ASSERT_X(!isDivisionOverflow(tmp, oldDivision),
                 "ReducedFraction::toMuseScoreTicks", "Division overflow");

      return ReducedFraction::fromTicks(tmp / oldDivision);
      }