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-2016 by Christian Schoenebeck * |
* Copyright (C) 2003-2017 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 * |
25 |
#define __GIG_H__ |
#define __GIG_H__ |
26 |
|
|
27 |
#include "DLS.h" |
#include "DLS.h" |
28 |
|
#include "Serialization.h" |
29 |
#include <vector> |
#include <vector> |
30 |
|
|
31 |
#if WORDS_BIGENDIAN |
#if WORDS_BIGENDIAN |
192 |
|
|
193 |
type_t type; ///< Controller type |
type_t type; ///< Controller type |
194 |
uint controller_number; ///< MIDI controller number if this controller is a control change controller, 0 otherwise |
uint controller_number; ///< MIDI controller number if this controller is a control change controller, 0 otherwise |
195 |
|
|
196 |
|
void serialize(Serialization::Archive* archive); |
197 |
}; |
}; |
198 |
|
|
199 |
/** |
/** |
307 |
uint8_t out_start; ///< Start position of fade out. |
uint8_t out_start; ///< Start position of fade out. |
308 |
uint8_t out_end; ///< End postition of fade out. |
uint8_t out_end; ///< End postition of fade out. |
309 |
#endif // WORDS_BIGENDIAN |
#endif // WORDS_BIGENDIAN |
310 |
|
|
311 |
|
void serialize(Serialization::Archive* archive); |
312 |
}; |
}; |
313 |
|
|
314 |
/** Reflects the current playback state for a sample. */ |
/** Reflects the current playback state for a sample. */ |
491 |
DimensionRegion(RIFF::List* _3ewl, const DimensionRegion& src); |
DimensionRegion(RIFF::List* _3ewl, const DimensionRegion& src); |
492 |
~DimensionRegion(); |
~DimensionRegion(); |
493 |
void CopyAssign(const DimensionRegion* orig, const std::map<Sample*,Sample*>* mSamples); |
void CopyAssign(const DimensionRegion* orig, const std::map<Sample*,Sample*>* mSamples); |
494 |
|
void serialize(Serialization::Archive* archive); |
495 |
friend class Region; |
friend class Region; |
496 |
|
friend class Serialization::Archive; |
497 |
private: |
private: |
498 |
typedef enum { ///< Used to decode attenuation, EG1 and EG2 controller |
typedef enum { ///< Used to decode attenuation, EG1 and EG2 controller |
499 |
// official leverage controllers as they were defined in the original Gigasampler/GigaStudio format: |
// official leverage controllers as they were defined in the original Gigasampler/GigaStudio format: |
596 |
} _lev_ctrl_t; |
} _lev_ctrl_t; |
597 |
typedef std::map<uint32_t, double*> VelocityTableMap; |
typedef std::map<uint32_t, double*> VelocityTableMap; |
598 |
|
|
599 |
static uint Instances; ///< Number of DimensionRegion instances. |
static size_t Instances; ///< Number of DimensionRegion instances. |
600 |
static VelocityTableMap* pVelocityTables; ///< Contains the tables corresponding to the various velocity parameters (VelocityResponseCurve and VelocityResponseDepth). |
static VelocityTableMap* pVelocityTables; ///< Contains the tables corresponding to the various velocity parameters (VelocityResponseCurve and VelocityResponseDepth). |
601 |
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. |
602 |
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 |
668 |
static void DestroyDecompressionBuffer(buffer_t& DecompressionBuffer); |
static void DestroyDecompressionBuffer(buffer_t& DecompressionBuffer); |
669 |
// overridden methods |
// overridden methods |
670 |
void ReleaseSampleData(); |
void ReleaseSampleData(); |
671 |
void Resize(int iNewSize); |
void Resize(file_offset_t NewSize); |
672 |
file_offset_t SetPos(file_offset_t SampleCount, RIFF::stream_whence_t Whence = RIFF::stream_start); |
file_offset_t SetPos(file_offset_t SampleCount, RIFF::stream_whence_t Whence = RIFF::stream_start); |
673 |
file_offset_t GetPos() const; |
file_offset_t GetPos() const; |
674 |
file_offset_t Read(void* pBuffer, file_offset_t SampleCount, buffer_t* pExternalDecompressionBuffer = NULL); |
file_offset_t Read(void* pBuffer, file_offset_t SampleCount, buffer_t* pExternalDecompressionBuffer = NULL); |
678 |
virtual void UpdateChunks(progress_t* pProgress); |
virtual void UpdateChunks(progress_t* pProgress); |
679 |
void CopyAssignMeta(const Sample* orig); |
void CopyAssignMeta(const Sample* orig); |
680 |
void CopyAssignWave(const Sample* orig); |
void CopyAssignWave(const Sample* orig); |
681 |
|
uint32_t GetWaveDataCRC32Checksum(); |
682 |
|
bool VerifyWaveData(uint32_t* pActually = NULL); |
683 |
protected: |
protected: |
684 |
static unsigned int Instances; ///< Number of instances of class Sample. |
static size_t Instances; ///< Number of instances of class Sample. |
685 |
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 as well as for truncation of 24 Bit -> 16 Bit samples. |
686 |
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) |
687 |
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). |
694 |
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) |
695 |
RIFF::Chunk* pCk3gix; |
RIFF::Chunk* pCk3gix; |
696 |
RIFF::Chunk* pCkSmpl; |
RIFF::Chunk* pCkSmpl; |
697 |
uint32_t crc; ///< CRC-32 checksum of the raw sample data |
uint32_t crc; ///< Reflects CRC-32 checksum of the raw sample data at the last time when the sample's raw wave form data has been modified consciously by the user by calling Write(). |
698 |
|
|
699 |
Sample(File* pFile, RIFF::List* waveList, file_offset_t WavePoolOffset, unsigned long fileNo = 0); |
Sample(File* pFile, RIFF::List* waveList, file_offset_t WavePoolOffset, unsigned long fileNo = 0, int index = -1); |
700 |
~Sample(); |
~Sample(); |
701 |
|
uint32_t CalculateWaveDataChecksum(); |
702 |
|
|
703 |
// Guess size (in bytes) of a compressed sample |
// Guess size (in bytes) of a compressed sample |
704 |
inline file_offset_t GuessSize(file_offset_t samples) { |
inline file_offset_t GuessSize(file_offset_t samples) { |
1021 |
void SetScriptAsText(const String& text); |
void SetScriptAsText(const String& text); |
1022 |
void SetGroup(ScriptGroup* pGroup); |
void SetGroup(ScriptGroup* pGroup); |
1023 |
ScriptGroup* GetGroup() const; |
ScriptGroup* GetGroup() const; |
1024 |
|
void CopyAssign(const Script* orig); |
1025 |
protected: |
protected: |
1026 |
Script(ScriptGroup* group, RIFF::Chunk* ckScri); |
Script(ScriptGroup* group, RIFF::Chunk* ckScri); |
1027 |
virtual ~Script(); |
virtual ~Script(); |
1278 |
virtual void LoadInstruments(progress_t* pProgress); |
virtual void LoadInstruments(progress_t* pProgress); |
1279 |
virtual void LoadScriptGroups(); |
virtual void LoadScriptGroups(); |
1280 |
void SetSampleChecksum(Sample* pSample, uint32_t crc); |
void SetSampleChecksum(Sample* pSample, uint32_t crc); |
1281 |
|
uint32_t GetSampleChecksum(Sample* pSample); |
1282 |
|
uint32_t GetSampleChecksumByIndex(int index); |
1283 |
|
bool VerifySampleChecksumTable(); |
1284 |
|
bool RebuildSampleChecksumTable(); |
1285 |
|
int GetWaveTableIndexOf(gig::Sample* pSample); |
1286 |
friend class Region; |
friend class Region; |
1287 |
friend class Sample; |
friend class Sample; |
1288 |
friend class Instrument; |
friend class Instrument; |