commit d73785450b16db7375d4019c5a94441c9ef38071
parent 4e065dac6491124c52abdb513344ff0314d07fb5
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date: Fri, 19 Apr 2024 00:56:58 +0200
support mail volume change / more multi preparations
Diffstat:
5 files changed, 77 insertions(+), 62 deletions(-)
diff --git a/source/xtJucePlugin/parameterDescriptions_xt.json b/source/xtJucePlugin/parameterDescriptions_xt.json
@@ -292,7 +292,7 @@
// MULTI
// GLOBAL
- {"page":200, "index":0, "class":"Global", "name":"MainVolume"},
+ {"page":200, "index":12, "class":"Global", "name":"MainVolume"},
// SOFT KNOBS
{"page":300, "index":0, "name":"PlayParamValueA", "min":0, "max":127, "isPublic":true, "softknobTargetSelect":"PlayParamA", "softknobTargetList":"playParamTargets"},
@@ -766,7 +766,6 @@
{"type": "byte", "value": "0e"},
{"type": "deviceid"},
{"type": "byte", "value": "24"},
- {"type": "page"},
{"type": "paramindex"},
{"type": "paramvalue"},
{"type": "byte", "value": "f7"}
diff --git a/source/xtJucePlugin/xtController.cpp b/source/xtJucePlugin/xtController.cpp
@@ -13,36 +13,41 @@
#include "xtFrontPanel.h"
-constexpr const char* g_midiPacketNames[] =
-{
- "requestsingle",
- "requestmulti",
- "requestsinglebank",
- "requestmultibank",
- "requestglobal",
- "requestmode",
- "requestallsingles",
- "singleparameterchange",
- "multiparameterchange",
- "globalparameterchange",
- "singledump",
- "multidump",
- "globaldump",
- "modedump",
- "emuRequestLcd",
- "emuRequestLeds",
- "emuSendButton",
- "emuSendRotary"
-};
-
-static_assert(std::size(g_midiPacketNames) == static_cast<size_t>(Controller::MidiPacketType::Count));
-
namespace
{
+ constexpr const char* g_midiPacketNames[] =
+ {
+ "requestsingle",
+ "requestmulti",
+ "requestsinglebank",
+ "requestmultibank",
+ "requestglobal",
+ "requestmode",
+ "requestallsingles",
+ "singleparameterchange",
+ "multiparameterchange",
+ "globalparameterchange",
+ "singledump",
+ "multidump",
+ "globaldump",
+ "modedump",
+ "emuRequestLcd",
+ "emuRequestLeds",
+ "emuSendButton",
+ "emuSendRotary"
+ };
+
+ static_assert(std::size(g_midiPacketNames) == static_cast<size_t>(Controller::MidiPacketType::Count));
+
const char* midiPacketName(Controller::MidiPacketType _type)
{
return g_midiPacketNames[static_cast<uint32_t>(_type)];
}
+
+ constexpr uint8_t g_pageMulti = 100;
+ constexpr uint8_t g_pageGlobal = 200;
+ constexpr uint8_t g_pageSoftKnobs = 300;
+ constexpr uint8_t g_pageControllers = 400;
}
Controller::Controller(AudioPluginAudioProcessor& p, unsigned char _deviceId) : pluginLib::Controller(p, loadParameterDescriptions()), m_deviceId(_deviceId)
@@ -468,40 +473,55 @@ void Controller::sendParameterChange(const pluginLib::Parameter& _parameter, con
std::map<pluginLib::MidiDataType, uint8_t> data;
- if (desc.page >= 100)
+ switch (desc.page)
{
-// assert(false && "unable to send multi parameter change");
- /*
- uint8_t v;
+ case g_pageGlobal:
+ {
+ data.insert(std::make_pair(pluginLib::MidiDataType::ParameterIndex, _parameter.getDescription().index & 0x7f));
+ data.insert(std::make_pair(pluginLib::MidiDataType::ParameterValue, _value));
- if (!combineParameterChange(v, g_midiPacketNames[MultiDump], _parameter, _value))
- return;
+ sendSysEx(GlobalParameterChange, data);
+ }
+ return;
+ case g_pageMulti:
+ {
+ uint8_t v;
- uint32_t idx = desc.index;
+ if (!combineParameterChange(v, g_midiPacketNames[MultiDump], _parameter, _value))
+ return;
- if(desc.page > 100)
- idx += (static_cast<uint32_t>(xt::MultiParameter::Inst1) - static_cast<uint32_t>(xt::MultiParameter::Inst0)) * (desc.page - 101);
+ uint32_t idx = desc.index;
- data.insert(std::make_pair(pluginLib::MidiDataType::Part, _parameter.getPart()));
- data.insert(std::make_pair(pluginLib::MidiDataType::Page, idx >> 7));
- data.insert(std::make_pair(pluginLib::MidiDataType::ParameterIndex, idx & 0x7f));
- data.insert(std::make_pair(pluginLib::MidiDataType::ParameterValue, v));
+ if(desc.page > 100)
+ idx += (static_cast<uint32_t>(xt::MultiParameter::Inst1First) - static_cast<uint32_t>(xt::MultiParameter::Inst0First)) * (desc.page - 101);
- sendSysEx(MultiParameterChange, data);
- */
- return;
- }
+ data.insert(std::make_pair(pluginLib::MidiDataType::Part, _parameter.getPart()));
+ data.insert(std::make_pair(pluginLib::MidiDataType::Page, idx >> 7));
+ data.insert(std::make_pair(pluginLib::MidiDataType::ParameterIndex, idx & 0x7f));
+ data.insert(std::make_pair(pluginLib::MidiDataType::ParameterValue, v));
- uint8_t v;
- if (!combineParameterChange(v, g_midiPacketNames[SingleDump], _parameter, _value))
+ sendSysEx(MultiParameterChange, data);
+ }
return;
+ case g_pageSoftKnobs:
+ break;
+ case g_pageControllers:
+ break;
+ default:
+ {
+ uint8_t v;
+ if (!combineParameterChange(v, g_midiPacketNames[SingleDump], _parameter, _value))
+ return;
- data.insert(std::make_pair(pluginLib::MidiDataType::Part, _parameter.getPart()));
- data.insert(std::make_pair(pluginLib::MidiDataType::Page, desc.page));
- data.insert(std::make_pair(pluginLib::MidiDataType::ParameterIndex, desc.index));
- data.insert(std::make_pair(pluginLib::MidiDataType::ParameterValue, v));
+ data.insert(std::make_pair(pluginLib::MidiDataType::Part, _parameter.getPart()));
+ data.insert(std::make_pair(pluginLib::MidiDataType::Page, desc.page));
+ data.insert(std::make_pair(pluginLib::MidiDataType::ParameterIndex, desc.index));
+ data.insert(std::make_pair(pluginLib::MidiDataType::ParameterValue, v));
- sendSysEx(SingleParameterChange, data);
+ sendSysEx(SingleParameterChange, data);
+ }
+ break;
+ }
}
bool Controller::sendGlobalParameterChange(xt::GlobalParameter _param, uint8_t _value)
diff --git a/source/xtLib/xtMidiTypes.h b/source/xtLib/xtMidiTypes.h
@@ -64,7 +64,7 @@ namespace xt
IdxMultiParamValue = IdxMultiParamIndexL + 1,
IdxGlobalParamIndexH = wLib::IdxBuffer,
- IdxGlobalParamIndexL = IdxGlobalParamIndexH + 1,
+ IdxGlobalParamIndexL = IdxGlobalParamIndexH,
IdxGlobalParamValue = IdxGlobalParamIndexL + 1,
IdxModeParamIndexH = wLib::IdxBuffer,
diff --git a/source/xtLib/xtState.cpp b/source/xtLib/xtState.cpp
@@ -364,7 +364,10 @@ namespace xt
if(dump.idxParamIndexH >= _data.size() || dump.idxParamIndexL >= _data.size())
return nullptr;
- const auto i = dump.firstParamIndex + ((static_cast<uint32_t>(_data[dump.idxParamIndexH]) << 7) | static_cast<uint32_t>(_data[dump.idxParamIndexL]));
+ auto i = dump.firstParamIndex;
+ if (dump.idxParamIndexH != dump.idxParamIndexL)
+ i += static_cast<uint32_t>(_data[dump.idxParamIndexH]) << 7;
+ i += static_cast<uint32_t>(_data[dump.idxParamIndexL]);
if(i > _dump.size())
return nullptr;
diff --git a/source/xtLib/xtState.h b/source/xtLib/xtState.h
@@ -59,7 +59,7 @@ namespace xt
static constexpr Dump Dumps[] =
{
{DumpType::Single, SysexCommand::SingleRequest, SysexCommand::SingleDump, SysexCommand::SingleParameterChange, IdxSingleParamFirst, IdxSingleParamIndexH, IdxSingleParamIndexL, IdxSingleParamValue, 265},
- {DumpType::Multi , SysexCommand::MultiRequest , SysexCommand::MultiDump , SysexCommand::MultiParameterChange , IdxMultiParamFirst , IdxMultiParamIndexH , IdxMultiParamIndexL , IdxMultiParamValue , 393},
+ {DumpType::Multi , SysexCommand::MultiRequest , SysexCommand::MultiDump , SysexCommand::MultiParameterChange , IdxMultiParamFirst , IdxMultiParamIndexH , IdxMultiParamIndexL , IdxMultiParamValue , 265},
{DumpType::Global, SysexCommand::GlobalRequest, SysexCommand::GlobalDump, SysexCommand::GlobalParameterChange, IdxGlobalParamFirst, IdxGlobalParamIndexH, IdxGlobalParamIndexL, IdxGlobalParamValue, 39},
{DumpType::Mode , SysexCommand::ModeRequest , SysexCommand::ModeDump , SysexCommand::ModeParameterChange , IdxModeParamFirst , IdxModeParamIndexH , IdxModeParamIndexL , IdxModeParamValue , 8},
};
@@ -149,14 +149,7 @@ namespace xt
static bool isValid(const Single& _single)
{
- return _single[IdxSingleParamFirst] == 1;
- }
-
- static bool isValid(const Multi& _multi)
- {
- return _multi.front() == 0xf0;
- // we cannot do this anymore as drum map & multi have the same length
-// return _multi[IdxMultiParamFirst] > 0; // Note: no version number in a multi, assume that Multi volume has to be > 0 to be valid
+ return _single.front() == 0xf0;
}
static bool isValid(const Global& _global)
@@ -166,7 +159,7 @@ namespace xt
static bool isValid(const Mode& _mode)
{
- return _mode.front() == 0xf0; // unable to derive from the packet itself
+ return _mode.front() == 0xf0;
}
static SysexCommand getCommand(const SysEx& _data);