From f43935b5c873676a632b23cbfcef45a4431b233d Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sun, 8 Aug 2021 10:34:54 +0200 Subject: Add support for a single midi note that plays multiple instruments. --- src/midimapper.cc | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) (limited to 'src/midimapper.cc') diff --git a/src/midimapper.cc b/src/midimapper.cc index 9593aae..b9316c5 100644 --- a/src/midimapper.cc +++ b/src/midimapper.cc @@ -26,23 +26,25 @@ */ #include "midimapper.h" -int MidiMapper::lookup(int note) +std::vector MidiMapper::lookup(int note_id) { - std::lock_guard guard(mutex); + std::vector instruments; - auto midimap_it = midimap.find(note); - if(midimap_it == midimap.end()) - { - return -1; - } + std::lock_guard guard(mutex); - auto instrmap_it = instrmap.find(midimap_it->second); - if(instrmap_it == instrmap.end()) + for(const auto& map_entry : midimap) { - return -1; + if(map_entry.note_id == note_id) + { + auto instrmap_it = instrmap.find(map_entry.instrument_name); + if(instrmap_it != instrmap.end()) + { + instruments.push_back(instrmap_it->second); + } + } } - return instrmap_it->second; + return instruments; } void MidiMapper::swap(instrmap_t& instrmap, midimap_t& midimap) -- cgit v1.2.3