parameterdescriptions.h (2235B)
1 #pragma once 2 3 #include <unordered_map> 4 #include <string> 5 #include <vector> 6 7 #include "controllermap.h" 8 #include "midipacket.h" 9 #include "parameterdescription.h" 10 #include "parameterlink.h" 11 #include "parameterregion.h" 12 13 namespace synthLib 14 { 15 struct SMidiEvent; 16 } 17 18 namespace juce 19 { 20 class var; 21 class DynamicObject; 22 } 23 24 namespace pluginLib 25 { 26 class ParameterDescriptions 27 { 28 public: 29 explicit ParameterDescriptions(const std::string& _jsonString); 30 31 const std::vector<Description>& getDescriptions() const 32 { 33 return m_descriptions; 34 } 35 36 const MidiPacket* getMidiPacket(const std::string& _name) const; 37 38 static std::string removeComments(std::string _json); 39 40 bool getIndexByName(uint32_t& _index, const std::string& _name) const; 41 42 const std::unordered_map<std::string, MidiPacket>& getMidiPackets() const { return m_midiPackets; } 43 44 const auto& getRegions() const { return m_regions; } 45 46 const ValueList* getValueList(const std::string& _key) const; 47 48 const std::string& getErrors() const { return m_errors; } 49 bool isValid() const { return getErrors().empty(); } 50 51 const auto& getControllerMap() const { return m_controllerMap; } 52 53 private: 54 std::string loadJson(const std::string& _jsonString); 55 56 std::string parseValueList(const std::string& _key, const juce::var& _values); 57 58 void parseMidiPackets(std::stringstream& _errors, juce::DynamicObject* _packets); 59 void parseMidiPacket(std::stringstream& _errors, const std::string& _key, const juce::var& _value); 60 61 void parseParameterRegions(std::stringstream& _errors, const juce::Array<juce::var>* _regions); 62 void parseParameterRegion(std::stringstream& _errors, const juce::var& _value); 63 64 void parseControllerMap(std::stringstream& _errors, const juce::Array<juce::var>* _controllers); 65 void parseController(std::stringstream& _errors, const juce::var& _value); 66 67 std::unordered_map<std::string, ValueList> m_valueLists; 68 std::vector<Description> m_descriptions; 69 std::unordered_map<std::string, uint32_t> m_nameToIndex; 70 std::unordered_map<std::string, MidiPacket> m_midiPackets; 71 std::vector<ParameterLink> m_parameterLinks; 72 std::unordered_map<std::string, ParameterRegion> m_regions; 73 ControllerMap m_controllerMap; 74 75 std::string m_errors; 76 }; 77 }