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:
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())