gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

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:
Msource/jucePlugin/VirusController.cpp | 27++++++++++++++++++++++++++-
Msource/jucePlugin/VirusController.h | 2++
Msource/jucePlugin/ui3/VirusEditor.cpp | 33+++++++++++++++++++++------------
Msource/jucePlugin/ui3/VirusEditor.h | 2++
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;