X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fnote-performer.cc;h=331e7cc60ff7ed4b9bfe710a23dbadfcf63b41d4;hb=9f3572d98bb948c9689cd1f75401a029451fa001;hp=4aecc396067c9524a73767261d5bf9cdc0150909;hpb=04265f11d1f21416ccebd2dcaa1d903dc781b36e;p=lilypond.git diff --git a/lily/note-performer.cc b/lily/note-performer.cc index 4aecc39606..331e7cc60f 100644 --- a/lily/note-performer.cc +++ b/lily/note-performer.cc @@ -10,10 +10,8 @@ #include "audio-item.hh" #include "audio-column.hh" #include "global-context.hh" -#include "stream-event.hh" #include "warn.hh" - -#include "translator.icc" +#include "music.hh" /** Convert evs to audio notes. @@ -24,12 +22,13 @@ public: TRANSLATOR_DECLARATIONS (Note_performer); protected: + virtual bool try_music (Music *ev); + void stop_translation_timestep (); void process_music (); - DECLARE_TRANSLATOR_LISTENER (note); private: - vector note_evs_; + vector note_evs_; vector notes_; }; @@ -46,28 +45,13 @@ Note_performer::process_music () while (note_evs_.size ()) { - Stream_event *n = note_evs_.back (); + Music *n = note_evs_.back (); note_evs_.pop_back (); SCM pit = n->get_property ("pitch"); if (Pitch *pitp = unsmob_pitch (pit)) { - SCM articulations = n->get_property ("articulations"); - Stream_event *tie_event = 0; - for (SCM s = articulations; - !tie_event && scm_is_pair (s); - s = scm_cdr (s)) - { - Stream_event *ev = unsmob_stream_event (scm_car (s)); - if (!ev) - continue; - - if (ev->in_event_class ("tie-event")) - tie_event = ev; - } - - Audio_note *p = new Audio_note (*pitp, get_event_length (n), - tie_event, - transposing); + Audio_note *p = new Audio_note (*pitp, n->get_length (), - transposing); Audio_element_info info (p, n); announce_element (info); notes_.push_back (p); @@ -82,19 +66,32 @@ Note_performer::stop_translation_timestep () { // why don't grace notes show up here? // --> grace notes effectively do not get delayed + Moment now = now_mom (); + for (vsize i = 0; i < notes_.size (); i++) + play_element (notes_[i]); notes_.clear (); note_evs_.clear (); } -IMPLEMENT_TRANSLATOR_LISTENER (Note_performer, note) -void -Note_performer::listen_note (Stream_event *ev) +bool +Note_performer::try_music (Music *ev) { - note_evs_.push_back (ev); + if (ev->is_mus_type ("note-event")) + { + note_evs_.push_back (ev); + return true; + } + else if (ev->is_mus_type ("busy-playing-event")) + return note_evs_.size (); + + return false; } +#include "translator.icc" + ADD_TRANSLATOR (Note_performer, "", "", - "note-event ", + "note-event " + "busy-playing-event", "", ""); Note_performer::Note_performer ()