X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fstaff-performer.cc;h=6a028a6f679daf41459158c4621adec8d8fda03f;hb=754d360118e26e2e48ec080849d9c0f94d1c7416;hp=d666fb6064d6fbbf2e333350c0e291ffa436ef1f;hpb=6b9bfd374643d1eed1ea158777d796c57a2bcd3a;p=lilypond.git diff --git a/lily/staff-performer.cc b/lily/staff-performer.cc index d666fb6064..6a028a6f67 100644 --- a/lily/staff-performer.cc +++ b/lily/staff-performer.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1997--2002 Jan Nieuwenhuizen + (c) 1997--2004 Jan Nieuwenhuizen */ #include "translator-group.hh" @@ -12,6 +12,7 @@ #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 +21,7 @@ class Staff_performer : public Performer_group_performer { public: - TRANSLATOR_DECLARATIONS(Staff_performer); + TRANSLATOR_DECLARATIONS (Staff_performer); ~Staff_performer (); String new_instrument_string (); @@ -42,7 +43,7 @@ private: }; ENTER_DESCRIPTION (Staff_performer, "", "", - "general-music", + "", "", "", ""); Staff_performer::Staff_performer () @@ -64,7 +65,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 ()); @@ -83,6 +84,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 (); } @@ -90,12 +97,9 @@ Staff_performer::create_audio_elements () void Staff_performer::stop_translation_timestep () { - /* - UGH. -> don't use eval. - */ + SCM proc = ly_scheme_function ("percussion?"); - SCM proc = scm_primitive_eval (ly_symbol2scm ("percussion?")); - SCM drums = gh_call1 (proc, ly_symbol2scm (instrument_string_.to_str0 ())); + SCM drums = scm_call_1 (proc, ly_symbol2scm (instrument_string_.to_str0 ())); audio_staff_->channel_ = (drums == SCM_BOOL_T ? 9 : -1 ); if (name_) { @@ -107,16 +111,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 (); } @@ -134,10 +130,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 "";