2 duration-convert.cc -- implement Duration_convert
4 source file of the LilyPond music typesetter
6 (c) 1997--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7 Jan Nieuwenhuizen <janneke@gnu.org>
10 #include "duration-convert.hh"
13 // statics Duration_convert
14 bool Duration_convert::no_quantify_b_s = false;
15 bool Duration_convert::no_double_dots_b_s = false;
16 bool Duration_convert::no_tuplets_b_s = false;
17 int Duration_convert::no_smaller_than_i_s = 0;
18 Array<Duration> Duration_convert::dur_array_s;
21 Duration_convert::dur2_str (Duration dur)
24 return String ("[") + to_str (dur.ticks_i_) + "]";
27 if (dur.durlog_i_ >= 0)
28 str = to_str ( type2_i (dur.durlog_i_) );
29 else if (dur.durlog_i_ == -1)
31 else if (dur.durlog_i_ <= -2)
34 if (dur.durlog_i_ < -2)
36 dur.plet_.iso_i_ *= 1 << (-2 - dur.durlog_i_);
39 str += to_str ('.', dur.dots_i_);
42 str += String ("*") + to_str (dur.plet_.iso_i_);
43 if (dur.plet_.type_i_ != 1)
44 str += String ("/") + to_str (dur.plet_.type_i_);
50 Duration_convert::dur2ticks_i (Duration dur)
54 return dur2_mom (dur) * Rational (Duration::division_1_i_s);
58 Duration_convert::i2_type (int i)
61 while (i && !(i & 1)) {
69 Duration_convert::type2_i (int type)
78 Duration_convert::dur2_mom (Duration dur)
81 return Rational (dur.ticks_i_, Duration::division_1_i_s);
84 if (dur.durlog_i_<-10)
88 mom = Rational (type2_i (-dur.durlog_i_), 1);
90 mom = Rational (1 , type2_i (dur.durlog_i_));
99 return mom * plet_factor_mom (dur);
103 Duration_convert::mom2_dur (Rational mom)
112 return mom2standardised_dur (mom);
117 Duration_convert::mom2standardised_dur (Rational mom)
121 if (mom == Rational (0))
124 int d = no_smaller_than_i_s ? no_smaller_than_i_s : 7;
126 int n = (mom / Rational (1, i)).to_int ();
135 mom != Rational (m, i * tup))
138 m = (mom / Rational (1, i * tup)).to_int ();
151 if (mom - Rational (n, i)
152 > Rational (1, i * 2 * tuplet))
162 dur.plet_.iso_i_ = n;
163 dur.plet_.type_i_ = tuplet;
168 Duration_convert::plet_factor_mom (Duration dur)
170 return dur.plet_.mom ();
174 Duration_convert::sync_f (Duration dur, Rational mom)
176 return mom / dur2_mom (dur);
180 Duration_convert::ticks2_dur (int ticks_i)
182 Rational mom (ticks_i, Duration::division_1_i_s);
183 return mom2standardised_dur (mom);
187 Duration_convert::ticks2standardised_dur (int ticks_i)
189 Rational mom (ticks_i, Duration::division_1_i_s);
190 Duration dur = mom2standardised_dur (mom);