commit ab3d69ae788ec327931f684096bdecc2dfbc955f
parent f55ce92bc33f94f929a5bc20cde872679be57486
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date: Tue, 30 Jul 2024 16:11:07 +0200
parse single dumps and update parameters
Diffstat:
4 files changed, 135 insertions(+), 79 deletions(-)
diff --git a/source/nord/n2x/n2xJucePlugin/n2xController.cpp b/source/nord/n2x/n2xJucePlugin/n2xController.cpp
@@ -78,6 +78,40 @@ std::string Controller::loadParameterDescriptions()
bool Controller::parseSysexMessage(const pluginLib::SysEx& _msg, synthLib::MidiEventSource)
{
+ if(_msg.size() == n2x::g_singleDumpSize)
+ {
+ return parseSingleDump(_msg);
+ }
+ if(_msg.size() == n2x::g_multiDumpSize)
+ {
+ return parseMultiDump(_msg);
+ }
+ return false;
+}
+
+bool Controller::parseSingleDump(const pluginLib::SysEx& _msg)
+{
+ pluginLib::MidiPacket::Data data;
+ pluginLib::MidiPacket::ParamValues params;
+
+ if(!parseMidiPacket(midiPacketName(MidiPacketType::SingleDump), data, params, _msg))
+ return false;
+
+ const auto bank = data[pluginLib::MidiDataType::Bank];
+ const auto program = data[pluginLib::MidiDataType::Program];
+
+ if(bank == n2x::SysexByte::SingleDumpBankEditBuffer && program < getPartCount())
+ {
+ applyPatchParameters(params, program);
+ return true;
+ }
+
+ assert(false && "receiving a single for a non-edit-buffer is unexpected");
+ return false;
+}
+
+bool Controller::parseMultiDump(const pluginLib::SysEx& _msg)
+{
return false;
}
diff --git a/source/nord/n2x/n2xJucePlugin/n2xController.h b/source/nord/n2x/n2xJucePlugin/n2xController.h
@@ -32,6 +32,8 @@ private:
}
bool parseSysexMessage(const pluginLib::SysEx&, synthLib::MidiEventSource) override;
+ bool parseSingleDump(const pluginLib::SysEx& _msg);
+ bool parseMultiDump(const pluginLib::SysEx& _msg);
bool parseControllerMessage(const synthLib::SMidiEvent&) override;
void sendParameterChange(const pluginLib::Parameter& _parameter, uint8_t _value) override;
diff --git a/source/nord/n2x/n2xJucePlugin/parameterDescriptions_n2x.json b/source/nord/n2x/n2xJucePlugin/parameterDescriptions_n2x.json
@@ -70,9 +70,9 @@
{"index":50, "name":"O1Waveform", "min":0, "max":3, "isDiscrete":true},
{"index":51, "name":"O2Waveform", "min":0, "max":3, "isDiscrete":true},
- {"index":52, "name":"Sync", "min":0, "max":1, "isBool":true, "mask":1, "shift":0},
- {"index":52, "name":"RingMod", "min":0, "max":1, "isBool":true, "mask":1, "shift":1},
- {"index":52, "name":"Distortion", "min":0, "max":1, "isBool":true, "mask":1, "shift":4},
+ {"index":52, "name":"Sync", "min":0, "max":1, "isBool":true},
+ {"index":52, "name":"RingMod", "min":0, "max":1, "isBool":true},
+ {"index":52, "name":"Distortion", "min":0, "max":1, "isBool":true},
{"index":53, "name":"FilterType", "min":0, "max":4, "isDiscrete":true},
{"index":54, "name":"O2Keytrack", "min":0, "max":1, "isBool":true},
{"index":55, "name":"FilterKeytrack", "min":0, "max":1, "isBool":true},
@@ -138,8 +138,8 @@
{"class":"NonPartSensitive", "page":10, "index":311, "name":"PerfMorfTriggerNoteNumberD", "min":23, "max":127, "isDiscrete":true},
{"class":"NonPartSensitive", "page":10, "index":312, "name":"PerfBendRange", "min":0, "max":8, "isDiscrete":true},
{"class":"NonPartSensitive", "page":10, "index":313, "name":"PerfUnisonDetune", "min":0, "max":8, "isDiscrete":true},
- {"class":"NonPartSensitive", "page":10, "index":314, "name":"PerfOutModeAB", "min":0, "max":8, "isDiscrete":true, "mask":3, "shift":0},
- {"class":"NonPartSensitive", "page":10, "index":314, "name":"PerfOutModeCD", "min":0, "max":3, "isDiscrete":true, "mask":3, "shift":4},
+ {"class":"NonPartSensitive", "page":10, "index":314, "name":"PerfOutModeAB", "min":0, "max":8, "isDiscrete":true},
+ {"class":"NonPartSensitive", "page":10, "index":314, "name":"PerfOutModeCD", "min":0, "max":3, "isDiscrete":true},
{"class":"NonPartSensitive", "page":10, "index":315, "name":"PerfGlobalMidiChannel", "min":0, "max":15},
{"class":"NonPartSensitive", "page":10, "index":316, "name":"PerfProgramChange", "min":0, "max":1, "isBool":true},
{"class":"NonPartSensitive", "page":10, "index":317, "name":"PerfMidiControl", "min":0, "max":1, "isBool":true},
@@ -246,83 +246,84 @@
],
"singledump": [
{"type": "byte", "value": "f0"},
- {"type": "byte", "value": "3e"},
- {"type": "byte", "value": "0e"},
+ {"type": "byte", "value": "33"},
{"type": "deviceid"},
- {"type": "byte", "value": "10"},
+ {"type": "byte", "value": "04"},
{"type": "bank"},
{"type": "program"},
- {"type": "param", "name":"O2Pitch" , "mask":"f", "shift":4}, {"type": "param", "name":"O2Pitch" , "mask":"f", "shift":0},
- {"type": "param", "name":"O2PitchFine" , "mask":"f", "shift":4}, {"type": "param", "name":"O2PitchFine" , "mask":"f", "shift":0},
- {"type": "param", "name":"Mix" , "mask":"f", "shift":4}, {"type": "param", "name":"Mix" , "mask":"f", "shift":0},
- {"type": "param", "name":"Cutoff" , "mask":"f", "shift":4}, {"type": "param", "name":"Cutoff" , "mask":"f", "shift":0},
- {"type": "param", "name":"Resonance" , "mask":"f", "shift":4}, {"type": "param", "name":"Resonance" , "mask":"f", "shift":0},
- {"type": "param", "name":"FilterEnvAmount" , "mask":"f", "shift":4}, {"type": "param", "name":"FilterEnvAmount" , "mask":"f", "shift":0},
- {"type": "param", "name":"PW" , "mask":"f", "shift":4}, {"type": "param", "name":"PW" , "mask":"f", "shift":0},
- {"type": "param", "name":"FmDepth" , "mask":"f", "shift":4}, {"type": "param", "name":"FmDepth" , "mask":"f", "shift":0},
- {"type": "param", "name":"FilterEnvA" , "mask":"f", "shift":4}, {"type": "param", "name":"FilterEnvA" , "mask":"f", "shift":0},
- {"type": "param", "name":"FilterEnvD" , "mask":"f", "shift":4}, {"type": "param", "name":"FilterEnvD" , "mask":"f", "shift":0},
- {"type": "param", "name":"FilterEnvS" , "mask":"f", "shift":4}, {"type": "param", "name":"FilterEnvS" , "mask":"f", "shift":0},
- {"type": "param", "name":"FilterEnvR" , "mask":"f", "shift":4}, {"type": "param", "name":"FilterEnvR" , "mask":"f", "shift":0},
- {"type": "param", "name":"AmpEnvA" , "mask":"f", "shift":4}, {"type": "param", "name":"AmpEnvA" , "mask":"f", "shift":0},
- {"type": "param", "name":"AmpEnvD" , "mask":"f", "shift":4}, {"type": "param", "name":"AmpEnvD" , "mask":"f", "shift":0},
- {"type": "param", "name":"AmpEnvS" , "mask":"f", "shift":4}, {"type": "param", "name":"AmpEnvS" , "mask":"f", "shift":0},
- {"type": "param", "name":"AmpEnvR" , "mask":"f", "shift":4}, {"type": "param", "name":"AmpEnvR" , "mask":"f", "shift":0},
- {"type": "param", "name":"Portamento" , "mask":"f", "shift":4}, {"type": "param", "name":"Portamento" , "mask":"f", "shift":0},
- {"type": "param", "name":"Gain" , "mask":"f", "shift":4}, {"type": "param", "name":"Gain" , "mask":"f", "shift":0},
- {"type": "param", "name":"ModEnvA" , "mask":"f", "shift":4}, {"type": "param", "name":"ModEnvA" , "mask":"f", "shift":0},
- {"type": "param", "name":"ModEnvD" , "mask":"f", "shift":4}, {"type": "param", "name":"ModEnvD" , "mask":"f", "shift":0},
- {"type": "param", "name":"ModEnvLevel" , "mask":"f", "shift":4}, {"type": "param", "name":"ModEnvLevel" , "mask":"f", "shift":0},
- {"type": "param", "name":"Lfo1Rate" , "mask":"f", "shift":4}, {"type": "param", "name":"Lfo1Rate" , "mask":"f", "shift":0},
- {"type": "param", "name":"Lfo1Level" , "mask":"f", "shift":4}, {"type": "param", "name":"Lfo1Level" , "mask":"f", "shift":0},
- {"type": "param", "name":"Lfo2Rate" , "mask":"f", "shift":4}, {"type": "param", "name":"Lfo2Rate" , "mask":"f", "shift":0},
- {"type": "param", "name":"ArpRange" , "mask":"f", "shift":4}, {"type": "param", "name":"ArpRange" , "mask":"f", "shift":0},
+ {"type": "param", "name":"O2Pitch" }, {"type": "param", "name":"O2Pitch" , "shiftL":4},
+ {"type": "param", "name":"O2PitchFine" }, {"type": "param", "name":"O2PitchFine" , "shiftL":4},
+ {"type": "param", "name":"Mix" }, {"type": "param", "name":"Mix" , "shiftL":4},
+ {"type": "param", "name":"Cutoff" }, {"type": "param", "name":"Cutoff" , "shiftL":4},
+ {"type": "param", "name":"Resonance" }, {"type": "param", "name":"Resonance" , "shiftL":4},
+ {"type": "param", "name":"FilterEnvAmount" }, {"type": "param", "name":"FilterEnvAmount" , "shiftL":4},
+ {"type": "param", "name":"PW" }, {"type": "param", "name":"PW" , "shiftL":4},
+ {"type": "param", "name":"FmDepth" }, {"type": "param", "name":"FmDepth" , "shiftL":4},
+ {"type": "param", "name":"FilterEnvA" }, {"type": "param", "name":"FilterEnvA" , "shiftL":4},
+ {"type": "param", "name":"FilterEnvD" }, {"type": "param", "name":"FilterEnvD" , "shiftL":4},
+ {"type": "param", "name":"FilterEnvS" }, {"type": "param", "name":"FilterEnvS" , "shiftL":4},
+ {"type": "param", "name":"FilterEnvR" }, {"type": "param", "name":"FilterEnvR" , "shiftL":4},
+ {"type": "param", "name":"AmpEnvA" }, {"type": "param", "name":"AmpEnvA" , "shiftL":4},
+ {"type": "param", "name":"AmpEnvD" }, {"type": "param", "name":"AmpEnvD" , "shiftL":4},
+ {"type": "param", "name":"AmpEnvS" }, {"type": "param", "name":"AmpEnvS" , "shiftL":4},
+ {"type": "param", "name":"AmpEnvR" }, {"type": "param", "name":"AmpEnvR" , "shiftL":4},
+ {"type": "param", "name":"Portamento" }, {"type": "param", "name":"Portamento" , "shiftL":4},
+ {"type": "param", "name":"Gain" }, {"type": "param", "name":"Gain" , "shiftL":4},
+ {"type": "param", "name":"ModEnvA" }, {"type": "param", "name":"ModEnvA" , "shiftL":4},
+ {"type": "param", "name":"ModEnvD" }, {"type": "param", "name":"ModEnvD" , "shiftL":4},
+ {"type": "param", "name":"ModEnvLevel" }, {"type": "param", "name":"ModEnvLevel" , "shiftL":4},
+ {"type": "param", "name":"Lfo1Rate" }, {"type": "param", "name":"Lfo1Rate" , "shiftL":4},
+ {"type": "param", "name":"Lfo1Level" }, {"type": "param", "name":"Lfo1Level" , "shiftL":4},
+ {"type": "param", "name":"Lfo2Rate" }, {"type": "param", "name":"Lfo2Rate" , "shiftL":4},
+ {"type": "param", "name":"ArpRange" }, {"type": "param", "name":"ArpRange" , "shiftL":4},
+
+ {"type": "param", "name":"O2PitchSens" }, {"type": "param", "name":"O2PitchSens" , "shiftL":4},
+ {"type": "param", "name":"O2PitchFineSens" }, {"type": "param", "name":"O2PitchFineSens" , "shiftL":4},
+ {"type": "param", "name":"MixSens" }, {"type": "param", "name":"MixSens" , "shiftL":4},
+ {"type": "param", "name":"CutoffSens" }, {"type": "param", "name":"CutoffSens" , "shiftL":4},
+ {"type": "param", "name":"ResonanceSens" }, {"type": "param", "name":"ResonanceSens" , "shiftL":4},
+ {"type": "param", "name":"FilterEnvAmountSens"}, {"type": "param", "name":"FilterEnvAmountSens", "shiftL":4},
+ {"type": "param", "name":"PWSens" }, {"type": "param", "name":"PWSens" , "shiftL":4},
+ {"type": "param", "name":"FmDepthSens" }, {"type": "param", "name":"FmDepthSens" , "shiftL":4},
+ {"type": "param", "name":"FilterEnvASens" }, {"type": "param", "name":"FilterEnvASens" , "shiftL":4},
+ {"type": "param", "name":"FilterEnvDSens" }, {"type": "param", "name":"FilterEnvDSens" , "shiftL":4},
+ {"type": "param", "name":"FilterEnvSSens" }, {"type": "param", "name":"FilterEnvSSens" , "shiftL":4},
+ {"type": "param", "name":"FilterEnvRSens" }, {"type": "param", "name":"FilterEnvRSens" , "shiftL":4},
+ {"type": "param", "name":"AmpEnvASens" }, {"type": "param", "name":"AmpEnvASens" , "shiftL":4},
+ {"type": "param", "name":"AmpEnvDSens" }, {"type": "param", "name":"AmpEnvDSens" , "shiftL":4},
+ {"type": "param", "name":"AmpEnvSSens" }, {"type": "param", "name":"AmpEnvSSens" , "shiftL":4},
+ {"type": "param", "name":"AmpEnvRSens" }, {"type": "param", "name":"AmpEnvRSens" , "shiftL":4},
+ {"type": "param", "name":"PortamentoSens" }, {"type": "param", "name":"PortamentoSens" , "shiftL":4},
+ {"type": "param", "name":"GainSens" }, {"type": "param", "name":"GainSens" , "shiftL":4},
+ {"type": "param", "name":"ModEnvASens" }, {"type": "param", "name":"ModEnvASens" , "shiftL":4},
+ {"type": "param", "name":"ModEnvDSens" }, {"type": "param", "name":"ModEnvDSens" , "shiftL":4},
+ {"type": "param", "name":"ModEnvLevelSens" }, {"type": "param", "name":"ModEnvLevelSens" , "shiftL":4},
+ {"type": "param", "name":"Lfo1RateSens" }, {"type": "param", "name":"Lfo1RateSens" , "shiftL":4},
+ {"type": "param", "name":"Lfo1LevelSens" }, {"type": "param", "name":"Lfo1LevelSens" , "shiftL":4},
+ {"type": "param", "name":"Lfo2RateSens" }, {"type": "param", "name":"Lfo2RateSens" , "shiftL":4},
+ {"type": "param", "name":"ArpRangeSens" }, {"type": "param", "name":"ArpRangeSens" , "shiftL":4},
+
+ {"type": "param", "name":"O1Waveform" }, {"type": "param", "name":"O1Waveform" , "shiftL":4},
+ {"type": "param", "name":"O2Waveform" }, {"type": "param", "name":"O2Waveform" , "shiftL":4},
- {"type": "param", "name":"O2PitchSens" , "mask":"f", "shift":4}, {"type": "param", "name":"O2PitchSens" , "mask":"f", "shift":0},
- {"type": "param", "name":"O2PitchFineSens" , "mask":"f", "shift":4}, {"type": "param", "name":"O2PitchFineSens" , "mask":"f", "shift":0},
- {"type": "param", "name":"MixSens" , "mask":"f", "shift":4}, {"type": "param", "name":"MixSens" , "mask":"f", "shift":0},
- {"type": "param", "name":"CutoffSens" , "mask":"f", "shift":4}, {"type": "param", "name":"CutoffSens" , "mask":"f", "shift":0},
- {"type": "param", "name":"ResonanceSens" , "mask":"f", "shift":4}, {"type": "param", "name":"ResonanceSens" , "mask":"f", "shift":0},
- {"type": "param", "name":"FilterEnvAmountSens", "mask":"f", "shift":4}, {"type": "param", "name":"FilterEnvAmountSens", "mask":"f", "shift":0},
- {"type": "param", "name":"PWSens" , "mask":"f", "shift":4}, {"type": "param", "name":"PWSens" , "mask":"f", "shift":0},
- {"type": "param", "name":"FmDepthSens" , "mask":"f", "shift":4}, {"type": "param", "name":"FmDepthSens" , "mask":"f", "shift":0},
- {"type": "param", "name":"FilterEnvASens" , "mask":"f", "shift":4}, {"type": "param", "name":"FilterEnvASens" , "mask":"f", "shift":0},
- {"type": "param", "name":"FilterEnvDSens" , "mask":"f", "shift":4}, {"type": "param", "name":"FilterEnvDSens" , "mask":"f", "shift":0},
- {"type": "param", "name":"FilterEnvSSens" , "mask":"f", "shift":4}, {"type": "param", "name":"FilterEnvSSens" , "mask":"f", "shift":0},
- {"type": "param", "name":"FilterEnvRSens" , "mask":"f", "shift":4}, {"type": "param", "name":"FilterEnvRSens" , "mask":"f", "shift":0},
- {"type": "param", "name":"AmpEnvASens" , "mask":"f", "shift":4}, {"type": "param", "name":"AmpEnvASens" , "mask":"f", "shift":0},
- {"type": "param", "name":"AmpEnvDSens" , "mask":"f", "shift":4}, {"type": "param", "name":"AmpEnvDSens" , "mask":"f", "shift":0},
- {"type": "param", "name":"AmpEnvSSens" , "mask":"f", "shift":4}, {"type": "param", "name":"AmpEnvSSens" , "mask":"f", "shift":0},
- {"type": "param", "name":"AmpEnvRSens" , "mask":"f", "shift":4}, {"type": "param", "name":"AmpEnvRSens" , "mask":"f", "shift":0},
- {"type": "param", "name":"PortamentoSens" , "mask":"f", "shift":4}, {"type": "param", "name":"PortamentoSens" , "mask":"f", "shift":0},
- {"type": "param", "name":"GainSens" , "mask":"f", "shift":4}, {"type": "param", "name":"GainSens" , "mask":"f", "shift":0},
- {"type": "param", "name":"ModEnvASens" , "mask":"f", "shift":4}, {"type": "param", "name":"ModEnvASens" , "mask":"f", "shift":0},
- {"type": "param", "name":"ModEnvDSens" , "mask":"f", "shift":4}, {"type": "param", "name":"ModEnvDSens" , "mask":"f", "shift":0},
- {"type": "param", "name":"ModEnvLevelSens" , "mask":"f", "shift":4}, {"type": "param", "name":"ModEnvLevelSens" , "mask":"f", "shift":0},
- {"type": "param", "name":"Lfo1RateSens" , "mask":"f", "shift":4}, {"type": "param", "name":"Lfo1RateSens" , "mask":"f", "shift":0},
- {"type": "param", "name":"Lfo1LevelSens" , "mask":"f", "shift":4}, {"type": "param", "name":"Lfo1LevelSens" , "mask":"f", "shift":0},
- {"type": "param", "name":"Lfo2RateSens" , "mask":"f", "shift":4}, {"type": "param", "name":"Lfo2RateSens" , "mask":"f", "shift":0},
- {"type": "param", "name":"ArpRangeSens" , "mask":"f", "shift":4}, {"type": "param", "name":"ArpRangeSens" , "mask":"f", "shift":0},
+ {"type": "param", "name":"Sync" , "mask":1, "shift":0},
+ {"type": "param", "name":"RingMod" , "mask":1, "shift":1},
+ {"type": "param", "name":"Distortion" , "mask":1, "shift":0},
- {"type": "param", "name":"O1Waveform" , "mask":"f", "shift":4}, {"type": "param", "name":"O1Waveform" , "mask":"f", "shift":0},
- {"type": "param", "name":"O2Waveform" , "mask":"f", "shift":4}, {"type": "param", "name":"O2Waveform" , "mask":"f", "shift":0},
- {"type": "param", "name":"Sync" , "mask":"f", "shift":4}, {"type": "param", "name":"Sync" , "mask":"f", "shift":0},
- {"type": "param", "name":"RingMod" , "mask":"f", "shift":4}, {"type": "param", "name":"RingMod" , "mask":"f", "shift":0},
- {"type": "param", "name":"Distortion" , "mask":"f", "shift":4}, {"type": "param", "name":"Distortion" , "mask":"f", "shift":0},
- {"type": "param", "name":"FilterType" , "mask":"f", "shift":4}, {"type": "param", "name":"FilterType" , "mask":"f", "shift":0},
- {"type": "param", "name":"O2Keytrack" , "mask":"f", "shift":4}, {"type": "param", "name":"O2Keytrack" , "mask":"f", "shift":0},
- {"type": "param", "name":"FilterKeytrack" , "mask":"f", "shift":4}, {"type": "param", "name":"FilterKeytrack" , "mask":"f", "shift":0},
- {"type": "param", "name":"Lfo1Waveform" , "mask":"f", "shift":4}, {"type": "param", "name":"Lfo1Waveform" , "mask":"f", "shift":0},
- {"type": "param", "name":"Lfo1Dest" , "mask":"f", "shift":4}, {"type": "param", "name":"Lfo1Dest" , "mask":"f", "shift":0},
- {"type": "param", "name":"VoiceMode" , "mask":"f", "shift":4}, {"type": "param", "name":"VoiceMode" , "mask":"f", "shift":0},
- {"type": "param", "name":"ModWheelDest" , "mask":"f", "shift":4}, {"type": "param", "name":"ModWheelDest" , "mask":"f", "shift":0},
- {"type": "param", "name":"Unison" , "mask":"f", "shift":4}, {"type": "param", "name":"Unison" , "mask":"f", "shift":0},
- {"type": "param", "name":"ModEnvDest" , "mask":"f", "shift":4}, {"type": "param", "name":"ModEnvDest" , "mask":"f", "shift":0},
- {"type": "param", "name":"Auto" , "mask":"f", "shift":4}, {"type": "param", "name":"Auto" , "mask":"f", "shift":0},
- {"type": "param", "name":"FilterVelocity" , "mask":"f", "shift":4}, {"type": "param", "name":"FilterVelocity" , "mask":"f", "shift":0},
- {"type": "param", "name":"OctaveShift" , "mask":"f", "shift":4}, {"type": "param", "name":"OctaveShift" , "mask":"f", "shift":0},
- {"type": "param", "name":"Lfo2Dest" , "mask":"f", "shift":4}, {"type": "param", "name":"Lfo2Dest" , "mask":"f", "shift":0},
+ {"type": "param", "name":"FilterType" }, {"type": "param", "name":"FilterType" , "shiftL":4},
+ {"type": "param", "name":"O2Keytrack" }, {"type": "param", "name":"O2Keytrack" , "shiftL":4},
+ {"type": "param", "name":"FilterKeytrack" }, {"type": "param", "name":"FilterKeytrack" , "shiftL":4},
+ {"type": "param", "name":"Lfo1Waveform" }, {"type": "param", "name":"Lfo1Waveform" , "shiftL":4},
+ {"type": "param", "name":"Lfo1Dest" }, {"type": "param", "name":"Lfo1Dest" , "shiftL":4},
+ {"type": "param", "name":"VoiceMode" }, {"type": "param", "name":"VoiceMode" , "shiftL":4},
+ {"type": "param", "name":"ModWheelDest" }, {"type": "param", "name":"ModWheelDest" , "shiftL":4},
+ {"type": "param", "name":"Unison" }, {"type": "param", "name":"Unison" , "shiftL":4},
+ {"type": "param", "name":"ModEnvDest" }, {"type": "param", "name":"ModEnvDest" , "shiftL":4},
+ {"type": "param", "name":"Auto" }, {"type": "param", "name":"Auto" , "shiftL":4},
+ {"type": "param", "name":"FilterVelocity" }, {"type": "param", "name":"FilterVelocity" , "shiftL":4},
+ {"type": "param", "name":"OctaveShift" }, {"type": "param", "name":"OctaveShift" , "shiftL":4},
+ {"type": "param", "name":"Lfo2Dest" }, {"type": "param", "name":"Lfo2Dest" , "shiftL":4},
{"type":"byte", "value":"f7"}
],
diff --git a/source/nord/n2x/n2xLib/n2xmiditypes.h b/source/nord/n2x/n2xLib/n2xmiditypes.h
@@ -6,11 +6,30 @@ namespace n2x
{
enum SysexByte : uint8_t
{
- IdClavia = 0x33,
- IdN2X = 0x04,
+ IdClavia = 0x33, IdN2X = 0x04, DefaultDeviceId = 0xf,
+
SingleDumpBankEditBuffer = 0x00, SingleDumpBankA = 0x01, SingleDumpBankB = 0x02, SingleDumpBankC = 0x03, SingleDumpBankD = 0x04,
SingleRequestBankEditBuffer = 0x0e, SingleRequestBankA = 0x0f, SingleRequestBankB = 0x10, SingleRequestBankC = 0x11, SingleRequestBankD = 0x12,
+
MultiRequestBankEditBuffer = 0x28,
- DefaultDeviceId = 0xf
};
+
+ enum SysexIndex
+ {
+ IdxClavia = 1,
+ IdxDevice,
+ IdxN2x,
+ IdxMsgType,
+ IdxMsgSpec,
+ };
+
+ static constexpr uint32_t g_sysexHeaderSize = 6; // F0, IdClavia, IdDevice, IdN2x, MsgType, MsgSpec
+ static constexpr uint32_t g_sysexFooterSize = 1; // F7
+ static constexpr uint32_t g_sysexContainerSize = g_sysexHeaderSize + g_sysexFooterSize;
+
+ static constexpr uint32_t g_singleDataSize = 66 * 2; // 66 parameters in two nibbles
+ static constexpr uint32_t g_multiDataSize = 4 * g_singleDataSize + 90 * 2; // 4 singles and 90 params in two nibbles
+
+ static constexpr uint32_t g_singleDumpSize = g_singleDataSize + g_sysexContainerSize;
+ static constexpr uint32_t g_multiDumpSize = g_multiDataSize + g_sysexContainerSize;
}