X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fstaff-performer.cc;h=fda68819a01dc8a8333dff944f91415417274e2e;hb=ca20eaa74e7e762c0611de26cc2267909ae27e02;hp=56d31210b110cf79ae9aeb0ccebc15ea6265e6f5;hpb=a6ee9dcd388111e842064a8d46ab06c4897a00d2;p=lilypond.git diff --git a/lily/staff-performer.cc b/lily/staff-performer.cc index 56d31210b1..fda68819a0 100644 --- a/lily/staff-performer.cc +++ b/lily/staff-performer.cc @@ -3,15 +3,15 @@ source file of the GNU LilyPond music typesetter - (c) 1997--2002 Jan Nieuwenhuizen + (c) 1997--2005 Jan Nieuwenhuizen */ -#include "translator-group.hh" #include "warn.hh" #include "audio-column.hh" #include "audio-item.hh" #include "audio-staff.hh" #include "performer-group-performer.hh" +#include "context.hh" /** Perform a staff. Individual notes should have their instrument (staff-wide) set, so we override play_element () @@ -20,7 +20,7 @@ class Staff_performer : public Performer_group_performer { public: - TRANSLATOR_DECLARATIONS(Staff_performer); + TRANSLATOR_DECLARATIONS (Staff_performer); ~Staff_performer (); String new_instrument_string (); @@ -41,7 +41,9 @@ private: Audio_tempo* tempo_; }; -ENTER_DESCRIPTION (Staff_performer, "","","","","" ); +ADD_TRANSLATOR (Staff_performer, "", "", + "", + "", "", ""); Staff_performer::Staff_performer () { @@ -62,7 +64,7 @@ Staff_performer::initialize () audio_staff_ = new Audio_staff; announce_element (Audio_element_info (audio_staff_, 0)); - name_ = new Audio_text (Audio_text::TRACK_NAME, id_string_); + name_ = new Audio_text (Audio_text::TRACK_NAME, context ()->id_string ()); announce_element (Audio_element_info (name_, 0)); tempo_ = new Audio_tempo (get_tempo ()); @@ -81,6 +83,12 @@ Staff_performer::create_audio_elements () announce_element (Audio_element_info (instrument_name_, 0)); instrument_ = new Audio_instrument (str); announce_element (Audio_element_info (instrument_, 0)); + + /* + Have to be here before notes arrive into the staff. + */ + play_element (instrument_); + play_element (instrument_name_); } Performer_group_performer::create_audio_elements (); } @@ -88,8 +96,9 @@ Staff_performer::create_audio_elements () void Staff_performer::stop_translation_timestep () { - SCM proc = scm_primitive_eval (ly_symbol2scm ("percussion-p")); - SCM drums = gh_call1 (proc, ly_symbol2scm (instrument_string_.to_str0 ())); + SCM proc = ly_lily_module_constant ("percussion?"); + + SCM drums = scm_call_1 (proc, ly_symbol2scm (instrument_string_.to_str0 ())); audio_staff_->channel_ = (drums == SCM_BOOL_T ? 9 : -1 ); if (name_) { @@ -101,16 +110,8 @@ Staff_performer::stop_translation_timestep () play_element (tempo_); tempo_ = 0; } - if (instrument_name_) - { - play_element (instrument_name_); - instrument_name_ = 0; - } - if (instrument_) - { - play_element (instrument_); - instrument_ = 0; - } + instrument_name_ = 0; + instrument_ = 0; Performer_group_performer::stop_translation_timestep (); } @@ -128,10 +129,7 @@ Staff_performer::new_instrument_string () // mustn't ask Score for instrument: it will return piano! SCM minstr = get_property ("midiInstrument"); - if (!gh_string_p (minstr)) - minstr = get_property ("instrument"); - - if (!gh_string_p (minstr) + if (!scm_is_string (minstr) || ly_scm2string (minstr) == instrument_string_) return "";