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);
if (mMidiNrpn.isValid())
{
midiCC_info.ID = mMidiNrpn.getCommand();
midiCC_info.ID = mMidiNrpn.getId();
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();
SynthDebug("NRPN: controllerNumber=%d, controllerValue=%d", midiCC_info.ID, midiCC_info.value_raw);
}
+14 -22
View File
@@ -2,7 +2,7 @@
MidiNrpn::MidiNrpn()
: mState(0)
, mCommand(0)
, mId(0)
, mValue(0)
, mMaxValue(0)
, mIsValid(false)
@@ -18,42 +18,34 @@ MidiNrpn::~MidiNrpn()
void MidiNrpn::reset()
{
mIsValid = false;
mCommand = 0;
mId = 0;
mValue = 0;
mMaxValue = 0;
mState = 0;
}
int MidiNrpn::getCommand()
int MidiNrpn::getId()
{
if (!mIsValid)
{
return -1;
}
return mCommand;
return mId;
}
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;
}
int MidiNrpn::getMaxValue()
{
if (!mIsValid)
{
return 0;
}
return mMaxValue;
}
@@ -66,7 +58,7 @@ bool MidiNrpn::process(uint8_t controllerNumber, uint8_t controllerValue)
if (controllerNumber == 99)
{
state_nxt = 1;
mCommand = (uint16_t)controllerValue & 0x007F;
mId = (uint16_t)controllerValue & 0x007F;
}
break;
@@ -74,7 +66,7 @@ bool MidiNrpn::process(uint8_t controllerNumber, uint8_t controllerValue)
if (controllerNumber == 98)
{
state_nxt = 2;
mCommand = mCommand << 7 | (uint16_t)controllerValue & 0x007F;
mId = mId << 7 | (uint16_t)controllerValue & 0x007F;
}
else
{
+4 -4
View File
@@ -13,10 +13,10 @@ class MidiNrpn
void reset();
bool isValid();
bool isValid(bool doClear=true);
int getCommand();
int consumeValue();
int getId();
int getValue();
int getMaxValue();
bool process(uint8_t controllerNumber, uint8_t controllerValue);
@@ -24,7 +24,7 @@ class MidiNrpn
private:
int mState;
int mCommand;
int mId;
int mValue;
int mMaxValue;
bool mIsValid;