diff options
author | Nils Brederlow <62596379+dingodoppelt@users.noreply.github.com> | 2022-02-03 20:57:53 +0100 |
---|---|---|
committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2022-02-03 20:57:53 +0100 |
commit | 76d649620c321d94cf8fcbe8ee5f006ffd191b14 (patch) | |
tree | fbff2cbb76b620845eaf5b192ef928b0f95e0897 /src/audioinputenginemidi.cc | |
parent | 235ad6fbbce2e0ae9e06db960a5ba3b099936ace (diff) |
Add feature CC to note to midimap
Diffstat (limited to 'src/audioinputenginemidi.cc')
-rw-r--r-- | src/audioinputenginemidi.cc | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/audioinputenginemidi.cc b/src/audioinputenginemidi.cc index 69aeeb6..c4041e3 100644 --- a/src/audioinputenginemidi.cc +++ b/src/audioinputenginemidi.cc @@ -78,7 +78,7 @@ bool AudioInputEngineMidi::loadMidiMap(const std::string& file, instrmap[instruments[i]->getName()] = i; } - mmap.swap(instrmap, midimap_parser.midimap); + mmap.swap(instrmap, midimap_parser.midimap, midimap_parser.ccmap); midimap = file; is_valid = true; @@ -100,6 +100,7 @@ bool AudioInputEngineMidi::isValid() const static const std::uint8_t NoteOff = 0x80; static const std::uint8_t NoteOn = 0x90; static const std::uint8_t NoteAftertouch = 0xA0; +static const std::uint8_t CC = 0xB0; // Note type mask: static int const NoteMask = 0xF0; @@ -114,9 +115,23 @@ void AudioInputEngineMidi::processNote(const std::uint8_t* midi_buffer, return; } + if(((midi_buffer[0] & NoteMask) == CC) && (midi_buffer[2] == 127)) + { + std::uint8_t intermediateBuffer[3]; + auto notes = mmap.lookupCC(midi_buffer[1]); + intermediateBuffer[0] = NoteOn; + intermediateBuffer[2] = 127; + for(const auto& note_idx : notes) + { + intermediateBuffer[1] = (std::size_t)note_idx; + processNote(intermediateBuffer, 3, offset, events); + } + return; + } + auto key = midi_buffer[1]; auto velocity = midi_buffer[2]; - auto instrument_idx = mmap.lookup(key); + //auto instrument_idx = mmap.lookup(key); auto instruments = mmap.lookup(key); for(const auto& instrument_idx : instruments) { |