diff --git a/MidiDriverBase.cpp b/MidiDriverBase.cpp index 6c79802..ba79e60 100644 --- a/MidiDriverBase.cpp +++ b/MidiDriverBase.cpp @@ -550,8 +550,15 @@ void MidiDriverBase::parseDataEntryLSB(int ch, int value) //----------------------------------------------------------------------------- void MidiDriverBase::parseDataEntryMSB(int ch, int value) { - mChStat[ch].dataEntryValue &= 0x00ff; - mChStat[ch].dataEntryValue |= (value & 0x7f) << 8; + mChStat[ch].dataEntryValue &= 0x007f; + //inverts lower bits when negative + if (value > 0x3f) + { + mChStat[ch].dataEntryValue = 0x7f - mChStat[ch].dataEntryValue; + } + //set highest bit only + mChStat[ch].dataEntryValue |= (value & 0x40) << 1; + handleDataEntryValueChange(ch, mChStat[ch].isSettingNRPN, mChStat[ch].isSettingNRPN ? mChStat[ch].nrpn : mChStat[ch].rpn, mChStat[ch].dataEntryValue); } //----------------------------------------------------------------------------- diff --git a/dist/win/x64/C700.dll b/dist/win/x64/C700.dll index d90f276..7bef00f 100644 Binary files a/dist/win/x64/C700.dll and b/dist/win/x64/C700.dll differ diff --git a/dist/win/x86/C700.dll b/dist/win/x86/C700.dll index 81c5028..74cf473 100644 Binary files a/dist/win/x86/C700.dll and b/dist/win/x86/C700.dll differ