2 |
* * |
* * |
3 |
* libgig - C++ cross-platform Gigasampler format file access library * |
* libgig - C++ cross-platform Gigasampler format file access library * |
4 |
* * |
* * |
5 |
* Copyright (C) 2003-2020 by Christian Schoenebeck * |
* Copyright (C) 2003-2021 by Christian Schoenebeck * |
6 |
* <cuse@users.sourceforge.net> * |
* <cuse@users.sourceforge.net> * |
7 |
* * |
* * |
8 |
* This library is free software; you can redistribute it and/or modify * |
* This library is free software; you can redistribute it and/or modify * |
26 |
|
|
27 |
#include "DLS.h" |
#include "DLS.h" |
28 |
#include <vector> |
#include <vector> |
29 |
|
#include <array> // since C++11 |
30 |
|
|
31 |
#ifndef __has_feature |
#ifndef __has_feature |
32 |
# define __has_feature(x) 0 |
# define __has_feature(x) 0 |
63 |
# define CHUNK_ID_SCRI 0x53637269 // own gig format extension |
# define CHUNK_ID_SCRI 0x53637269 // own gig format extension |
64 |
# define CHUNK_ID_LSNM 0x4c534e4d // own gig format extension |
# define CHUNK_ID_LSNM 0x4c534e4d // own gig format extension |
65 |
# define CHUNK_ID_SCSL 0x5343534c // own gig format extension |
# define CHUNK_ID_SCSL 0x5343534c // own gig format extension |
66 |
|
# define CHUNK_ID_SCPV 0x53435056 // own gig format extension |
67 |
# define CHUNK_ID_LSDE 0x4c534445 // own gig format extension |
# define CHUNK_ID_LSDE 0x4c534445 // own gig format extension |
68 |
# define CHUNK_ID_3DDP 0x33646470 |
# define CHUNK_ID_3DDP 0x33646470 |
69 |
#else // little endian |
#else // little endian |
85 |
# define CHUNK_ID_SCRI 0x69726353 // own gig format extension |
# define CHUNK_ID_SCRI 0x69726353 // own gig format extension |
86 |
# define CHUNK_ID_LSNM 0x4d4e534c // own gig format extension |
# define CHUNK_ID_LSNM 0x4d4e534c // own gig format extension |
87 |
# define CHUNK_ID_SCSL 0x4c534353 // own gig format extension |
# define CHUNK_ID_SCSL 0x4c534353 // own gig format extension |
88 |
|
# define CHUNK_ID_SCPV 0x56504353 // own gig format extension |
89 |
# define CHUNK_ID_LSDE 0x4544534c // own gig format extension |
# define CHUNK_ID_LSDE 0x4544534c // own gig format extension |
90 |
# define CHUNK_ID_3DDP 0x70646433 |
# define CHUNK_ID_3DDP 0x70646433 |
91 |
#endif // WORDS_BIGENDIAN |
#endif // WORDS_BIGENDIAN |
857 |
bool VerifyWaveData(uint32_t* pActually = NULL); |
bool VerifyWaveData(uint32_t* pActually = NULL); |
858 |
protected: |
protected: |
859 |
static size_t Instances; ///< Number of instances of class Sample. |
static size_t Instances; ///< Number of instances of class Sample. |
860 |
static buffer_t InternalDecompressionBuffer; ///< Buffer used for decompression as well as for truncation of 24 Bit -> 16 Bit samples. |
static buffer_t InternalDecompressionBuffer; ///< Buffer used for decompression of samples, and only if no external decompression buffer was supplied. |
861 |
Group* pGroup; ///< pointer to the Group this sample belongs to (always not-NULL) |
Group* pGroup; ///< pointer to the Group this sample belongs to (always not-NULL) |
862 |
file_offset_t FrameOffset; ///< Current offset (sample points) in current sample frame (for decompression only). |
file_offset_t FrameOffset; ///< Current offset (sample points) in current sample frame (for decompression only). |
863 |
file_offset_t* FrameTable; ///< For positioning within compressed samples only: stores the offset values for each frame. |
file_offset_t* FrameTable; ///< For positioning within compressed samples only: stores the offset values for each frame. |
1310 |
uint ScriptSlotCount() const; |
uint ScriptSlotCount() const; |
1311 |
bool IsScriptSlotBypassed(uint index); |
bool IsScriptSlotBypassed(uint index); |
1312 |
void SetScriptSlotBypassed(uint index, bool bBypass); |
void SetScriptSlotBypassed(uint index, bool bBypass); |
1313 |
|
bool IsScriptPatchVariableSet(int slot, String variable); |
1314 |
|
std::map<String,String> GetScriptPatchVariables(int slot); |
1315 |
|
String GetScriptPatchVariable(int slot, String variable); |
1316 |
|
void SetScriptPatchVariable(int slot, String variable, String value); |
1317 |
|
void UnsetScriptPatchVariable(int slot = -1, String variable = ""); |
1318 |
protected: |
protected: |
1319 |
Region* RegionKeyTable[128]; ///< fast lookup for the corresponding Region of a MIDI key |
Region* RegionKeyTable[128]; ///< fast lookup for the corresponding Region of a MIDI key |
1320 |
|
|
1335 |
Script* script; |
Script* script; |
1336 |
bool bypass; |
bool bypass; |
1337 |
}; |
}; |
1338 |
|
typedef std::array<uint8_t,16> _UUID; |
1339 |
|
typedef std::map<String,String> _PatchVars; |
1340 |
|
typedef std::map<int,_PatchVars> _VarsBySlot; |
1341 |
|
typedef std::map<_UUID,_VarsBySlot> _VarsByScript; |
1342 |
MidiRule** pMidiRules; |
MidiRule** pMidiRules; |
1343 |
std::vector<_ScriptPooolEntry> scriptPoolFileOffsets; |
std::vector<_ScriptPooolEntry> scriptPoolFileOffsets; |
1344 |
std::vector<_ScriptPooolRef>* pScriptRefs; |
std::vector<_ScriptPooolRef>* pScriptRefs; |
1345 |
|
_VarsByScript scriptVars; |
1346 |
|
|
1347 |
|
_VarsByScript stripScriptVars(); |
1348 |
|
bool ReferencesScriptWithUuid(const _UUID& uuid); |
1349 |
bool UsesAnyGigFormatExtension() const; |
bool UsesAnyGigFormatExtension() const; |
1350 |
}; |
}; |
1351 |
|
|