Staff_performer::new_audio_staff (string voice)
{
Audio_staff* audio_staff = new Audio_staff;
- name_ = new Audio_text (Audio_text::TRACK_NAME, context ()->id_string ()
- + ":" + voice);
- audio_staff->add_audio_item (name_);
+ string track_name = context ()->id_string () + ":" + voice;
+ if (track_name != ":")
+ {
+ name_ = new Audio_text (Audio_text::TRACK_NAME, context ()->id_string ()
+ + ":" + voice);
+ audio_staff->add_audio_item (name_);
+ announce_element (Audio_element_info (name_, 0));
+ }
announce_element (Audio_element_info (audio_staff, 0));
- announce_element (Audio_element_info (name_, 0));
staff_map_[voice] = audio_staff;
+ if (!instrument_string_.empty ())
+ set_instrument (channel_, voice);
return audio_staff;
}
Audio_staff*
Staff_performer::get_audio_staff (string voice)
{
+ SCM channel_mapping = get_property ("midiChannelMapping");
+ if (channel_mapping != ly_symbol2scm ("instrument")
+ && staff_map_.size ())
+ return staff_map_.begin ()->second;
+
map<string, Audio_staff*>::const_iterator i = staff_map_.find (voice);
if (i != staff_map_.end ())
return i->second;
{
staff_map_.clear ();
channel_map_.clear ();
- channel_count_ = 0;
- static_channel_map_.clear ();
}
string
int
Staff_performer::get_channel (string instrument)
{
- SCM channel_per_staff = get_property ("midiChannelPerStaff");
- map<string, int>& channel_map = (channel_per_staff == SCM_BOOL_T)
+ SCM channel_mapping = get_property ("midiChannelMapping");
+ map<string, int>& channel_map
+ = (channel_mapping != ly_symbol2scm ("instrument"))
? channel_map_
: static_channel_map_;
if (i != channel_map.end ())
return i->second;
- int channel = (channel_per_staff == SCM_BOOL_T)
+ int channel = (channel_mapping == ly_symbol2scm ("staff"))
? channel_count_++
- :channel_map.size ();
+ : channel_map.size ();
/* MIDI players tend to ignore instrument settings on channel
10, the percussion channel. */
if (channel % 16 == 9)
- channel_map["percussion"] = channel++;
+ {
+ channel_map["percussion"] = channel++;
+ channel_count_++;
+ }
if (channel > 15)
{
string voice;
if (c->is_alias (ly_symbol2scm ("Voice")))
voice = c->id_string ();
+ SCM channel_mapping = get_property ("midiChannelMapping");
+ if (channel_mapping == ly_symbol2scm ("voice"))
+ channel_ = get_channel (voice);
string str = new_instrument_string ();
if (str.length ())
{
- channel_ = get_channel (str);
+ if (channel_mapping != ly_symbol2scm ("voice"))
+ channel_ = get_channel (str);
set_instrument (channel_, voice);
set_instrument_name (voice);
}
Audio_staff* audio_staff = get_audio_staff (voice);
ai->channel_ = channel_;
+ // Output volume as velocity and disable Midi_dynamic output
if (Audio_dynamic *d = dynamic_cast<Audio_dynamic *> (inf.elem_))
- dynamic_map_[voice] = d->volume_;
+ {
+ dynamic_map_[voice] = d->volume_;
+ d->volume_ = -1;
+ }
if (Real d = get_dynamic (voice))
if (Audio_note *n = dynamic_cast<Audio_note *> (inf.elem_))
n->volume_ = d;