gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

commit 95b665b0ff79a635a68a156f6fddbe470e54985e
parent 9563b950731393c29dd2aab9007ab341962ed294
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date:   Wed,  6 Nov 2024 17:23:36 +0100

fix bank select & program change treating MIDI channel as part number, ignoring part to channel mapping

Diffstat:
Msource/virusLib/microcontroller.cpp | 28+++++++++++++++++++++-------
1 file changed, 21 insertions(+), 7 deletions(-)

diff --git a/source/virusLib/microcontroller.cpp b/source/virusLib/microcontroller.cpp @@ -422,19 +422,33 @@ bool Microcontroller::sendMIDI(const SMidiEvent& _ev, FrontpanelState* _fpState/ switch (status) { case M_PROGRAMCHANGE: + if(singleMode) + return partProgramChange(SINGLE, _ev.b); + + for(uint32_t p=0; p<getPartCount(); ++p) { - if(singleMode) - return partProgramChange(SINGLE, _ev.b); - return partProgramChange(channel, _ev.b); + if(channel == getPartMidiChannel(static_cast<uint8_t>(p))) + partProgramChange(static_cast<uint8_t>(p), _ev.b); } + return true; case M_CONTROLCHANGE: switch(_ev.b) { case MC_BANKSELECTLSB: - if(singleMode) - partBankSelect(SINGLE, _ev.c, false); - else - partBankSelect(channel, _ev.c, false); + { + if(singleMode) + { + partBankSelect(SINGLE, _ev.c, false); + } + else + { + for(uint32_t p=0; p<getPartCount(); ++p) + { + if(channel == getPartMidiChannel(static_cast<uint8_t>(p))) + partBankSelect(static_cast<uint8_t>(p), _ev.c, false); + } + } + } return true; default: if(g_pageA.find(_ev.b) != g_pageA.end())