+ SCM_ASSERT_TYPE (scm_integer_p (length) == SCM_BOOL_T,
+ length, SCM_ARG1, __FUNCTION__, "integer");
+
+ int dots = 0;
+ if (dotcount != SCM_UNDEFINED)
+ {
+ SCM_ASSERT_TYPE (scm_integer_p (dotcount) == SCM_BOOL_T,
+ dotcount, SCM_ARG2, __FUNCTION__, "integer");
+ dots = ly_scm2int (dotcount);
+ }
+
+ bool compress = false;
+ if (num != SCM_UNDEFINED)
+ {
+ SCM_ASSERT_TYPE (ly_c_number_p (num), length, SCM_ARG3, __FUNCTION__, "integer");
+ compress = true;
+ }
+ else
+ num = scm_int2num (1);
+
+ if (den != SCM_UNDEFINED)
+ {
+ SCM_ASSERT_TYPE (ly_c_number_p (den), length, SCM_ARG4, __FUNCTION__, "integer");
+ compress = true;
+ }
+ else
+ den = scm_int2num (1);
+
+ Duration p (ly_scm2int (length), dots);
+ if (compress)
+ p = p.compressed (Rational (ly_scm2int (num), ly_scm2int (den)));
+