commit d884358ac830f2fb80ab7ab65d009bc81c4d8a79
parent 89554803954ffc9839e5a91423a7fb90251d0577
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date: Sat, 21 May 2022 00:12:01 +0200
add ability to load parameter descriptions json from file
Diffstat:
4 files changed, 51 insertions(+), 13 deletions(-)
diff --git a/source/jucePlugin/VirusController.cpp b/source/jucePlugin/VirusController.cpp
@@ -1,5 +1,7 @@
#include "VirusController.h"
+#include <fstream>
+
#include "VirusParameter.h"
#include "BinaryData.h"
@@ -7,6 +9,9 @@
#include "PluginProcessor.h"
#include "../virusLib/microcontrollerTypes.h"
+#include "../synthLib/os.h"
+
+#include "ui3/VirusEditor.h"
using MessageType = virusLib::SysexMessageType;
@@ -34,7 +39,7 @@ namespace Virus
return g_midiPacketNames[static_cast<uint32_t>(_type)];
}
- Controller::Controller(AudioPluginAudioProcessor &p, unsigned char deviceId) : pluginLib::Controller(BinaryData::parameterDescriptions_C_json), m_processor(p), m_deviceId(deviceId)
+ Controller::Controller(AudioPluginAudioProcessor &p, unsigned char deviceId) : pluginLib::Controller(loadParameterDescriptions()), m_processor(p), m_deviceId(deviceId)
{
registerParams(p);
@@ -306,6 +311,26 @@ namespace Virus
return parseMidiPacket(*m, _data, _parameterValues, _msg);
}
+ std::string Controller::loadParameterDescriptions()
+ {
+ const auto name = "parameterDescriptions_C.json";
+ const auto path = synthLib::getModulePath() + name;
+
+ const std::ifstream f(path.c_str(), std::ios::in);
+ if(f.is_open())
+ {
+ std::stringstream buf;
+ buf << f.rdbuf();
+ return buf.str();
+ }
+
+ uint32_t size;
+ const auto res = genericVirusUI::VirusEditor::findNamedResourceByFilename(name, size);
+ if(res)
+ return {res, size};
+ return {};
+ }
+
void Controller::parseSingle(const SysEx& msg)
{
pluginLib::MidiPacket::Data data;
diff --git a/source/jucePlugin/VirusController.h b/source/jucePlugin/VirusController.h
@@ -108,6 +108,8 @@ namespace Virus
bool parseSingle(pluginLib::MidiPacket::Data& _data, pluginLib::MidiPacket::ParamValues& _parameterValues, const SysEx& _msg) const;
private:
+ static std::string loadParameterDescriptions();
+
void timerCallback() override;
Singles m_singles;
diff --git a/source/jucePlugin/ui3/VirusEditor.cpp b/source/jucePlugin/ui3/VirusEditor.cpp
@@ -143,6 +143,21 @@ namespace genericVirusUI
}
}
+ const char* VirusEditor::findNamedResourceByFilename(const std::string& _filename, uint32_t& _size)
+ {
+ for(size_t i=0; i<BinaryData::namedResourceListSize; ++i)
+ {
+ if (BinaryData::originalFilenames[i] != _filename)
+ continue;
+
+ int size = 0;
+ const auto res = BinaryData::getNamedResource(BinaryData::namedResourceList[i], size);
+ _size = static_cast<uint32_t>(size);
+ return res;
+ }
+ return nullptr;
+ }
+
const char* VirusEditor::getResourceByFilename(const std::string& _name, uint32_t& _dataSize)
{
if(!m_skinFolder.empty())
@@ -190,18 +205,12 @@ namespace genericVirusUI
}
}
- for(size_t i=0; i<BinaryData::namedResourceListSize; ++i)
- {
- if (BinaryData::originalFilenames[i] != _name)
- continue;
-
- int size = 0;
- const auto res = BinaryData::getNamedResource(BinaryData::namedResourceList[i], size);
- _dataSize = static_cast<uint32_t>(size);
- return res;
- }
-
- throw std::runtime_error("Failed to find file named " + _name);
+ uint32_t size = 0;
+ const auto res = findNamedResourceByFilename(_name, size);
+ if(!res)
+ throw std::runtime_error("Failed to find file named " + _name);
+ _dataSize = size;
+ return res;
}
int VirusEditor::getParameterIndexByName(const std::string& _name)
diff --git a/source/jucePlugin/ui3/VirusEditor.h b/source/jucePlugin/ui3/VirusEditor.h
@@ -28,6 +28,8 @@ namespace genericVirusUI
static void setEnabled(juce::Component& _component, bool _enable);
+ static const char* findNamedResourceByFilename(const std::string& _filename, uint32_t& _size);
+
private:
const char* getResourceByFilename(const std::string& _name, uint32_t& _dataSize) override;
int getParameterIndexByName(const std::string& _name) override;