From 777f57c4f435370850f92247251d996fd6599153 Mon Sep 17 00:00:00 2001 From: fred Date: Tue, 26 Mar 2002 23:25:44 +0000 Subject: [PATCH] lilypond-1.3.77 --- midi2ly/duration-iter.cc | 27 +++++------------- midi2ly/include/duration-convert.hh | 3 +- midi2ly/include/duration-iter.hh | 8 ------ midi2ly/include/midi2ly-global.hh | 1 + midi2ly/include/mudela-voice.hh | 1 + midi2ly/main.cc | 25 +++++++++++++++-- midi2ly/mudela-staff.cc | 43 +++++++++++++++++++++++++---- midi2ly/mudela-voice.cc | 5 ++++ 8 files changed, 74 insertions(+), 39 deletions(-) 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)); } -- 2.39.5