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

weData.h (2905B)


      1 #pragma once
      2 
      3 #include <cstdint>
      4 #include <optional>
      5 #include <vector>
      6 
      7 #include "weTypes.h"
      8 
      9 #include "xtLib/xtMidiTypes.h"
     10 #include "xtLib/xtState.h"
     11 
     12 #include "jucePluginLib/midipacket.h"
     13 
     14 #include "baseLib/event.h"
     15 
     16 namespace xtJucePlugin
     17 {
     18 	class Controller;
     19 
     20 	class WaveEditorData
     21 	{
     22 	public:
     23 		baseLib::Event<xt::WaveId> onWaveChanged;
     24 		baseLib::Event<xt::TableId> onTableChanged;
     25 
     26 		WaveEditorData(Controller& _controller, const std::string& _cacheDir);
     27 
     28 		void requestData();
     29 
     30 		bool isWaitingForWave() const { return m_currentWaveRequestIndex != g_invalidWaveIndex; }
     31 		bool isWaitingForTable() const { return m_currentTableRequestIndex != g_invalidTableIndex; }
     32 		bool isWaitingForData() const { return isWaitingForWave() || isWaitingForTable(); }
     33 
     34 		void onReceiveWave(const std::vector<uint8_t>& _msg, bool _sendToDevice = false);
     35 		void onReceiveTable(const std::vector<uint8_t>& _msg, bool _sendToDevice = false);
     36 
     37 		std::optional<xt::WaveData> getWave(xt::WaveId _waveId) const;
     38 		std::optional<xt::WaveData> getWave(xt::TableId _tableIndex, xt::TableIndex _indexInTable) const;
     39 
     40 		xt::WaveId getWaveId(xt::TableId _tableId, xt::TableIndex _tableIndex) const;
     41 
     42 		std::optional<xt::TableData> getTable(xt::TableId _tableId) const;
     43 		bool swapTableEntries(xt::TableId _tableId, xt::TableIndex _indexA, xt::TableIndex _indexB);
     44 		bool setTableWave(xt::TableId _tableId, xt::TableIndex _tableIndex, xt::WaveId _waveId);
     45 
     46 		bool copyTable(xt::TableId _dest, xt::TableId _source);
     47 		bool copyWave(xt::WaveId _dest, xt::WaveId _source);
     48 
     49 		bool setWave(xt::WaveId _id, const xt::WaveData& _data);
     50 		bool setTable(xt::TableId _id, const xt::TableData& _data);
     51 
     52 		bool sendTableToDevice(xt::TableId _id) const;
     53 		bool sendWaveToDevice(xt::WaveId _id) const;
     54 
     55 		void getWaveDataForSingle(std::vector<xt::SysEx>& _results, const xt::SysEx& _single) const;
     56 
     57 	private:
     58 		bool requestWave(xt::WaveId _id);
     59 		bool requestTable(xt::TableId _id);
     60 
     61 		void onAllDataReceived() const;
     62 
     63 		static xt::SysexCommand toCommand(const std::vector<uint8_t>& _sysex);
     64 		static uint16_t toIndex(const std::vector<uint8_t>& _sysex);
     65 		bool parseMidi(const std::vector<uint8_t>& _sysex);
     66 
     67 		std::string getRomCacheFilename() const;
     68 
     69 		void saveRomCache() const;
     70 		void loadRomCache();
     71 		void saveTable(xt::TableId _id) const;
     72 		void saveWave(xt::WaveId _id) const;
     73 
     74 		void loadUserData();
     75 
     76 		static std::string toFilename(xt::WaveId _id);
     77 		static std::string toFilename(xt::TableId _id);
     78 
     79 		Controller& m_controller;
     80 		const std::string m_cacheDir;
     81 
     82 		xt::WaveId m_currentWaveRequestIndex = g_invalidWaveIndex;
     83 		xt::TableId m_currentTableRequestIndex = g_invalidTableIndex;
     84 
     85 		std::array<std::optional<xt::WaveData>, xt::wave::g_romWaveCount> m_romWaves;
     86 		std::array<std::optional<xt::WaveData>, xt::wave::g_ramWaveCount> m_ramWaves;
     87 		std::array<std::optional<xt::TableData>, xt::wave::g_tableCount> m_tables;
     88 	};
     89 }