X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fscore-performer.cc;h=ed9e4077755fa465dcb2630ef648878f5f68782d;hb=ab547077f8c694c8edf882ce58fc6ed63407ccb6;hp=d44a836e35a26cf9a699d2e0a9e1d3973c9ee9f7;hpb=e37010af17faa8b185de836664b6544bd29dc1d0;p=lilypond.git diff --git a/lily/score-performer.cc b/lily/score-performer.cc index d44a836e35..ed9e407775 100644 --- a/lily/score-performer.cc +++ b/lily/score-performer.cc @@ -3,11 +3,11 @@ source file of the GNU LilyPond music typesetter - (c) 1996--2004 Jan Nieuwenhuizen - */ + (c) 1996--2006 Jan Nieuwenhuizen +*/ #include "score-performer.hh" -#include "midi-def.hh" + #include "audio-column.hh" #include "audio-item.hh" #include "performance.hh" @@ -15,81 +15,94 @@ #include "string-convert.hh" #include "warn.hh" #include "context-def.hh" +#include "output-def.hh" +#include "context.hh" - - -ENTER_DESCRIPTION(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_down_translators (daddy_context_, &Translator::start_translation_timestep, true); + precomputed_recurse_over_translators (context (), START_TRANSLATION_TIMESTEP, UP); } +void +Score_performer::finish () +{ + recurse_over_translators (context (), + &Translator::finalize, + &Translator_group::finalize, + UP); +} -void +void Score_performer::one_time_step () { - recurse_down_performers (daddy_context_, &Performer::process_music, false); - recurse_down_performers (daddy_context_, &Performer::do_announces, true); - recurse_down_translators (daddy_context_, &Translator::stop_translation_timestep, false); + precomputed_recurse_over_translators (context (), PROCESS_MUSIC, UP); + do_announces (); + precomputed_recurse_over_translators (context (), STOP_TRANSLATION_TIMESTEP, UP); } int Score_performer::get_tempo () const { - return performance_->midi_->get_tempo (Moment (Rational (1, 4))); + return ::get_tempo (performance_->midi_, Moment (Rational (1, 4))); } - -Music_output * +SCM Score_performer::get_output () { - Music_output * o = performance_; - performance_ =0; - return o; + Music_output *o = performance_; + performance_ = 0; + 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_ = dynamic_cast (get_output_def ()); + performance_->unprotect (); + performance_->midi_ = context ()->get_output_def (); Translator_group::initialize (); }