added Midi NRPN

This commit is contained in:
2026-05-09 20:37:17 +02:00
parent 6be1b4a911
commit 8ce2db511b
5 changed files with 243 additions and 86 deletions
+33 -18
View File
@@ -896,22 +896,16 @@ void JaySynth::handlePitchWheel (const int midiChannel, const int wheelValue)
}
void JaySynth::handleController (const int midiChannel,
const int controllerNumber,
const int controllerValue)
void JaySynth::handleController (const midiCC_info_t &midiCC_info)
{
midiCC_info.channel = midiChannel;
midiCC_info.ID = controllerNumber;
midiCC_info.value = (synth_float_t)controllerValue/127;
last_midiCC_info[controllerNumber] = midiCC_info;
listeners.call (&JaySynthListener::synthChanged, SYNTH_CHANGED_MIDICC, &midiCC_info);
last_midiCC_info[midiCC_info.ID] = midiCC_info;
listeners.call (&JaySynthListener::synthChanged, SYNTH_CHANGED_MIDICC, (midiCC_info_t*)&midiCC_info);
switch (controllerNumber)
switch (midiCC_info.ID)
{
case 0x40: handleSustainPedal (midiChannel, controllerValue >= 64); break;
case 0x42: handleSostenutoPedal (midiChannel, controllerValue >= 64); break;
case 0x43: handleSoftPedal (midiChannel, controllerValue >= 64); break;
case 0x40: handleSustainPedal (midiCC_info.channel, midiCC_info.value_raw >= 64); break;
case 0x42: handleSostenutoPedal (midiCC_info.channel, midiCC_info.value_raw >= 64); break;
case 0x43: handleSoftPedal (midiCC_info.channel, midiCC_info.value_raw >= 64); break;
default: break;
}
@@ -921,8 +915,8 @@ void JaySynth::handleController (const int midiChannel,
{
JaySynthVoice* const voice = voices.getUnchecked (i);
if (midiChannel <= 0 || voice->isPlayingChannel (midiChannel))
voice->controllerMoved (controllerNumber, controllerValue);
if (midiCC_info.channel <= 0 || voice->isPlayingChannel (midiCC_info.channel))
voice->controllerMoved (midiCC_info.ID, midiCC_info.value_raw);
}
}
@@ -1096,9 +1090,30 @@ void JaySynth::handleMidiEvent (const MidiMessage& m)
}
if (m.isController())
{
handleController (m.getChannel(),
m.getControllerNumber(),
m.getControllerValue());
midiCC_info_t midiCC_info;
midiCC_info.channel = m.getChannel();
midiCC_info.ID = m.getControllerNumber();
midiCC_info.type = MIDI_CONTROLLER_TYPE_CC;
midiCC_info.value_raw = m.getControllerValue();
midiCC_info.value = (synth_float_t)midiCC_info.value_raw/127;
SynthDebug("CC: controllerNumber=%d, controllerValue=%d", midiCC_info.ID, midiCC_info.value_raw);
bool isNrpnProcessing = mMidiNrpn.process(midiCC_info.ID, midiCC_info.value_raw);
if (mMidiNrpn.isValue())
{
midiCC_info.ID = mMidiNrpn.getCommand();
midiCC_info.type = MIDI_CONTROLLER_TYPE_NRPN;
midiCC_info.value_raw = mMidiNrpn.consumeValue();
midiCC_info.value = (synth_float_t)midiCC_info.value_raw/1000;
SynthDebug("NRPN: controllerNumber=%d, controllerValue=%d", midiCC_info.ID, midiCC_info.value_raw);
}
if (!isNrpnProcessing)
{
handleController (midiCC_info);
}
}
if (m.isMidiMachineControlMessage())
{