38 |
# define CHUNK_ID_3EWG 0x33657767 |
# define CHUNK_ID_3EWG 0x33657767 |
39 |
# define CHUNK_ID_EWAV 0x65776176 |
# define CHUNK_ID_EWAV 0x65776176 |
40 |
# define CHUNK_ID_3GNM 0x33676E6D |
# define CHUNK_ID_3GNM 0x33676E6D |
41 |
|
# define CHUNK_ID_EINF 0x65696E66 |
42 |
|
# define CHUNK_ID_3CRC 0x33637263 |
43 |
#else // little endian |
#else // little endian |
44 |
# define LIST_TYPE_3PRG 0x67727033 |
# define LIST_TYPE_3PRG 0x67727033 |
45 |
# define LIST_TYPE_3EWL 0x6C776533 |
# define LIST_TYPE_3EWL 0x6C776533 |
52 |
# define CHUNK_ID_3EWG 0x67776533 |
# define CHUNK_ID_3EWG 0x67776533 |
53 |
# define CHUNK_ID_EWAV 0x76617765 |
# define CHUNK_ID_EWAV 0x76617765 |
54 |
# define CHUNK_ID_3GNM 0x6D6E6733 |
# define CHUNK_ID_3GNM 0x6D6E6733 |
55 |
|
# define CHUNK_ID_EINF 0x666E6965 |
56 |
|
# define CHUNK_ID_3CRC 0x63726333 |
57 |
#endif // WORDS_BIGENDIAN |
#endif // WORDS_BIGENDIAN |
58 |
|
|
59 |
/** Gigasampler specific classes and definitions */ |
/** Gigasampler specific classes and definitions */ |
323 |
progress_t(); |
progress_t(); |
324 |
}; |
}; |
325 |
|
|
326 |
|
/** @brief CRC-32 checksum implementation |
327 |
|
* |
328 |
|
* This class is used to calculate checksums of the sample data in |
329 |
|
* a gig file. The checksums are stored in the 3crc chunk of the |
330 |
|
* gig file and automatically updated when a sample is written |
331 |
|
* with Sample::Write(). |
332 |
|
*/ |
333 |
|
class CRC { |
334 |
|
private: |
335 |
|
uint32_t value; |
336 |
|
static const uint32_t* table; |
337 |
|
static uint32_t* initTable(); |
338 |
|
public: |
339 |
|
CRC() { |
340 |
|
reset(); |
341 |
|
} |
342 |
|
void reset() { |
343 |
|
value = 0xffffffff; |
344 |
|
} |
345 |
|
void update(unsigned char* buf, int len) { |
346 |
|
for (int i = 0 ; i < len ; i++) { |
347 |
|
value = table[(value ^ buf[i]) & 0xff] ^ (value >> 8); |
348 |
|
} |
349 |
|
} |
350 |
|
uint32_t getValue() { |
351 |
|
return value ^ 0xffffffff; |
352 |
|
} |
353 |
|
}; |
354 |
|
|
355 |
// just symbol prototyping |
// just symbol prototyping |
356 |
class File; |
class File; |
357 |
class Instrument; |
class Instrument; |
592 |
unsigned long FileNo; ///< File number (> 0 when sample is stored in an extension file, 0 when it's in the gig) |
unsigned long FileNo; ///< File number (> 0 when sample is stored in an extension file, 0 when it's in the gig) |
593 |
RIFF::Chunk* pCk3gix; |
RIFF::Chunk* pCk3gix; |
594 |
RIFF::Chunk* pCkSmpl; |
RIFF::Chunk* pCkSmpl; |
595 |
|
CRC crc; ///< CRC-32 checksum of the raw sample data |
596 |
|
|
597 |
Sample(File* pFile, RIFF::List* waveList, unsigned long WavePoolOffset, unsigned long fileNo = 0); |
Sample(File* pFile, RIFF::List* waveList, unsigned long WavePoolOffset, unsigned long fileNo = 0); |
598 |
~Sample(); |
~Sample(); |
729 |
/** Parses Gigasampler files and provides abstract access to the data. */ |
/** Parses Gigasampler files and provides abstract access to the data. */ |
730 |
class File : protected DLS::File { |
class File : protected DLS::File { |
731 |
public: |
public: |
732 |
|
static const DLS::version_t VERSION_2; |
733 |
|
static const DLS::version_t VERSION_3; |
734 |
|
|
735 |
// derived attributes from DLS::Resource |
// derived attributes from DLS::Resource |
736 |
DLS::Resource::pInfo; |
DLS::Resource::pInfo; |
737 |
DLS::Resource::pDLSID; |
DLS::Resource::pDLSID; |
771 |
// own protected methods |
// own protected methods |
772 |
virtual void LoadSamples(progress_t* pProgress); |
virtual void LoadSamples(progress_t* pProgress); |
773 |
virtual void LoadInstruments(progress_t* pProgress); |
virtual void LoadInstruments(progress_t* pProgress); |
774 |
|
void SetSampleChecksum(Sample* pSample, uint32_t crc); |
775 |
friend class Region; |
friend class Region; |
776 |
friend class Sample; |
friend class Sample; |
777 |
friend class Group; // so Group can access protected member pRIFF |
friend class Group; // so Group can access protected member pRIFF |
778 |
private: |
private: |
779 |
|
static const DLS::Info::FixedStringLength FixedStringLengths[]; |
780 |
std::list<Group*>* pGroups; |
std::list<Group*>* pGroups; |
781 |
std::list<Group*>::iterator GroupsIterator; |
std::list<Group*>::iterator GroupsIterator; |
782 |
}; |
}; |