]> git.donarmstrong.com Git - lilypond.git/commitdiff
Midi: set instrument for each voice (on each channel).
authorJan Nieuwenhuizen <janneke@gnu.org>
Fri, 11 Mar 2011 20:51:35 +0000 (21:51 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sat, 12 Mar 2011 13:45:48 +0000 (14:45 +0100)
lily/audio-staff.cc
lily/staff-performer.cc

index b827b8b377be9130134cba00a59ad4026a169c10..8de47bf9dea59b051ea6bb4f6b0256aecc3b0422 100644 (file)
@@ -37,8 +37,7 @@ Audio_staff::Audio_staff ()
 void
 Audio_staff::output (Midi_stream &midi_stream, int track)
 {
-  Midi_track midi_track;
-  midi_track.number_ = track;
+  Midi_track midi_track (track);
 
   Midi_walker i (this, &midi_track);
   for (; i.ok (); i++)
index 17de3172df61c837dcdfe41805615523d42f8cca..3ae1482bec3fb4e4d46662153afc3aebba999594 100644 (file)
@@ -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,7 +177,11 @@ 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);