commit 9914f2ae736c34bca7a4b5607c7fa16d5e7e7a59
parent 2c53030be29d5ac3c144691765e6258560eda12b
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date: Tue, 30 Jul 2024 10:23:50 +0200
request device state at startup
Diffstat:
3 files changed, 52 insertions(+), 1 deletion(-)
diff --git a/source/nord/n2x/n2xJucePlugin/n2xController.cpp b/source/nord/n2x/n2xJucePlugin/n2xController.cpp
@@ -8,14 +8,35 @@
#include "synthLib/os.h"
#include "dsp56kEmu/logging.h"
+#include "n2xLib/n2xmiditypes.h"
namespace
{
+ constexpr const char* g_midiPacketNames[] =
+ {
+ "requestdump",
+ "singledump",
+ "multidump"
+ };
+
+ 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)];
+ }
}
Controller::Controller(AudioPluginAudioProcessor& _p) : pluginLib::Controller(_p, loadParameterDescriptions())
{
registerParams(_p);
+
+ requestDump(n2x::SysexByte::SingleRequestBankEditBuffer, 0); // single edit buffers A-D
+ requestDump(n2x::SysexByte::SingleRequestBankEditBuffer, 1);
+ requestDump(n2x::SysexByte::SingleRequestBankEditBuffer, 2);
+ requestDump(n2x::SysexByte::SingleRequestBankEditBuffer, 3);
+
+ requestDump(n2x::SysexByte::MultiRequestBankEditBuffer, 0); // performance edit buffer
}
Controller::~Controller() = default;
@@ -69,3 +90,19 @@ bool Controller::parseControllerMessage(const synthLib::SMidiEvent&)
void Controller::sendParameterChange(const pluginLib::Parameter& _parameter, const uint8_t _value)
{
}
+
+bool Controller::sendSysEx(MidiPacketType _packet, const std::map<pluginLib::MidiDataType, uint8_t>& _params) const
+{
+ return pluginLib::Controller::sendSysEx(midiPacketName(_packet), _params);
+}
+
+void Controller::requestDump(const uint8_t _bank, const uint8_t _patch) const
+{
+ std::map<pluginLib::MidiDataType, uint8_t> params;
+
+ params[pluginLib::MidiDataType::DeviceId] = n2x::SysexByte::DefaultDeviceId;
+ params[pluginLib::MidiDataType::Bank] = static_cast<uint8_t>(_bank);
+ params[pluginLib::MidiDataType::Program] = _patch;
+
+ sendSysEx(MidiPacketType::RequestDump, params);
+}
diff --git a/source/nord/n2x/n2xJucePlugin/n2xController.h b/source/nord/n2x/n2xJucePlugin/n2xController.h
@@ -7,6 +7,15 @@ class AudioPluginAudioProcessor;
class Controller : public pluginLib::Controller
{
public:
+ enum class MidiPacketType
+ {
+ RequestDump,
+ SingleDump,
+ MultiDump,
+
+ Count
+ };
+
Controller(AudioPluginAudioProcessor&);
~Controller() override;
@@ -24,5 +33,9 @@ private:
bool parseSysexMessage(const pluginLib::SysEx&, synthLib::MidiEventSource) override;
bool parseControllerMessage(const synthLib::SMidiEvent&) override;
+
void sendParameterChange(const pluginLib::Parameter& _parameter, uint8_t _value) override;
+ bool sendSysEx(MidiPacketType _packet, const std::map<pluginLib::MidiDataType, uint8_t>& _params) const;
+
+ void requestDump(uint8_t _bank, uint8_t _patch) const;
};
diff --git a/source/nord/n2x/n2xLib/n2xmiditypes.h b/source/nord/n2x/n2xLib/n2xmiditypes.h
@@ -9,7 +9,8 @@ namespace n2x
IdClavia = 0x33,
IdN2X = 0x04,
SingleDumpBankEditBuffer = 0x00, SingleDumpBankA = 0x01, SingleDumpBankB = 0x02, SingleDumpBankC = 0x03, SingleDumpBankD = 0x04,
-// SingleRequestBankEditBuffer = 0x0a, SingleRequestBankA = 0x0b, SingleRequestBankB = 0x0c, SingleRequestBankC = 0x0d, SingleRequestBankD = 0x0e,
+ SingleRequestBankEditBuffer = 0x0e, SingleRequestBankA = 0x0f, SingleRequestBankB = 0x10, SingleRequestBankC = 0x11, SingleRequestBankD = 0x12,
+ MultiRequestBankEditBuffer = 0x28,
DefaultDeviceId = 0xf
};
}