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

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 }