Fix ALSA MIDI device naming
The backend will replace the information in the last bracket (IO) of the name with (In/Out) when creating pretty port-names from the device-name. -- see replace_name_io(). This fixes an issue with device-name number suffixes in brackets.
This commit is contained in:
parent
9ac18a8e0f
commit
7e56812c55
|
@ -95,10 +95,11 @@ ARDOUR::get_alsa_audio_device_names (std::map<std::string, std::string>& devices
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
insert_unique_device_name (std::map<std::string, std::string>& devices, std::string const& card_name, std::string const& devname)
|
insert_unique_device_name (std::map<std::string, std::string>& devices, std::string const& card_name, std::string const& devname, int caps)
|
||||||
{
|
{
|
||||||
|
assert (caps != 0);
|
||||||
std::pair<std::map<std::string, std::string>::iterator, bool> rv;
|
std::pair<std::map<std::string, std::string>::iterator, bool> rv;
|
||||||
char cnt = '1';
|
char cnt = '2';
|
||||||
std::string cn = card_name;
|
std::string cn = card_name;
|
||||||
/* Add numbers first this is be independent of physical ID (sequencer vs rawmidi).
|
/* Add numbers first this is be independent of physical ID (sequencer vs rawmidi).
|
||||||
* If this fails (>= 10 devices) add the device-name for uniqness
|
* If this fails (>= 10 devices) add the device-name for uniqness
|
||||||
|
@ -107,12 +108,20 @@ insert_unique_device_name (std::map<std::string, std::string>& devices, std::str
|
||||||
* there is more than one device with the same name.
|
* there is more than one device with the same name.
|
||||||
*/
|
*/
|
||||||
do {
|
do {
|
||||||
|
cn += " (";
|
||||||
|
if (caps & SND_SEQ_PORT_CAP_READ) cn += "I";
|
||||||
|
if (caps & SND_SEQ_PORT_CAP_WRITE) cn += "O";
|
||||||
|
cn += ")";
|
||||||
rv = devices.insert (std::make_pair (cn, devname));
|
rv = devices.insert (std::make_pair (cn, devname));
|
||||||
cn = card_name + " (" + cnt + ")";
|
cn = card_name + " [" + cnt + "]";
|
||||||
} while (!rv.second && ++cnt <= '9');
|
} while (!rv.second && ++cnt <= '9');
|
||||||
|
|
||||||
if (!rv.second) {
|
if (!rv.second) {
|
||||||
rv = devices.insert (std::make_pair (card_name + " (" + devname + ")", devname));
|
cn = card_name + " [" + devname + "] (";
|
||||||
|
if (caps & SND_SEQ_PORT_CAP_READ) cn += "I";
|
||||||
|
if (caps & SND_SEQ_PORT_CAP_WRITE) cn += "O";
|
||||||
|
cn += ")";
|
||||||
|
rv = devices.insert (std::make_pair (cn, devname));
|
||||||
assert (rv.second == true);
|
assert (rv.second == true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -172,14 +181,13 @@ ARDOUR::get_alsa_rawmidi_device_names (std::map<std::string, std::string>& devic
|
||||||
devname += ",";
|
devname += ",";
|
||||||
devname += PBD::to_string (device);
|
devname += PBD::to_string (device);
|
||||||
|
|
||||||
std::string card_name;
|
std::string card_name = snd_rawmidi_info_get_name (info);
|
||||||
card_name = snd_rawmidi_info_get_name (info);
|
|
||||||
card_name += " (";
|
|
||||||
if (sub < subs_in) card_name += "I";
|
|
||||||
if (sub < subs_out) card_name += "O";
|
|
||||||
card_name += ")";
|
|
||||||
|
|
||||||
insert_unique_device_name (devices, card_name, devname);
|
int caps = 0;
|
||||||
|
if (sub < subs_in) caps |= SND_SEQ_PORT_CAP_READ;
|
||||||
|
if (sub < subs_out) caps |= SND_SEQ_PORT_CAP_WRITE;
|
||||||
|
|
||||||
|
insert_unique_device_name (devices, card_name, devname, caps);
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
devname = "hw:";
|
devname = "hw:";
|
||||||
|
@ -189,12 +197,10 @@ ARDOUR::get_alsa_rawmidi_device_names (std::map<std::string, std::string>& devic
|
||||||
devname += ",";
|
devname += ",";
|
||||||
devname += PBD::to_string (sub);
|
devname += PBD::to_string (sub);
|
||||||
|
|
||||||
std::string card_name = sub_name;
|
int caps = 0;
|
||||||
card_name += " (";
|
if (sub < subs_in) caps |= SND_SEQ_PORT_CAP_READ;
|
||||||
if (sub < subs_in) card_name += "I";
|
if (sub < subs_out) caps |= SND_SEQ_PORT_CAP_WRITE;
|
||||||
if (sub < subs_out) card_name += "O";
|
insert_unique_device_name (devices, sub_name, devname, caps);
|
||||||
card_name += ")";
|
|
||||||
insert_unique_device_name (devices, card_name, devname);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -240,16 +246,11 @@ ARDOUR::get_alsa_sequencer_names (std::map<std::string, std::string>& devices)
|
||||||
std::string card_name;
|
std::string card_name;
|
||||||
card_name = snd_seq_port_info_get_name (pinfo);
|
card_name = snd_seq_port_info_get_name (pinfo);
|
||||||
|
|
||||||
card_name += " (";
|
|
||||||
if (caps & SND_SEQ_PORT_CAP_READ) card_name += "I";
|
|
||||||
if (caps & SND_SEQ_PORT_CAP_WRITE) card_name += "O";
|
|
||||||
card_name += ")";
|
|
||||||
|
|
||||||
std::string devname;
|
std::string devname;
|
||||||
devname = PBD::to_string(snd_seq_port_info_get_client (pinfo));
|
devname = PBD::to_string(snd_seq_port_info_get_client (pinfo));
|
||||||
devname += ":";
|
devname += ":";
|
||||||
devname += PBD::to_string(snd_seq_port_info_get_port (pinfo));
|
devname += PBD::to_string(snd_seq_port_info_get_port (pinfo));
|
||||||
insert_unique_device_name (devices, card_name, devname);
|
insert_unique_device_name (devices, card_name, devname, caps);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
snd_seq_close (seq);
|
snd_seq_close (seq);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user