commit e62b15c4fdb2654c972690aec134a3bd0cefbd78 parent 8bb9440d668eab7aefbe563cf9cadeec440bbe89 Author: dsp56300 <dsp56300@users.noreply.github.com> Date: Sat, 17 Aug 2024 22:49:28 +0200 rework resource loading and move parameter description load to base Diffstat:
30 files changed, 134 insertions(+), 247 deletions(-)
diff --git a/source/jucePluginEditorLib/pluginEditor.cpp b/source/jucePluginEditorLib/pluginEditor.cpp @@ -29,6 +29,15 @@ namespace jucePluginEditorLib file.deleteFile(); } + const char* Editor::findResourceByFilename(const std::string& _filename, uint32_t& _size) const + { + const auto res = m_processor.findResource(_filename); + if(!res) + return nullptr; + _size = res->second; + return res->first; + } + void Editor::loadPreset(const std::function<void(const juce::File&)>& _callback) { const auto path = m_processor.getConfig().getValue("load_path", ""); diff --git a/source/jucePluginEditorLib/pluginEditor.h b/source/jucePluginEditorLib/pluginEditor.h @@ -45,7 +45,7 @@ namespace jucePluginEditorLib Editor& operator = (const Editor&) = delete; Editor& operator = (Editor&&) = delete; - virtual const char* findResourceByFilename(const std::string& _filename, uint32_t& _size) = 0; + const char* findResourceByFilename(const std::string& _filename, uint32_t& _size) const; void loadPreset(const std::function<void(const juce::File&)>& _callback); void savePreset(const std::function<void(const juce::File&)>& _callback); diff --git a/source/jucePluginLib/controller.cpp b/source/jucePluginLib/controller.cpp @@ -1,13 +1,17 @@ #include "controller.h" #include <cassert> +#include <fstream> #include "parameter.h" #include "processor.h" + #include "dsp56kEmu/logging.h" #include "juce_gui_basics/juce_gui_basics.h" // juce::NativeMessageBox +#include "synthLib/os.h" + namespace pluginLib { uint8_t getParameterValue(const Parameter* _p) @@ -15,9 +19,9 @@ namespace pluginLib return static_cast<uint8_t>(_p->getUnnormalizedValue()); } - Controller::Controller(Processor& _processor, const std::string& _parameterDescJson) + Controller::Controller(Processor& _processor, const std::string& _parameterDescJsonFilename) : m_processor(_processor) - , m_descriptions(_parameterDescJson) + , m_descriptions(loadParameterDescriptions(_parameterDescJsonFilename)) , m_locking(*this) , m_parameterLinks(*this) { @@ -566,6 +570,24 @@ namespace pluginLib parseMidiMessage(e); } + std::string Controller::loadParameterDescriptions(const std::string& _filename) const + { + const auto path = synthLib::getModulePath() + _filename; + + const std::ifstream f(path.c_str(), std::ios::in); + if(f.is_open()) + { + std::stringstream buf; + buf << f.rdbuf(); + return buf.str(); + } + + const auto res = m_processor.findResource(_filename); + if(res) + return {res->first, res->second}; + return {}; + } + std::set<std::string> Controller::getRegionIdsForParameter(const Parameter* _param) const { if(!_param) diff --git a/source/jucePluginLib/controller.h b/source/jucePluginLib/controller.h @@ -31,7 +31,7 @@ namespace pluginLib Event<uint8_t> onCurrentPartChanged; - explicit Controller(Processor& _processor, const std::string& _parameterDescJson); + explicit Controller(Processor& _processor, const std::string& _parameterDescJsonFilename); ~Controller() override; virtual void sendParameterChange(const Parameter& _parameter, ParamValue _value) = 0; @@ -84,6 +84,7 @@ namespace pluginLib private: void getMidiMessages(std::vector<synthLib::SMidiEvent>&); void processMidiMessages(); + std::string loadParameterDescriptions(const std::string& _filename) const; public: ParameterLocking& getParameterLocking() { return m_locking; } diff --git a/source/jucePluginLib/processor.cpp b/source/jucePluginLib/processor.cpp @@ -312,6 +312,22 @@ namespace pluginLib return m_device->getPreferredSamplerates(); } + std::optional<std::pair<const char*, uint32_t>> Processor::findResource(const std::string& _filename) const + { + const auto& bd = m_properties.binaryData; + + for(uint32_t i=0; i<bd.listSize; ++i) + { + if (bd.originalFileNames[i] != _filename) + continue; + + int size = 0; + const auto res = bd.getNamedResourceFunc(bd.namedResourceList[i], size); + return {std::make_pair(res, static_cast<uint32_t>(size))}; + } + return {}; + } + void Processor::destroyController() { m_controller.reset(); diff --git a/source/jucePluginLib/processor.h b/source/jucePluginLib/processor.h @@ -25,6 +25,14 @@ namespace pluginLib class Processor : public juce::AudioProcessor { public: + struct BinaryDataRef + { + uint32_t listSize = 0; + const char** originalFileNames = nullptr; + const char** namedResourceList = nullptr; + const char* (*getNamedResourceFunc)(const char*, int&) = nullptr; + }; + struct Properties { const std::string name; @@ -32,6 +40,7 @@ namespace pluginLib const bool wantsMidiInput; const bool producesMidiOut; const bool isMidiEffect; + BinaryDataRef binaryData; }; Processor(const BusesProperties& _busesProperties, Properties _properties); @@ -108,6 +117,7 @@ namespace pluginLib auto& getMidiPorts() { return m_midiPorts; } + std::optional<std::pair<const char*, uint32_t>> findResource(const std::string& _filename) const; protected: void destroyController(); diff --git a/source/mqJucePlugin/PluginProcessor.cpp b/source/mqJucePlugin/PluginProcessor.cpp @@ -1,9 +1,11 @@ #include "PluginProcessor.h" #include "PluginEditorState.h" +#include "BinaryData.h" #include "mqController.h" #include "jucePluginLib/processor.h" + #include "mqLib/device.h" namespace @@ -17,6 +19,17 @@ namespace opts.osxLibrarySubFolder = "Application Support/DSP56300EmulatorVavra"; return opts; } + + pluginLib::Processor::BinaryDataRef getBinaryData() + { + return + { + BinaryData::namedResourceListSize, + BinaryData::originalFilenames, + BinaryData::namedResourceList, + BinaryData::getNamedResource + }; + } } namespace mqJucePlugin @@ -31,7 +44,7 @@ namespace mqJucePlugin .withOutput("Out 2", juce::AudioChannelSet::stereo(), true) .withOutput("Out 3", juce::AudioChannelSet::stereo(), true) #endif - , getOptions(), pluginLib::Processor::Properties{JucePlugin_Name, JucePlugin_IsSynth, JucePlugin_WantsMidiInput, JucePlugin_ProducesMidiOutput, JucePlugin_IsMidiEffect}) + , getOptions(), pluginLib::Processor::Properties{JucePlugin_Name, JucePlugin_IsSynth, JucePlugin_WantsMidiInput, JucePlugin_ProducesMidiOutput, JucePlugin_IsMidiEffect, getBinaryData()}) { getController(); const auto latencyBlocks = getConfig().getIntValue("latencyBlocks", static_cast<int>(getPlugin().getLatencyBlocks())); diff --git a/source/mqJucePlugin/mqController.cpp b/source/mqJucePlugin/mqController.cpp @@ -44,7 +44,7 @@ namespace mqJucePlugin return g_midiPacketNames[static_cast<uint32_t>(_type)]; } - Controller::Controller(AudioPluginAudioProcessor& p, unsigned char _deviceId) : pluginLib::Controller(p, loadParameterDescriptions()), m_deviceId(_deviceId) + Controller::Controller(AudioPluginAudioProcessor& p, unsigned char _deviceId) : pluginLib::Controller(p, "parameterDescriptions_mq.json"), m_deviceId(_deviceId) { registerParams(p); @@ -96,26 +96,6 @@ namespace mqJucePlugin isMultiMode() ? mqLib::MidiSoundLocation::EditBufferFirstMultiSingle : mqLib::MidiSoundLocation::EditBufferCurrentSingle); } - std::string Controller::loadParameterDescriptions() - { - const auto name = "parameterDescriptions_mq.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 = mqJucePlugin::Editor::findEmbeddedResource(name, size); - if(res) - return {res, size}; - return {}; - } - void Controller::onStateLoaded() { } diff --git a/source/mqJucePlugin/mqController.h b/source/mqJucePlugin/mqController.h @@ -80,8 +80,6 @@ namespace mqJucePlugin private: void selectPreset(int _offset); - static std::string loadParameterDescriptions(); - void onStateLoaded() override; void parseSingle(const pluginLib::SysEx& _msg, const pluginLib::MidiPacket::Data& _data, const pluginLib::MidiPacket::ParamValues& _params); diff --git a/source/mqJucePlugin/mqEditor.cpp b/source/mqJucePlugin/mqEditor.cpp @@ -126,26 +126,6 @@ namespace mqJucePlugin m_frontPanel.reset(); } - const char* Editor::findEmbeddedResource(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* Editor::findResourceByFilename(const std::string& _filename, uint32_t& _size) - { - return findEmbeddedResource(_filename, _size); - } - std::pair<std::string, std::string> Editor::getDemoRestrictionText() const { return {"Vavra", diff --git a/source/mqJucePlugin/mqEditor.h b/source/mqJucePlugin/mqEditor.h @@ -31,8 +31,6 @@ namespace mqJucePlugin Editor& operator = (Editor&&) = delete; Editor& operator = (const Editor&) = delete; - static const char* findEmbeddedResource(const std::string& _filename, uint32_t& _size); - const char* findResourceByFilename(const std::string& _filename, uint32_t& _size) override; std::pair<std::string, std::string> getDemoRestrictionText() const override; Controller& getMqController() const { return m_controller; } diff --git a/source/nord/n2x/n2xJucePlugin/n2xController.cpp b/source/nord/n2x/n2xJucePlugin/n2xController.cpp @@ -2,7 +2,6 @@ #include <fstream> -#include "BinaryData.h" #include "n2xPatchManager.h" #include "n2xPluginProcessor.h" @@ -32,7 +31,7 @@ namespace namespace n2xJucePlugin { - Controller::Controller(AudioPluginAudioProcessor& _p) : pluginLib::Controller(_p, loadParameterDescriptions()), m_state(nullptr) + Controller::Controller(AudioPluginAudioProcessor& _p) : pluginLib::Controller(_p, "parameterDescriptions_n2x.json"), m_state(nullptr) { registerParams(_p); @@ -53,41 +52,6 @@ namespace n2xJucePlugin Controller::~Controller() = default; - const char* findEmbeddedResource(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; - } - - std::string Controller::loadParameterDescriptions() - { - const auto name = "parameterDescriptions_n2x.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 = findEmbeddedResource(name, size); - if(res) - return {res, size}; - return {}; - } - void Controller::onStateLoaded() { requestDump(n2x::SysexByte::EmuGetPotsPosition, 0); diff --git a/source/nord/n2x/n2xJucePlugin/n2xController.h b/source/nord/n2x/n2xJucePlugin/n2xController.h @@ -25,8 +25,6 @@ namespace n2xJucePlugin Controller(AudioPluginAudioProcessor&); ~Controller() override; - static std::string loadParameterDescriptions(); - void onStateLoaded() override; uint8_t getPartCount() const override diff --git a/source/nord/n2x/n2xJucePlugin/n2xEditor.cpp b/source/nord/n2x/n2xJucePlugin/n2xEditor.cpp @@ -139,26 +139,6 @@ namespace n2xJucePlugin m_onSelectedPatchChanged.reset(); } - const char* Editor::findEmbeddedResource(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* Editor::findResourceByFilename(const std::string& _filename, uint32_t& _size) - { - return findEmbeddedResource(_filename, _size); - } - std::pair<std::string, std::string> Editor::getDemoRestrictionText() const { return {}; diff --git a/source/nord/n2x/n2xJucePlugin/n2xEditor.h b/source/nord/n2x/n2xJucePlugin/n2xEditor.h @@ -41,8 +41,6 @@ namespace n2xJucePlugin Editor& operator = (Editor&&) = delete; Editor& operator = (const Editor&) = delete; - static const char* findEmbeddedResource(const std::string& _filename, uint32_t& _size); - const char* findResourceByFilename(const std::string& _filename, uint32_t& _size) override; std::pair<std::string, std::string> getDemoRestrictionText() const override; Controller& getN2xController() const { return m_controller; } diff --git a/source/nord/n2x/n2xJucePlugin/n2xPluginProcessor.cpp b/source/nord/n2x/n2xJucePlugin/n2xPluginProcessor.cpp @@ -3,6 +3,8 @@ #include "n2xController.h" #include "n2xPluginEditorState.h" +#include "BinaryData.h" + #include "jucePluginLib/processor.h" #include "n2xLib/n2xdevice.h" @@ -20,6 +22,17 @@ namespace opts.osxLibrarySubFolder = "Application Support/DSP56300EmulatorNodalRed"; return opts; } + + pluginLib::Processor::BinaryDataRef getBinaryData() + { + return + { + BinaryData::namedResourceListSize, + BinaryData::originalFilenames, + BinaryData::namedResourceList, + BinaryData::getNamedResource + }; + } } namespace n2xJucePlugin @@ -30,7 +43,7 @@ namespace n2xJucePlugin Processor(BusesProperties() .withOutput("Out AB", juce::AudioChannelSet::stereo(), true) .withOutput("Out CD", juce::AudioChannelSet::stereo(), true) - , getOptions(), pluginLib::Processor::Properties{JucePlugin_Name, JucePlugin_IsSynth, JucePlugin_WantsMidiInput, JucePlugin_ProducesMidiOutput, JucePlugin_IsMidiEffect}) + , getOptions(), pluginLib::Processor::Properties{JucePlugin_Name, JucePlugin_IsSynth, JucePlugin_WantsMidiInput, JucePlugin_ProducesMidiOutput, JucePlugin_IsMidiEffect, getBinaryData()}) { getController(); const auto latencyBlocks = getConfig().getIntValue("latencyBlocks", static_cast<int>(getPlugin().getLatencyBlocks())); diff --git a/source/osTIrusJucePlugin/OsTIrusProcessor.cpp b/source/osTIrusJucePlugin/OsTIrusProcessor.cpp @@ -15,6 +15,17 @@ namespace opts.osxLibrarySubFolder = "Application Support/DSP56300Emulator_OsTIrus"; return opts; } + + pluginLib::Processor::BinaryDataRef getBinaryData() + { + return + { + BinaryData::namedResourceListSize, + BinaryData::originalFilenames, + BinaryData::namedResourceList, + BinaryData::getNamedResource + }; + } } //============================================================================== @@ -29,7 +40,7 @@ OsTIrusProcessor::OsTIrusProcessor() : .withOutput("USB 2", juce::AudioChannelSet::stereo(), true) .withOutput("USB 3", juce::AudioChannelSet::stereo(), true) #endif - , ::getConfigOptions(), pluginLib::Processor::Properties{JucePlugin_Name, JucePlugin_IsSynth, JucePlugin_WantsMidiInput, JucePlugin_ProducesMidiOutput, JucePlugin_IsMidiEffect} + , ::getConfigOptions(), pluginLib::Processor::Properties{JucePlugin_Name, JucePlugin_IsSynth, JucePlugin_WantsMidiInput, JucePlugin_ProducesMidiOutput, JucePlugin_IsMidiEffect, getBinaryData()} , virusLib::ROMLoader::findROMs(virusLib::DeviceModel::TI2, virusLib::DeviceModel::Snow), virusLib::DeviceModel::TI2) { postConstruct(); @@ -40,21 +51,6 @@ OsTIrusProcessor::~OsTIrusProcessor() destroyEditorState(); } -const char* OsTIrusProcessor::findEmbeddedResource(const char* _name, uint32_t& _size) const -{ - for(size_t i=0; i<BinaryData::namedResourceListSize; ++i) - { - if (std::string(BinaryData::originalFilenames[i]) != std::string(_name)) - continue; - - int size = 0; - const auto res = BinaryData::getNamedResource(BinaryData::namedResourceList[i], size); - _size = static_cast<uint32_t>(size); - return res; - } - return nullptr; -} - jucePluginEditorLib::PluginEditorState* OsTIrusProcessor::createEditorState() { return new OsTIrusEditorState(*this, getController()); diff --git a/source/osTIrusJucePlugin/OsTIrusProcessor.h b/source/osTIrusJucePlugin/OsTIrusProcessor.h @@ -7,6 +7,6 @@ class OsTIrusProcessor : public virus::VirusProcessor public: OsTIrusProcessor(); ~OsTIrusProcessor() override; - const char* findEmbeddedResource(const char* _name, uint32_t& _size) const override; - jucePluginEditorLib::PluginEditorState* createEditorState() override; + + jucePluginEditorLib::PluginEditorState* createEditorState() override; }; diff --git a/source/osirusJucePlugin/OsirusProcessor.cpp b/source/osirusJucePlugin/OsirusProcessor.cpp @@ -15,6 +15,17 @@ namespace opts.osxLibrarySubFolder = "Application Support/DSP56300 Emulator"; return opts; } + + pluginLib::Processor::BinaryDataRef getBinaryData() + { + return + { + BinaryData::namedResourceListSize, + BinaryData::originalFilenames, + BinaryData::namedResourceList, + BinaryData::getNamedResource + }; + } } //============================================================================== @@ -26,7 +37,7 @@ OsirusProcessor::OsirusProcessor() : .withOutput("Out 2", juce::AudioChannelSet::stereo(), true) .withOutput("Out 3", juce::AudioChannelSet::stereo(), true) #endif - , ::getConfigOptions(), pluginLib::Processor::Properties{JucePlugin_Name, JucePlugin_IsSynth, JucePlugin_WantsMidiInput, JucePlugin_ProducesMidiOutput, JucePlugin_IsMidiEffect} + , ::getConfigOptions(), pluginLib::Processor::Properties{JucePlugin_Name, JucePlugin_IsSynth, JucePlugin_WantsMidiInput, JucePlugin_ProducesMidiOutput, JucePlugin_IsMidiEffect, getBinaryData()} , virusLib::ROMLoader::findROMs(virusLib::DeviceModel::ABC), virusLib::DeviceModel::ABC) { postConstruct(); @@ -37,21 +48,6 @@ OsirusProcessor::~OsirusProcessor() destroyEditorState(); } -const char* OsirusProcessor::findEmbeddedResource(const char* _name, uint32_t& _size) const -{ - for(size_t i=0; i<BinaryData::namedResourceListSize; ++i) - { - if (std::string(BinaryData::originalFilenames[i]) != std::string(_name)) - continue; - - int size = 0; - const auto res = BinaryData::getNamedResource(BinaryData::namedResourceList[i], size); - _size = static_cast<uint32_t>(size); - return res; - } - return nullptr; -} - jucePluginEditorLib::PluginEditorState* OsirusProcessor::createEditorState() { return new OsirusEditorState(*this, getController()); diff --git a/source/osirusJucePlugin/OsirusProcessor.h b/source/osirusJucePlugin/OsirusProcessor.h @@ -8,7 +8,5 @@ public: OsirusProcessor(); ~OsirusProcessor() override; - const char* findEmbeddedResource(const char* _name, uint32_t& _size) const override; - jucePluginEditorLib::PluginEditorState* createEditorState() override; }; diff --git a/source/virusJucePlugin/VirusController.cpp b/source/virusJucePlugin/VirusController.cpp @@ -38,7 +38,7 @@ namespace virus } Controller::Controller(VirusProcessor& p, const virusLib::DeviceModel _defaultModel, unsigned char deviceId) - : pluginLib::Controller(p, loadParameterDescriptions(_defaultModel, p)) + : pluginLib::Controller(p, virusLib::isTIFamily(_defaultModel) ? "parameterDescriptions_TI.json" : "parameterDescriptions_C.json") , m_processor(p) , m_defaultModel(_defaultModel) , m_deviceId(deviceId) @@ -381,26 +381,6 @@ namespace virus return parseMidiPacket(*m, _data, _parameterValues, _msg); } - std::string Controller::loadParameterDescriptions(virusLib::DeviceModel _model, const VirusProcessor& _processor) - { - const auto name = isTIFamily(_model) ? "parameterDescriptions_TI.json" : "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 = _processor.findEmbeddedResource(name, size); - if(res) - return {res, size}; - return {}; - } - void Controller::parseSingle(const pluginLib::SysEx& _msg, const pluginLib::MidiPacket::Data& _data, const pluginLib::MidiPacket::ParamValues& _parameterValues) { SinglePatch patch; diff --git a/source/virusJucePlugin/VirusController.h b/source/virusJucePlugin/VirusController.h @@ -156,8 +156,6 @@ namespace virus bool parseSingle(pluginLib::MidiPacket::Data& _data, pluginLib::MidiPacket::AnyPartParamValues& _parameterValues, const pluginLib::SysEx& _msg, MidiPacketType& usedPacketType) const; private: - std::string loadParameterDescriptions(virusLib::DeviceModel _model, const VirusProcessor& _processor); - Singles m_singles; SinglePatch m_singleEditBuffer; // single mode std::array<SinglePatch, 16> m_singleEditBuffers; // multi mode diff --git a/source/virusJucePlugin/VirusEditor.cpp b/source/virusJucePlugin/VirusEditor.cpp @@ -185,16 +185,6 @@ namespace genericVirusUI return static_cast<virus::Controller&>(m_processor.getController()); } - const char* VirusEditor::findEmbeddedResource(const std::string& _filename, uint32_t& _size) const - { - return m_processor.findEmbeddedResource(_filename.c_str(), _size); - } - - const char* VirusEditor::findResourceByFilename(const std::string& _filename, uint32_t& _size) - { - return findEmbeddedResource(_filename, _size); - } - std::pair<std::string, std::string> VirusEditor::getDemoRestrictionText() const { return { diff --git a/source/virusJucePlugin/VirusEditor.h b/source/virusJucePlugin/VirusEditor.h @@ -57,9 +57,6 @@ namespace genericVirusUI virus::Controller& getController() const; - const char* findEmbeddedResource(const std::string& _filename, uint32_t& _size) const; - const char* findResourceByFilename(const std::string& _filename, uint32_t& _size) override; - std::pair<std::string, std::string> getDemoRestrictionText() const override; genericUI::Button<juce::TextButton>* createJuceComponent(genericUI::Button<juce::TextButton>*, genericUI::UiObject& _object) override; diff --git a/source/virusJucePlugin/VirusProcessor.h b/source/virusJucePlugin/VirusProcessor.h @@ -53,8 +53,6 @@ namespace virus return getModel() == virusLib::DeviceModel::Snow ? 4 : 16; } - virtual const char* findEmbeddedResource(const char* _name, uint32_t& _size) const = 0; - protected: void postConstruct(); diff --git a/source/xtJucePlugin/PluginProcessor.cpp b/source/xtJucePlugin/PluginProcessor.cpp @@ -3,6 +3,8 @@ #include "PluginEditorState.h" #include "xtController.h" +#include "BinaryData.h" + #include "jucePluginLib/processor.h" #include "xtLib/xtDevice.h" @@ -19,6 +21,17 @@ namespace opts.osxLibrarySubFolder = "Application Support/DSP56300EmulatorXenia"; return opts; } + + pluginLib::Processor::BinaryDataRef getBinaryData() + { + return + { + BinaryData::namedResourceListSize, + BinaryData::originalFilenames, + BinaryData::namedResourceList, + BinaryData::getNamedResource + }; + } } namespace xtJucePlugin @@ -30,7 +43,7 @@ namespace xtJucePlugin #if JucePlugin_IsSynth .withOutput("Out 2", juce::AudioChannelSet::stereo(), true) #endif - , getOptions(), pluginLib::Processor::Properties{JucePlugin_Name, JucePlugin_IsSynth, JucePlugin_WantsMidiInput, JucePlugin_ProducesMidiOutput, JucePlugin_IsMidiEffect}) + , getOptions(), pluginLib::Processor::Properties{JucePlugin_Name, JucePlugin_IsSynth, JucePlugin_WantsMidiInput, JucePlugin_ProducesMidiOutput, JucePlugin_IsMidiEffect, getBinaryData()}) { getController(); const auto latencyBlocks = getConfig().getIntValue("latencyBlocks", static_cast<int>(getPlugin().getLatencyBlocks())); diff --git a/source/xtJucePlugin/xtController.cpp b/source/xtJucePlugin/xtController.cpp @@ -65,7 +65,7 @@ namespace namespace xtJucePlugin { - Controller::Controller(AudioPluginAudioProcessor& p, const unsigned char _deviceId) : pluginLib::Controller(p, loadParameterDescriptions()), m_deviceId(_deviceId) + Controller::Controller(AudioPluginAudioProcessor& p, const unsigned char _deviceId) : pluginLib::Controller(p, "parameterDescriptions_xt.json"), m_deviceId(_deviceId) { registerParams(p); @@ -129,41 +129,6 @@ namespace xtJucePlugin return true; } - const char* findEmbeddedResource(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; - } - - std::string Controller::loadParameterDescriptions() - { - const auto name = "parameterDescriptions_xt.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 = findEmbeddedResource(name, size); - if(res) - return {res, size}; - return {}; - } - void Controller::onStateLoaded() { sendSysEx(RequestGlobal); diff --git a/source/xtJucePlugin/xtController.h b/source/xtJucePlugin/xtController.h @@ -94,8 +94,6 @@ namespace xtJucePlugin private: void selectPreset(int _offset); - static std::string loadParameterDescriptions(); - void onStateLoaded() override; uint8_t getPartCount() const override; diff --git a/source/xtJucePlugin/xtEditor.cpp b/source/xtJucePlugin/xtEditor.cpp @@ -133,26 +133,6 @@ namespace xtJucePlugin m_frontPanel.reset(); } - const char* Editor::findEmbeddedResource(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* Editor::findResourceByFilename(const std::string& _filename, uint32_t& _size) - { - return findEmbeddedResource(_filename, _size); - } - std::pair<std::string, std::string> Editor::getDemoRestrictionText() const { return {"Vavra", diff --git a/source/xtJucePlugin/xtEditor.h b/source/xtJucePlugin/xtEditor.h @@ -38,8 +38,6 @@ namespace xtJucePlugin Editor& operator = (Editor&&) = delete; Editor& operator = (const Editor&) = delete; - static const char* findEmbeddedResource(const std::string& _filename, uint32_t& _size); - const char* findResourceByFilename(const std::string& _filename, uint32_t& _size) override; std::pair<std::string, std::string> getDemoRestrictionText() const override; Controller& getXtController() const { return m_controller; }