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 }