From 984dc1694dec5a5cea2af48d0750195b0d279f67 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Wed, 15 Apr 2020 01:40:13 +0200 Subject: Allow MIDNAM lookup of valid channels for controllers --- libs/ardour/ardour/instrument_info.h | 1 + libs/ardour/instrument_info.cc | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) (limited to 'libs') diff --git a/libs/ardour/ardour/instrument_info.h b/libs/ardour/ardour/instrument_info.h index 0d3957fb68..a2a5e7f2db 100644 --- a/libs/ardour/ardour/instrument_info.h +++ b/libs/ardour/ardour/instrument_info.h @@ -72,6 +72,7 @@ public: boost::shared_ptr value_name_list_by_control (uint8_t channel, uint8_t number) const; size_t master_controller_count () const; + uint16_t channels_for_control_list (std::string const& ctrl_name_list) const; PBD::Signal0 Changed; diff --git a/libs/ardour/instrument_info.cc b/libs/ardour/instrument_info.cc index c00efeedbf..2d5a156d4a 100644 --- a/libs/ardour/instrument_info.cc +++ b/libs/ardour/instrument_info.cc @@ -178,6 +178,29 @@ InstrumentInfo::master_device_names () const #endif } +/* reverse lookup which "ChannelNameSet" use "UsesControlNameList ", + * then add all channels that the ChannelNameSet is AvailableForChannels. + */ +uint16_t +InstrumentInfo::channels_for_control_list (std::string const& ctrl_name_list) const +{ + boost::shared_ptr const& dev_names (MidiPatchManager::instance ().master_device_by_model (model ())); + uint16_t channels = 0; + for (int c = 0; c < 16; ++c) { + boost::shared_ptr const& chan_names (dev_names->channel_name_set_by_channel (mode (), c)); + if (!chan_names || !chan_names->available_for_channel (c + 1)) { + continue; + } + if (chan_names->control_list_name () == ctrl_name_list) { + channels |= 0x0001 << c; + } + } + if (channels == 0) { + channels = 65535; + } + return channels; +} + boost::shared_ptr InstrumentInfo::control_name_list (uint8_t channel) { -- cgit v1.2.3