From 1314951fce85491d62cb095bf1023f853787a1cb Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Mon, 4 Sep 2006 17:08:03 +0000 Subject: [PATCH] *** empty log message *** --- ChangeLog | 22 ++++++++++++++++++++++ lily/audio-item.cc | 3 ++- lily/drum-note-performer.cc | 18 +++++++++++++++++- lily/include/audio-item.hh | 3 ++- lily/note-performer.cc | 18 +++++++++++++++++- lily/tie-performer.cc | 16 +++++++++++----- 6 files changed, 71 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index ff27e6840b..4501574500 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,25 @@ +2006-09-04 Michael Welsh Duggan + + * lily/tie-performer.cc: remove unused last_event_ property. + (class Tie_performer): add now_tied_heads_ property for + partially-tied heads. + (acknowledge_audio_element): when adding an Audio_note, put the + note in now_tied_heads_ if the audio note is partially tied. + (stop_translation_timestep): always include entries in + now_tied_heads_ in heads_to_tie_. + + * lily/drum-note-performer.cc (process_music): look for tie-events + in the articulations; pass to Audio_note constructor. + + * lily/note-performer.cc (process_music): look for tie-events in + the articulations; pass to Audio_note constructor. + + * lily/audio-item.cc (Audio_note): Initialize tie_event_ in + constructor. + + * lily/include/audio-item.hh (class Audio_note): add tie_event_. + include initializer in constructor. + 2006-09-02 Joe Neeman * lily/simple-spacer.cc (get_line_forces): Ignore loose columns diff --git a/lily/audio-item.cc b/lily/audio-item.cc index 0e4ded6386..fe8c5539e1 100644 --- a/lily/audio-item.cc +++ b/lily/audio-item.cc @@ -21,12 +21,13 @@ Audio_item::Audio_item () audio_column_ = 0; } -Audio_note::Audio_note (Pitch p, Moment m, int transposing_i) +Audio_note::Audio_note (Pitch p, Moment m, bool tie_event, int transposing_i) { pitch_ = p; length_mom_ = m; tied_ = 0; transposing_ = transposing_i; + tie_event_ = tie_event; } void diff --git a/lily/drum-note-performer.cc b/lily/drum-note-performer.cc index 9a8e7e8e2a..2926fb8961 100644 --- a/lily/drum-note-performer.cc +++ b/lily/drum-note-performer.cc @@ -10,6 +10,7 @@ #include "audio-item.hh" #include "audio-column.hh" #include "global-context.hh" +#include "music.hh" #include "pitch.hh" #include "stream-event.hh" #include "translator.icc" @@ -51,7 +52,22 @@ Drum_note_performer::process_music () if (Pitch *pit = unsmob_pitch (defn)) { - Audio_note *p = new Audio_note (*pit, get_event_length (n), 0); + SCM articulations = n->get_property ("articulations"); + Music *tie_event = 0; + for (SCM s = articulations; + !tie_event && scm_is_pair (s); + s = scm_cdr (s)) + { + Music *m = unsmob_music (scm_car (s)); + if (!m) + continue; + + if (m->is_mus_type ("tie-event")) + tie_event = m; + } + + Audio_note *p = new Audio_note (*pit, get_event_length (n), + tie_event, 0); Audio_element_info info (p, n); announce_element (info); notes_.push_back (p); diff --git a/lily/include/audio-item.hh b/lily/include/audio-item.hh index 1e7bfec32a..11f3cd31f5 100644 --- a/lily/include/audio-item.hh +++ b/lily/include/audio-item.hh @@ -55,7 +55,7 @@ public: class Audio_note : public Audio_item { public: - Audio_note (Pitch p, Moment m, int transposing_i = 0); + Audio_note (Pitch p, Moment m, bool tie_event, int transposing_i); void tie_to (Audio_note *); @@ -63,6 +63,7 @@ public: Moment length_mom_; int transposing_; Audio_note *tied_; + bool tie_event_; }; class Audio_piano_pedal : public Audio_item diff --git a/lily/note-performer.cc b/lily/note-performer.cc index 73a3def1c9..8a39546b41 100644 --- a/lily/note-performer.cc +++ b/lily/note-performer.cc @@ -10,6 +10,7 @@ #include "audio-item.hh" #include "audio-column.hh" #include "global-context.hh" +#include "music.hh" #include "stream-event.hh" #include "warn.hh" @@ -52,7 +53,22 @@ Note_performer::process_music () if (Pitch *pitp = unsmob_pitch (pit)) { - Audio_note *p = new Audio_note (*pitp, get_event_length (n), - transposing); + SCM articulations = n->get_property ("articulations"); + Music *tie_event = 0; + for (SCM s = articulations; + !tie_event && scm_is_pair (s); + s = scm_cdr (s)) + { + Music *m = unsmob_music (scm_car (s)); + if (!m) + continue; + + if (m->is_mus_type ("tie-event")) + tie_event = m; + } + + Audio_note *p = new Audio_note (*pitp, get_event_length (n), + tie_event, - transposing); Audio_element_info info (p, n); announce_element (info); notes_.push_back (p); diff --git a/lily/tie-performer.cc b/lily/tie-performer.cc index 5e1256453e..c22fe255ec 100644 --- a/lily/tie-performer.cc +++ b/lily/tie-performer.cc @@ -17,8 +17,8 @@ class Tie_performer : public Performer { Stream_event *event_; - Stream_event *last_event_; vector now_heads_; + vector now_tied_heads_; vector heads_to_tie_; bool ties_created_; @@ -36,7 +36,6 @@ public: Tie_performer::Tie_performer () { event_ = 0; - last_event_ = 0; ties_created_ = false; } @@ -59,7 +58,11 @@ Tie_performer::acknowledge_audio_element (Audio_element_info inf) { if (Audio_note *an = dynamic_cast (inf.elem_)) { - now_heads_.push_back (inf); + if (an->tie_event_) + now_tied_heads_.push_back (inf); + else + now_heads_.push_back (inf); + for (vsize i = heads_to_tie_.size (); i--;) { Stream_event *right_mus = inf.event_; @@ -91,17 +94,20 @@ Tie_performer::stop_translation_timestep () if (ties_created_) { heads_to_tie_.clear (); - last_event_ = 0; ties_created_ = false; } if (event_) { heads_to_tie_ = now_heads_; - last_event_ = event_; } + + for (vsize i = now_tied_heads_.size(); i--;) + heads_to_tie_.push_back (now_tied_heads_[i]); + event_ = 0; now_heads_.clear (); + now_tied_heads_.clear (); } ADD_TRANSLATOR (Tie_performer, -- 2.39.5