vstpreset.h (993B)
1 #pragma once 2 3 #include <cstdint> 4 #include <vector> 5 #include <array> 6 #include <optional> 7 8 #include "baseLib/binarystream.h" 9 10 namespace synthLib 11 { 12 class VstPreset 13 { 14 public: 15 using ChunkData = std::vector<uint8_t>; 16 using FourCC = std::array<char, 5>; // + null terminator 17 18 struct Chunk 19 { 20 FourCC id = {0,0,0,0,0}; 21 ChunkData data; 22 }; 23 24 using ChunkList = std::vector<Chunk>; 25 26 enum class Endian : uint8_t 27 { 28 Big, 29 Little 30 }; 31 32 static std::optional<ChunkList> read(const std::vector<uint8_t>& _data); 33 34 static std::optional<ChunkList> readFxbFxp(baseLib::BinaryStream& _binaryStream); 35 static std::optional<ChunkList> readVst3(baseLib::BinaryStream& _binaryStream); 36 37 static constexpr Endian hostEndian() 38 { 39 constexpr uint32_t test32 = 0x01020304; 40 constexpr uint8_t test8 = static_cast<const uint8_t&>(test32); 41 42 static_assert(test8 == 0x01 || test8 == 0x04, "unable to determine endianess"); 43 44 return test8 == 0x01 ? Endian::Big : Endian::Little; 45 } 46 }; 47 }