fixed NRPN

This commit is contained in:
2026-05-10 10:53:26 +02:00
parent 6e67193c3d
commit 31a0c4c009
3 changed files with 20 additions and 28 deletions
+2 -2
View File
@@ -1102,9 +1102,9 @@ void JaySynth::handleMidiEvent (const MidiMessage& m)
bool isNrpnProcessing = mMidiNrpn.process(midiCC_info.ID, midiCC_info.value_raw); bool isNrpnProcessing = mMidiNrpn.process(midiCC_info.ID, midiCC_info.value_raw);
if (mMidiNrpn.isValid()) if (mMidiNrpn.isValid())
{ {
midiCC_info.ID = mMidiNrpn.getCommand(); midiCC_info.ID = mMidiNrpn.getId();
midiCC_info.type = MIDI_CONTROLLER_TYPE_NRPN; midiCC_info.type = MIDI_CONTROLLER_TYPE_NRPN;
midiCC_info.value_raw = mMidiNrpn.consumeValue(); midiCC_info.value_raw = mMidiNrpn.getValue();
midiCC_info.value = (synth_float_t)midiCC_info.value_raw/mMidiNrpn.getMaxValue(); midiCC_info.value = (synth_float_t)midiCC_info.value_raw/mMidiNrpn.getMaxValue();
SynthDebug("NRPN: controllerNumber=%d, controllerValue=%d", midiCC_info.ID, midiCC_info.value_raw); SynthDebug("NRPN: controllerNumber=%d, controllerValue=%d", midiCC_info.ID, midiCC_info.value_raw);
} }
+14 -22
View File
@@ -2,7 +2,7 @@
MidiNrpn::MidiNrpn() MidiNrpn::MidiNrpn()
: mState(0) : mState(0)
, mCommand(0) , mId(0)
, mValue(0) , mValue(0)
, mMaxValue(0) , mMaxValue(0)
, mIsValid(false) , mIsValid(false)
@@ -18,42 +18,34 @@ MidiNrpn::~MidiNrpn()
void MidiNrpn::reset() void MidiNrpn::reset()
{ {
mIsValid = false; mIsValid = false;
mCommand = 0; mId = 0;
mValue = 0; mValue = 0;
mMaxValue = 0; mMaxValue = 0;
mState = 0; mState = 0;
} }
int MidiNrpn::getCommand() int MidiNrpn::getId()
{ {
if (!mIsValid) return mId;
{
return -1;
}
return mCommand;
} }
bool MidiNrpn::isValid() bool MidiNrpn::isValid(bool doClear)
{ {
return mIsValid; bool result = mIsValid;
if (doClear)
{
mIsValid = false;
}
return result;
} }
int MidiNrpn::consumeValue() int MidiNrpn::getValue()
{ {
if (!mIsValid)
{
return -1;
}
mIsValid = false;
return mValue; return mValue;
} }
int MidiNrpn::getMaxValue() int MidiNrpn::getMaxValue()
{ {
if (!mIsValid)
{
return 0;
}
return mMaxValue; return mMaxValue;
} }
@@ -66,7 +58,7 @@ bool MidiNrpn::process(uint8_t controllerNumber, uint8_t controllerValue)
if (controllerNumber == 99) if (controllerNumber == 99)
{ {
state_nxt = 1; state_nxt = 1;
mCommand = (uint16_t)controllerValue & 0x007F; mId = (uint16_t)controllerValue & 0x007F;
} }
break; break;
@@ -74,7 +66,7 @@ bool MidiNrpn::process(uint8_t controllerNumber, uint8_t controllerValue)
if (controllerNumber == 98) if (controllerNumber == 98)
{ {
state_nxt = 2; state_nxt = 2;
mCommand = mCommand << 7 | (uint16_t)controllerValue & 0x007F; mId = mId << 7 | (uint16_t)controllerValue & 0x007F;
} }
else else
{ {
+4 -4
View File
@@ -13,10 +13,10 @@ class MidiNrpn
void reset(); void reset();
bool isValid(); bool isValid(bool doClear=true);
int getCommand(); int getId();
int consumeValue(); int getValue();
int getMaxValue(); int getMaxValue();
bool process(uint8_t controllerNumber, uint8_t controllerValue); bool process(uint8_t controllerNumber, uint8_t controllerValue);
@@ -24,7 +24,7 @@ class MidiNrpn
private: private:
int mState; int mState;
int mCommand; int mId;
int mValue; int mValue;
int mMaxValue; int mMaxValue;
bool mIsValid; bool mIsValid;