From 8ccc45d44d03ecdcee13cfaaae49236d38647ed5 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Wed, 6 Mar 2019 23:41:15 +0100 Subject: Ardour/ALSA allow multiple MIDI devices with the same name --- libs/backends/alsa/alsa_audiobackend.cc | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'libs') diff --git a/libs/backends/alsa/alsa_audiobackend.cc b/libs/backends/alsa/alsa_audiobackend.cc index 00c6940d7c..56fa82f24a 100644 --- a/libs/backends/alsa/alsa_audiobackend.cc +++ b/libs/backends/alsa/alsa_audiobackend.cc @@ -1644,7 +1644,12 @@ AlsaAudioBackend::register_system_midi_ports(const std::string device) delete mout; } else { char tmp[64]; - snprintf(tmp, sizeof(tmp), "system:midi_playback_%u", elf_hash (i->first)); + for (int x = 0; x < 10; ++x) { + snprintf(tmp, sizeof(tmp), "system:midi_playback_%x%d", elf_hash (i->first), x); + if (!find_port (tmp)) { + break; + } + } PortHandle p = add_port(std::string(tmp), DataType::MIDI, static_cast(IsInput | IsPhysical | IsTerminal)); if (!p) { mout->stop(); @@ -1685,7 +1690,12 @@ AlsaAudioBackend::register_system_midi_ports(const std::string device) delete midin; } else { char tmp[64]; - snprintf(tmp, sizeof(tmp), "system:midi_capture_%u", elf_hash (i->first)); + for (int x = 0; x < 10; ++x) { + snprintf(tmp, sizeof(tmp), "system:midi_capture_%x%d", elf_hash (i->first), x); + if (!find_port (tmp)) { + break; + } + } PortHandle p = add_port(std::string(tmp), DataType::MIDI, static_cast(IsOutput | IsPhysical | IsTerminal)); if (!p) { midin->stop(); -- cgit v1.2.3