X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fscore-performer.cc;h=ed9e4077755fa465dcb2630ef648878f5f68782d;hb=ab547077f8c694c8edf882ce58fc6ed63407ccb6;hp=97afb37573231b12e3581a33fbdc25b213b578dc;hpb=14d74ac262744d16fc753ee41042d32860d58633;p=lilypond.git diff --git a/lily/score-performer.cc b/lily/score-performer.cc index 97afb37573..ed9e407775 100644 --- a/lily/score-performer.cc +++ b/lily/score-performer.cc @@ -3,8 +3,8 @@ source file of the GNU LilyPond music typesetter - (c) 1996--2004 Jan Nieuwenhuizen - */ + (c) 1996--2006 Jan Nieuwenhuizen +*/ #include "score-performer.hh" @@ -16,62 +16,61 @@ #include "warn.hh" #include "context-def.hh" #include "output-def.hh" +#include "context.hh" -ADD_TRANSLATOR (Score_performer, -/* descr */ "", -/* creats*/ "", -/* accepts */ "", -/* acks */ "", -/* reads */ "", -/* write */ ""); - +ADD_TRANSLATOR_GROUP (Score_performer, + /* doc */ "", + /* create */ "", + /* accept */ "", + /* read */ "", + /* write */ ""); Score_performer::Score_performer () { performance_ = 0; } - Score_performer::~Score_performer () { } void -Score_performer::play_element (Audio_element * p) +Score_performer::play_element (Audio_element *p) { - if (Audio_item * i = dynamic_cast (p)) - { - audio_column_->add_audio_item (i); - } + if (Audio_item *i = dynamic_cast (p)) + audio_column_->add_audio_item (i); performance_->add_element (p); } void Score_performer::announce_element (Audio_element_info info) { - announce_infos_.push (info); + announce_infos_.push_back (info); } -void +void Score_performer::prepare (Moment m) { audio_column_ = new Audio_column (m); play_element (audio_column_); - recurse_over_translators (context (), &Translator::start_translation_timestep, UP); + precomputed_recurse_over_translators (context (), START_TRANSLATION_TIMESTEP, UP); } void Score_performer::finish () { - recurse_over_translators (context (), &Translator::finalize, UP); + recurse_over_translators (context (), + &Translator::finalize, + &Translator_group::finalize, + UP); } - -void + +void Score_performer::one_time_step () { - recurse_over_translators (context (), &Performer::process_music, UP); - recurse_over_translators (context (), &Performer::do_announces, UP); - recurse_over_translators (context (), &Translator::stop_translation_timestep, UP); + precomputed_recurse_over_translators (context (), PROCESS_MUSIC, UP); + do_announces (); + precomputed_recurse_over_translators (context (), STOP_TRANSLATION_TIMESTEP, UP); } int @@ -80,20 +79,30 @@ Score_performer::get_tempo () const return ::get_tempo (performance_->midi_, Moment (Rational (1, 4))); } - -Music_output * +SCM Score_performer::get_output () { - Music_output * o = performance_; + Music_output *o = performance_; performance_ = 0; - return o; + return o->self_scm (); +} + +void +Score_performer::derived_mark () const +{ + if (performance_) + scm_gc_mark (performance_->self_scm ()); + + Score_translator::derived_mark (); + Performer_group::derived_mark (); } void Score_performer::initialize () { performance_ = new Performance; - performance_->midi_ = get_output_def (); + performance_->unprotect (); + performance_->midi_ = context ()->get_output_def (); Translator_group::initialize (); }