X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fdrum-note-performer.cc;h=112ad6972c8ad872d149268629b0f8945a26cc8d;hb=b8f8b574e67eca24e4719ebb3100649cf5c3de08;hp=e0a0606df3ef53ceab91b40c157dcb39eb80d884;hpb=75eebcb49e52d296b1da3e1074e0825d2c780db4;p=lilypond.git diff --git a/lily/drum-note-performer.cc b/lily/drum-note-performer.cc index e0a0606df3..112ad6972c 100644 --- a/lily/drum-note-performer.cc +++ b/lily/drum-note-performer.cc @@ -10,9 +10,10 @@ #include "audio-item.hh" #include "audio-column.hh" #include "global-context.hh" -#include "warn.hh" #include "pitch.hh" -#include "music.hh" +#include "stream-event.hh" +#include "translator.icc" +#include "warn.hh" class Drum_note_performer : public Performer { @@ -20,13 +21,12 @@ public: TRANSLATOR_DECLARATIONS (Drum_note_performer); protected: - virtual bool try_music (Music *ev); void stop_translation_timestep (); void process_music (); - + DECLARE_TRANSLATOR_LISTENER (note); private: - Link_array note_evs_; - Link_array notes_; + vector note_evs_; + vector notes_; }; Drum_note_performer::Drum_note_performer () @@ -40,7 +40,8 @@ Drum_note_performer::process_music () while (note_evs_.size ()) { - Music *n = note_evs_.pop (); + Stream_event *n = note_evs_.back (); + note_evs_.pop_back (); SCM sym = n->get_property ("drum-type"); SCM defn = SCM_EOL; @@ -50,10 +51,10 @@ Drum_note_performer::process_music () if (Pitch *pit = unsmob_pitch (defn)) { - Audio_note *p = new Audio_note (*pit, n->get_length (), 0); + Audio_note *p = new Audio_note (*pit, get_event_length (n), 0); Audio_element_info info (p, n); announce_element (info); - notes_.push (p); + notes_.push_back (p); } } @@ -66,28 +67,19 @@ Drum_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 (int i = 0; i < notes_.size (); i++) + for (vsize i = 0; i < notes_.size (); i++) play_element (notes_[i]); notes_.clear (); note_evs_.clear (); } -bool -Drum_note_performer::try_music (Music *ev) +IMPLEMENT_TRANSLATOR_LISTENER (Drum_note_performer, note); +void +Drum_note_performer::listen_note (Stream_event *ev) { - if (ev->is_mus_type ("note-event")) - { - note_evs_.push (ev); - return true; - } - else if (ev->is_mus_type ("busy-playing-event")) - return note_evs_.size (); - - return false; + note_evs_.push_back (ev); } -#include "translator.icc" - ADD_TRANSLATOR (Drum_note_performer, "Play drum notes.", "", - "note-event busy-playing-event", "", ""); + "note-event", "", "");