X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fperformer-group-performer.cc;h=fde075368ac35bb53f60b7689f707d05180e175c;hb=329f465a4b6d33aee925665a5d172b6fabcdaf2f;hp=55b5880d872effb36bda91545c4ca8cc1bff6dbd;hpb=615a9212789c2cb2994748c023d0e19f3a83a0fd;p=lilypond.git diff --git a/lily/performer-group-performer.cc b/lily/performer-group-performer.cc index 55b5880d87..fde075368a 100644 --- a/lily/performer-group-performer.cc +++ b/lily/performer-group-performer.cc @@ -3,14 +3,99 @@ source file of the GNU LilyPond music typesetter - (c) 1996, 1997--1998 Han-Wen Nienhuys - Jan Nieuwenhuizen - */ + (c) 1996--2005 Han-Wen Nienhuys + Jan Nieuwenhuizen +*/ #include "performer-group-performer.hh" -#include "debug.hh" +#include "context.hh" +#include "audio-element.hh" +#include "warn.hh" +ADD_TRANSLATOR_GROUP (Performer_group_performer, + /* descr */ "", + /* creats*/ "", + /* accepts */ "", + /* reads */ "", + /* write */ ""); -ADD_THIS_TRANSLATOR(Performer_group_performer); +void +Performer_group_performer::announce_element (Audio_element_info info) +{ + announce_infos_.push (info); + Translator_group *t + = context ()->get_parent_context ()->implementation (); + if (Performer_group_performer *eg = dynamic_cast (t)) + eg->announce_element (info); +} + +void +Performer_group_performer::acknowledge_audio_elements () +{ + for (int j = 0; j < announce_infos_.size (); j++) + { + Audio_element_info info = announce_infos_[j]; + + for (SCM p = get_simple_trans_list (); scm_is_pair (p); p = scm_cdr (p)) + { + Translator *t = unsmob_translator (scm_car (p)); + Performer *eng = dynamic_cast (t); + if (eng && eng != info.origin_trans_) + eng->acknowledge_audio_element (info); + } + } +} + +void +performer_each (SCM list, Performer_method method) +{ + for (SCM p = list; scm_is_pair (p); p = scm_cdr (p)) + { + Performer *e = dynamic_cast (unsmob_translator (scm_car (p))); + if (e) + (e->*method) (); + } +} + +void +Performer_group_performer::do_announces () +{ + while (1) + { + performer_each (get_simple_trans_list (), + &Performer::create_audio_elements); + + if (!announce_infos_.size ()) + break; + + acknowledge_audio_elements (); + announce_infos_.clear (); + } +} + + +void +Performer_group_performer::play_element (Audio_element *e) +{ + Context *c = context_->get_parent_context (); + if (c) + { + Performer_group_performer *pgp = dynamic_cast (c->implementation ()); + pgp->play_element (e); + } +} + +int +Performer_group_performer::get_tempo () const +{ + Context *c = context_->get_parent_context (); + if (c) + { + Performer_group_performer *pgp = dynamic_cast (c->implementation ()); + return pgp->get_tempo (); + } + return 60; +} +