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; |
470 |
double GetVelocityAttenuation(uint8_t MIDIKeyVelocity); |
double GetVelocityAttenuation(uint8_t MIDIKeyVelocity); |
471 |
double GetVelocityRelease(uint8_t MIDIKeyVelocity); |
double GetVelocityRelease(uint8_t MIDIKeyVelocity); |
472 |
double GetVelocityCutoff(uint8_t MIDIKeyVelocity); |
double GetVelocityCutoff(uint8_t MIDIKeyVelocity); |
473 |
|
Region* GetParent() const; |
474 |
|
// derived methods |
475 |
|
DLS::Sampler::AddSampleLoop; |
476 |
|
DLS::Sampler::DeleteSampleLoop; |
477 |
// overridden methods |
// overridden methods |
478 |
virtual void UpdateChunks(); |
virtual void UpdateChunks(); |
479 |
protected: |
protected: |
480 |
uint8_t* VelocityTable; ///< For velocity dimensions with custom defined zone ranges only: used for fast converting from velocity MIDI value to dimension bit number. |
uint8_t* VelocityTable; ///< For velocity dimensions with custom defined zone ranges only: used for fast converting from velocity MIDI value to dimension bit number. |
481 |
DimensionRegion(RIFF::List* _3ewl); |
DimensionRegion(Region* pParent, RIFF::List* _3ewl); |
482 |
|
DimensionRegion(RIFF::List* _3ewl, const DimensionRegion& src); |
483 |
~DimensionRegion(); |
~DimensionRegion(); |
484 |
friend class Region; |
friend class Region; |
485 |
private: |
private: |
518 |
double* pVelocityAttenuationTable; ///< Points to the velocity table corresponding to the velocity parameters of this DimensionRegion. |
double* pVelocityAttenuationTable; ///< Points to the velocity table corresponding to the velocity parameters of this DimensionRegion. |
519 |
double* pVelocityReleaseTable; ///< Points to the velocity table corresponding to the release velocity parameters of this DimensionRegion |
double* pVelocityReleaseTable; ///< Points to the velocity table corresponding to the release velocity parameters of this DimensionRegion |
520 |
double* pVelocityCutoffTable; ///< Points to the velocity table corresponding to the filter velocity parameters of this DimensionRegion |
double* pVelocityCutoffTable; ///< Points to the velocity table corresponding to the filter velocity parameters of this DimensionRegion |
521 |
|
Region* pRegion; |
522 |
|
|
523 |
leverage_ctrl_t DecodeLeverageController(_lev_ctrl_t EncodedController); |
leverage_ctrl_t DecodeLeverageController(_lev_ctrl_t EncodedController); |
524 |
_lev_ctrl_t EncodeLeverageController(leverage_ctrl_t DecodedController); |
_lev_ctrl_t EncodeLeverageController(leverage_ctrl_t DecodedController); |
595 |
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) |
596 |
RIFF::Chunk* pCk3gix; |
RIFF::Chunk* pCk3gix; |
597 |
RIFF::Chunk* pCkSmpl; |
RIFF::Chunk* pCkSmpl; |
598 |
|
CRC crc; ///< CRC-32 checksum of the raw sample data |
599 |
|
|
600 |
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); |
601 |
~Sample(); |
~Sample(); |
732 |
/** Parses Gigasampler files and provides abstract access to the data. */ |
/** Parses Gigasampler files and provides abstract access to the data. */ |
733 |
class File : protected DLS::File { |
class File : protected DLS::File { |
734 |
public: |
public: |
735 |
|
static const DLS::version_t VERSION_2; |
736 |
|
static const DLS::version_t VERSION_3; |
737 |
|
|
738 |
// derived attributes from DLS::Resource |
// derived attributes from DLS::Resource |
739 |
DLS::Resource::pInfo; |
DLS::Resource::pInfo; |
740 |
DLS::Resource::pDLSID; |
DLS::Resource::pDLSID; |
774 |
// own protected methods |
// own protected methods |
775 |
virtual void LoadSamples(progress_t* pProgress); |
virtual void LoadSamples(progress_t* pProgress); |
776 |
virtual void LoadInstruments(progress_t* pProgress); |
virtual void LoadInstruments(progress_t* pProgress); |
777 |
|
void SetSampleChecksum(Sample* pSample, uint32_t crc); |
778 |
friend class Region; |
friend class Region; |
779 |
friend class Sample; |
friend class Sample; |
780 |
friend class Group; // so Group can access protected member pRIFF |
friend class Group; // so Group can access protected member pRIFF |
781 |
private: |
private: |
782 |
|
static const DLS::Info::FixedStringLength FixedStringLengths[]; |
783 |
std::list<Group*>* pGroups; |
std::list<Group*>* pGroups; |
784 |
std::list<Group*>::iterator GroupsIterator; |
std::list<Group*>::iterator GroupsIterator; |
785 |
}; |
}; |