X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fstaff-performer.cc;h=3ae1482bec3fb4e4d46662153afc3aebba999594;hb=8cd1548d4177af5d2ca386a4574ce9cbdc97aa96;hp=8d565418946bd49037dc7b178382811a28193efc;hpb=e5380f29f23e204a603f8398368d2a7dc0260aa0;p=lilypond.git diff --git a/lily/staff-performer.cc b/lily/staff-performer.cc index 8d56541894..3ae1482bec 100644 --- a/lily/staff-performer.cc +++ b/lily/staff-performer.cc @@ -44,6 +44,8 @@ protected: virtual void initialize (); void process_music (); void stop_translation_timestep (); + void set_instrument_name (); + void set_instrument (int channel); private: Audio_staff *audio_staff_; @@ -100,20 +102,29 @@ Staff_performer::process_music () string str = new_instrument_string (); if (str.length ()) { - instrument_name_ = new Audio_text (Audio_text::INSTRUMENT_NAME, str); - announce_element (Audio_element_info (instrument_name_, 0)); - instrument_ = new Audio_instrument (str); - announce_element (Audio_element_info (instrument_, 0)); - - audio_staff_->add_audio_item (instrument_); - audio_staff_->add_audio_item (instrument_name_); - - /* - Have to be here before notes arrive into the staff. - */ + set_instrument (0); + set_instrument_name (); } } +void +Staff_performer::set_instrument (int channel) +{ + instrument_ = new Audio_instrument (instrument_string_); + instrument_->channel_ = channel; + announce_element (Audio_element_info (instrument_, 0)); + audio_staff_->add_audio_item (instrument_); +} + +void +Staff_performer::set_instrument_name () +{ + instrument_name_ = new Audio_text (Audio_text::INSTRUMENT_NAME, + instrument_string_); + announce_element (Audio_element_info (instrument_name_, 0)); + audio_staff_->add_audio_item (instrument_name_); +} + void Staff_performer::stop_translation_timestep () { @@ -121,10 +132,8 @@ Staff_performer::stop_translation_timestep () SCM drums = scm_call_1 (proc, ly_symbol2scm (instrument_string_.c_str ())); audio_staff_->percussion_ = (drums == SCM_BOOL_T); - if (name_) - name_ = 0; - if (tempo_) - tempo_ = 0; + name_ = 0; + tempo_ = 0; instrument_name_ = 0; instrument_ = 0; } @@ -168,8 +177,13 @@ Staff_performer::acknowledge_audio_element (Audio_element_info inf) if (i != channel_map_.end ()) channel = i->second; else - channel_map_[id] = channel; + { + channel_map_[id] = channel; + if (channel) + set_instrument (channel); + } + ai->channel_ = channel; audio_staff_->add_audio_item (ai); } }