+ string new_instrument_string ();
+ void set_instrument_name (const string &voice);
+ void set_instrument (int channel, const string &voice);
+ int get_channel (const string &instrument);
+ Audio_staff *get_audio_staff (const string &voice);
+ Audio_staff *new_audio_staff (const string &voice);
+
+ class Midi_control_initializer : public Midi_control_change_announcer
+ {
+ public:
+ Midi_control_initializer (Staff_performer *performer,
+ Audio_staff *audio_staff,
+ int channel);
+
+ SCM get_property_value (const char *property_name);
+ void do_announce (Audio_control_change *item);
+
+ private:
+ Staff_performer *performer_;
+ Audio_staff *audio_staff_;
+ int channel_;
+ };
+
+ string instrument_string_;
+ int channel_;
+ Audio_instrument *instrument_;
+ Audio_text *instrument_name_;
+ Audio_text *name_;
+ Audio_tempo *tempo_;
+ map<string, Audio_staff *> staff_map_;
+ map<string, int> channel_map_;
+ // Would prefer to have the following two items be
+ // members of the containing class Performance,
+ // so they can be reset for each new midi file output.
+ static map<string, int> static_channel_map_;
+ static int channel_count_;
+ // For now, ask the last Staff_performer clean up during its finalize method
+ static int staff_performer_count_;