From: Jan Nieuwenhuizen Date: Tue, 8 Aug 2000 11:56:35 +0000 (+0200) Subject: patch::: 1.3.76.jcn1 X-Git-Tag: release/1.3.77~2 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=638739c0005f69db448f4a0fab3914e45446c6d5;p=lilypond.git patch::: 1.3.76.jcn1 1.3.76.jcn1 =========== * Midi2ly bugfix: don't correct quantised durations, don't use tuplets, double dots etc. when user doesn't want them. It probably used to work like this, a long time ago. For some unknown reason, all corrections made by Duration_convert were junked if the corrected duration != exact duration. Duh. * Midi2ly: added a new option: --no-rests. --- Generated by janneke@gnu.org, From = lilypond-1.3.76, To = lilypond-1.3.76.jcn1 usage cd lilypond-source-dir; patch -E -p1 < lilypond-1.3.76.jcn1.diff Patches do not contain automatically generated files or (urg) empty directories, i.e., you should rerun autoconf, configure --- diff --git a/CHANGES b/CHANGES index 47a194e261..44d2d1bbef 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,20 @@ ---- ../lilypond-1.3.76/CHANGES Fri Aug 4 02:29:02 2000 +--- ../lilypond-1.3.76/CHANGES Thu Aug 3 20:29:02 2000 +++ b/CHANGES Tue Aug 8 13:56:35 2000 +@@ -1,3 +1,14 @@ +1.3.76.jcn1 +=========== + +* Midi2ly bugfix: don't correct quantised durations, don't use tuplets, + double dots etc. when user doesn't want them. It probably used to + work like this, a long time ago. For some unknown reason, all + corrections made by Duration_convert were junked if the corrected + duration != exact duration. Duh. + +* Midi2ly: added a new option: --no-rests. + + 1.3.76 + ====== + --- ../lilypond-1.3.76/CHANGES Fri Aug 4 02:29:02 2000 ++ b/CHANGES Mon Aug 7 00:19:35 2000 @@ -1,3 +1,12 @@ 1.3.76.gp1 diff --git a/VERSION b/VERSION index ea1210f086..10c371b1bf 100644 --- a/VERSION +++ b/VERSION @@ -2,7 +2,7 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=1 MINOR_VERSION=3 PATCH_LEVEL=76 -MY_PATCH_LEVEL=gp1 +MY_PATCH_LEVEL=jcn1 # use the above to send patches: MY_PATCH_LEVEL is always empty for a # released version. diff --git a/midi2ly/duration-convert.cc b/midi2ly/duration-convert.cc index 5dfec5c262..bfe8ca2178 100644 --- a/midi2ly/duration-convert.cc +++ b/midi2ly/duration-convert.cc @@ -12,10 +12,9 @@ #include "warn.hh" // statics Duration_convert -bool const Duration_convert::midi_as_plet_b_s = true; bool Duration_convert::no_quantify_b_s = false; bool Duration_convert::no_double_dots_b_s = false; -bool Duration_convert::no_triplets_b_s = false; +bool Duration_convert::no_tuplets_b_s = false; int Duration_convert::no_smaller_than_i_s = 0; Array Duration_convert::dur_array_s; @@ -101,23 +100,8 @@ Duration_convert::mom2_dur (Rational mom) dur.set_plet (0,1); return dur; } - - Duration dur = mom2standardised_dur (mom); - // if (!dur.mom () || (dur.mom () == mom)) - if (!dur.length_mom () || (dur.length_mom () == mom)) - return dur; - assert (midi_as_plet_b_s); - - // dur.set_plet (type_mom, Duration::division_1_i_s / 4); - - // Rational as_plet_mom = mom / dur.mom (); - Rational as_plet_mom = mom / dur.length_mom (); - as_plet_mom *= dur.plet_.mom (); - long num = as_plet_mom.num (); - long den = as_plet_mom.den (); - dur.set_plet (num, den); - return dur; + return mom2standardised_dur (mom); } Duration @@ -157,10 +141,10 @@ Duration_convert::set_array () { dur_array_s.clear (); - Duration_iterator iter_dur; - assert (iter_dur); - while (iter_dur) - dur_array_s.push (iter_dur++); + Duration_iterator i; + dur_array_s.push (i.dur ()); + while (i.ok ()) + dur_array_s.push (i.forward_dur ()); } @@ -180,15 +164,7 @@ Duration Duration_convert::ticks2_dur (int ticks_i) { Rational mom (ticks_i, Duration::division_1_i_s); - if (midi_as_plet_b_s) - return mom2_dur (mom); - - Duration dur = mom2standardised_dur (mom); - - if (dur.length_mom () == mom) - return dur; - - return mom2_dur (mom); + return mom2standardised_dur (mom); } Duration diff --git a/midi2ly/duration-iter.cc b/midi2ly/duration-iter.cc index c5028e6259..7afb3e6b04 100644 --- a/midi2ly/duration-iter.cc +++ b/midi2ly/duration-iter.cc @@ -24,17 +24,6 @@ Duration_iterator::operator ++(int) return forward_dur (); } -Duration -Duration_iterator::operator ()() -{ - return dur (); -} - -Duration_iterator::operator bool () -{ - return ok (); -} - Duration Duration_iterator::dur () { @@ -58,8 +47,6 @@ Duration_iterator::forward_dur () */ assert (ok ()); - Duration dur = cursor_dur_; - if (!cursor_dur_.dots_i_ && !cursor_dur_.plet_b ()) { cursor_dur_.durlog_i_ += 1; @@ -88,27 +75,27 @@ Duration_iterator::forward_dur () cursor_dur_.durlog_i_ -= 1; } - if (Duration_convert::no_triplets_b_s + if (Duration_convert::no_tuplets_b_s && cursor_dur_.plet_b () && ok ()) - forward_dur (); + return forward_dur (); if (Duration_convert::no_double_dots_b_s && (cursor_dur_.dots_i_ == 2) && ok ()) - forward_dur (); + return forward_dur (); if (Duration_convert::no_smaller_than_i_s && (cursor_dur_.durlog_i_ > Duration_convert::no_smaller_than_i_s) && ok ()) - forward_dur (); + return forward_dur (); if (Duration_convert::no_smaller_than_i_s && cursor_dur_.dots_i_ && (cursor_dur_.durlog_i_ >= Duration_convert::no_smaller_than_i_s) && ok ()) - forward_dur (); + return forward_dur (); if (Duration_convert::no_smaller_than_i_s && (cursor_dur_.dots_i_ == 2) && (cursor_dur_.durlog_i_ >= Duration_convert::no_smaller_than_i_s / 2) && ok ()) - forward_dur (); + return forward_dur (); - return dur; + return dur (); } bool diff --git a/midi2ly/include/duration-convert.hh b/midi2ly/include/duration-convert.hh index 0b750a1716..7211cd9053 100644 --- a/midi2ly/include/duration-convert.hh +++ b/midi2ly/include/duration-convert.hh @@ -29,10 +29,9 @@ struct Duration_convert { /* Urgh. statics. */ - static bool const midi_as_plet_b_s; static bool no_quantify_b_s; static bool no_double_dots_b_s; - static bool no_triplets_b_s; + static bool no_tuplets_b_s; static int no_smaller_than_i_s; static Array dur_array_s; diff --git a/midi2ly/include/duration-iter.hh b/midi2ly/include/duration-iter.hh index bb9dac6f0c..9f441694b6 100644 --- a/midi2ly/include/duration-iter.hh +++ b/midi2ly/include/duration-iter.hh @@ -16,17 +16,9 @@ struct Duration_iterator { /// start at shortest: 128:2/3 Duration_iterator (); - // **** what about these three here ? /// return forward_dur (); Duration operator ++(int); - /// return ok () - operator bool (); - - /// return dur () - Duration operator ()(); - - /// return current dur Duration dur (); diff --git a/midi2ly/include/midi2ly-global.hh b/midi2ly/include/midi2ly-global.hh index ab870e9571..4e5c54922b 100644 --- a/midi2ly/include/midi2ly-global.hh +++ b/midi2ly/include/midi2ly-global.hh @@ -30,6 +30,7 @@ void error (String message_str); //, char const* context_ch_C); String midi2ly_version_str(); extern bool no_timestamps_b_g;; +extern bool no_rests_b_g;; #endif // MIDI2LY_GLOBAL_HH diff --git a/midi2ly/include/mudela-voice.hh b/midi2ly/include/mudela-voice.hh index 6272266da2..a3fff8bdc5 100644 --- a/midi2ly/include/mudela-voice.hh +++ b/midi2ly/include/mudela-voice.hh @@ -18,6 +18,7 @@ public: void output (Mudela_stream& mudela_stream_r); String get_clef () const; Mudela_item * last_item_l_; + Mudela_note * last_note_l_; private: Mudela_staff* mudela_staff_l_; Cons_list mudela_item_l_list_; diff --git a/midi2ly/main.cc b/midi2ly/main.cc index 6a683a03e4..71f1d6d744 100644 --- a/midi2ly/main.cc +++ b/midi2ly/main.cc @@ -30,6 +30,7 @@ String filename_str_g; Mudela_score* mudela_score_l_g = 0; bool no_timestamps_b_g = false; +bool no_rests_b_g = false; Sources source; @@ -92,10 +93,11 @@ Long_option_init long_option_init_a[] = {0, "debug", 'd', _i ("enable debugging output")}, {0, "help", 'h', _i ("this help")}, {_i ("ACC[:MINOR]"), "key", 'k', _i ("set key: ACC +sharps/-flats; :1 minor")}, - {0, "no-silly", 'n', _i ("don't output tuplets or double dots, smallest is 32")}, + {0, "no-silly", 'n', _i ("don't output tuplets, double dots or rests, smallest is 32")}, {_i ("FILE"), "output", 'o', _i ("set FILE as default output")}, {0, "no-tuplets", 'p', _i ("don't output tuplets")}, {0, "quiet", 'q', _i ("be quiet")}, + {0, "no-rests", 'r', _i ("don't output rests or skips")}, {_i ("DUR"), "smallest", 's', _i ("set smallest duration")}, {0, "no-timestamps", 'T', _i ("don't timestamp the output")}, {0, "version", 'V', _i ("print version number")}, @@ -168,18 +170,22 @@ main (int argc_i, char* argv_sz_a[]) } case 'n': Duration_convert::no_double_dots_b_s = true; - Duration_convert::no_triplets_b_s = true; + Duration_convert::no_tuplets_b_s = true; Duration_convert::no_smaller_than_i_s = 5; + no_rests_b_g = true; break; case 'o': output_str = getopt_long.optional_argument_ch_C_; break; case 'p': - Duration_convert::no_triplets_b_s = true; + Duration_convert::no_tuplets_b_s = true; break; case 'q': level_ver = QUIET_ver; break; + case 'r': + no_rests_b_g = true; + break; case 'T': no_timestamps_b_g = true; break; @@ -224,6 +230,19 @@ main (int argc_i, char* argv_sz_a[]) source.set_binary (true); source.set_path (&path); + LOGOUT (NORMAL_ver) << "\n"; + LOGOUT (NORMAL_ver) << _f ("no_double_dots: %d\n", + Duration_convert::no_double_dots_b_s); + LOGOUT (NORMAL_ver) << _f ("no_rests: %d\n", + no_rests_b_g); + LOGOUT (NORMAL_ver) << _f ("no_quantify_b_s: %d\n", + Duration_convert::no_quantify_b_s); + LOGOUT (NORMAL_ver) << _f ("no_smaller_than: %d (1/%d)\n", + Duration_convert::no_smaller_than_i_s, + Duration_convert::type2_i (Duration_convert::no_smaller_than_i_s)); + LOGOUT (NORMAL_ver) << _f ("no_tuplets: %d\n", + Duration_convert::no_tuplets_b_s); + char const* arg_sz = 0; while ( (arg_sz = getopt_long.get_next_arg ())) { diff --git a/midi2ly/mudela-staff.cc b/midi2ly/mudela-staff.cc index 6f561cdb15..284cc5ef0f 100644 --- a/midi2ly/mudela-staff.cc +++ b/midi2ly/mudela-staff.cc @@ -42,8 +42,11 @@ Mudela_staff::add_item (Mudela_item* mudela_item_p) /** Walk ITEMS and find voices. Remove categorised items. - TODO: collect all channels into separate voices. Use chords for sim - notes on same channel. + TODO: + + * collect all channels into separate voices. Use chords for sim + notes on same channel. + * assume voices/assume chords modes. */ void @@ -60,10 +63,23 @@ Mudela_staff::eat_voice (Cons_list& items) Cons* i = *pp; if (i->car_->at_mom () > mom) { - Rational dur = i->car_->at_mom () - mom; - // ugh, need score - Mudela_column* start = mudela_score_l_g->find_column_l (mom); - voice_p->add_item (new Mudela_skip (start, dur)); + if (no_rests_b_g && voice_p->last_note_l_) + { + voice_p->last_note_l_->end_column_l_ = i->car_->mudela_column_l_; + } + else + { + /* uh, what about quantisation? This should probably + use mom2standardised_dur () + arg, urg: skip should get duration from start/end columns! + */ + + Rational r = i->car_->at_mom () - mom; + // ugh, need score + Mudela_column* start = mudela_score_l_g->find_column_l (mom); + voice_p->add_item (new Mudela_skip (start, r)); + } + mom = i->car_->at_mom (); continue; // unnecessary } @@ -72,7 +88,22 @@ Mudela_staff::eat_voice (Cons_list& items) for (Cons *cp = i; cp && cp->car_->at_mom () == mom; cp = cp->next_) now_items.push (i->car_); +#if 0 + /* + Why don't we use , if voice has: + + + + we'd get last_item == key_change -> last_note == 0; + */ Mudela_note * last_note = dynamic_cast (voice_p->last_item_l_); +#else + /* + Not sure, is this better? + */ + Mudela_note * last_note = voice_p->last_note_l_; +#endif + Link_array candidates; for (int i=0; last_note && i < now_items.size (); i++) diff --git a/midi2ly/mudela-voice.cc b/midi2ly/mudela-voice.cc index f41b793d4d..c0236be33b 100644 --- a/midi2ly/mudela-voice.cc +++ b/midi2ly/mudela-voice.cc @@ -18,12 +18,17 @@ Mudela_voice::Mudela_voice (Mudela_staff* mudela_staff_l) { mudela_staff_l_ = mudela_staff_l; last_item_l_ =0; + last_note_l_ =0; } void Mudela_voice::add_item (Mudela_item* mudela_item_l) { last_item_l_ = mudela_item_l; + if (Mudela_note* n = dynamic_cast (mudela_item_l)) + { + last_note_l_ = n; + } mudela_item_l_list_.append (new Cons (mudela_item_l, 0)); }