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-2010 by Christian Schoenebeck * |
* Copyright (C) 2003-2014 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 * |
204 |
struct range_t { |
struct range_t { |
205 |
uint16_t low; ///< Low value of range. |
uint16_t low; ///< Low value of range. |
206 |
uint16_t high; ///< High value of range. |
uint16_t high; ///< High value of range. |
207 |
|
|
208 |
|
inline bool operator< (const range_t& other) const { |
209 |
|
if (low < other.low) return true; |
210 |
|
if (low > other.low) return false; |
211 |
|
return high < other.high; |
212 |
|
} |
213 |
|
|
214 |
|
inline bool operator== (const range_t& other) const { |
215 |
|
return low == other.low && high == other.high; |
216 |
|
} |
217 |
|
|
218 |
|
inline bool overlaps(uint16_t scalar) const { |
219 |
|
return low <= scalar && scalar <= high; |
220 |
|
} |
221 |
|
|
222 |
|
inline bool overlaps(const range_t& other) const { |
223 |
|
return overlaps(other.low) || overlaps(other.high) || |
224 |
|
other.overlaps(low) || other.overlaps(high); |
225 |
|
} |
226 |
}; |
}; |
227 |
|
|
228 |
/** Defines Sample Loop Points. */ |
/** Defines Sample Loop Points. */ |
289 |
Articulation* GetFirstArticulation(); |
Articulation* GetFirstArticulation(); |
290 |
Articulation* GetNextArticulation(); |
Articulation* GetNextArticulation(); |
291 |
virtual void UpdateChunks(); |
virtual void UpdateChunks(); |
292 |
|
virtual void CopyAssign(const Articulator* orig); |
293 |
protected: |
protected: |
294 |
typedef std::list<Articulation*> ArticulationList; |
typedef std::list<Articulation*> ArticulationList; |
295 |
RIFF::List* pParentList; |
RIFF::List* pParentList; |
331 |
void SetFixedStringLengths(const string_length_t* lengths); |
void SetFixedStringLengths(const string_length_t* lengths); |
332 |
virtual ~Info(); |
virtual ~Info(); |
333 |
virtual void UpdateChunks(); |
virtual void UpdateChunks(); |
334 |
|
virtual void CopyAssign(const Info* orig); |
335 |
private: |
private: |
336 |
RIFF::List* pResourceListChunk; |
RIFF::List* pResourceListChunk; |
337 |
const string_length_t* pFixedStringLengths; ///< List of IDs and string lengths for strings that should be stored in a fixed length format. This is used for gig files, not for ordinary DLS files. |
const string_length_t* pFixedStringLengths; ///< List of IDs and string lengths for strings that should be stored in a fixed length format. This is used for gig files, not for ordinary DLS files. |
347 |
dlsid_t* pDLSID; ///< Points to a <i>dlsid_t</i> structure if the file provided a DLS ID else is <i>NULL</i>. |
dlsid_t* pDLSID; ///< Points to a <i>dlsid_t</i> structure if the file provided a DLS ID else is <i>NULL</i>. |
348 |
|
|
349 |
Resource* GetParent() { return pParent; } |
Resource* GetParent() { return pParent; } |
350 |
|
const Resource* GetParent() const { return pParent; } |
351 |
virtual void UpdateChunks(); |
virtual void UpdateChunks(); |
352 |
void GenerateDLSID(); |
void GenerateDLSID(); |
353 |
|
virtual void CopyAssign(const Resource* orig); |
354 |
protected: |
protected: |
355 |
Resource* pParent; |
Resource* pParent; |
356 |
RIFF::List* pResourceList; |
RIFF::List* pResourceList; |
374 |
void DeleteSampleLoop(sample_loop_t* pLoopDef); |
void DeleteSampleLoop(sample_loop_t* pLoopDef); |
375 |
virtual void SetGain(int32_t gain); |
virtual void SetGain(int32_t gain); |
376 |
virtual void UpdateChunks(); |
virtual void UpdateChunks(); |
377 |
|
virtual void CopyAssign(const Sampler* orig); |
378 |
protected: |
protected: |
379 |
RIFF::List* pParentList; |
RIFF::List* pParentList; |
380 |
uint32_t uiHeaderSize; |
uint32_t uiHeaderSize; |
404 |
|
|
405 |
void* LoadSampleData(); |
void* LoadSampleData(); |
406 |
void ReleaseSampleData(); |
void ReleaseSampleData(); |
407 |
unsigned long GetSize(); |
unsigned long GetSize() const; |
408 |
void Resize(int iNewSize); |
void Resize(int iNewSize); |
409 |
unsigned long SetPos(unsigned long SampleCount, RIFF::stream_whence_t Whence = RIFF::stream_start); |
unsigned long SetPos(unsigned long SampleCount, RIFF::stream_whence_t Whence = RIFF::stream_start); |
410 |
unsigned long Read(void* pBuffer, unsigned long SampleCount); |
unsigned long Read(void* pBuffer, unsigned long SampleCount); |
411 |
unsigned long Write(void* pBuffer, unsigned long SampleCount); |
unsigned long Write(void* pBuffer, unsigned long SampleCount); |
412 |
virtual void UpdateChunks(); |
virtual void UpdateChunks(); |
413 |
|
virtual void CopyAssign(const Sample* orig); |
414 |
protected: |
protected: |
415 |
RIFF::List* pWaveList; |
RIFF::List* pWaveList; |
416 |
RIFF::Chunk* pCkData; |
RIFF::Chunk* pCkData; |
419 |
|
|
420 |
Sample(File* pFile, RIFF::List* waveList, unsigned long WavePoolOffset); |
Sample(File* pFile, RIFF::List* waveList, unsigned long WavePoolOffset); |
421 |
virtual ~Sample(); |
virtual ~Sample(); |
422 |
|
void CopyAssignCore(const Sample* orig); |
423 |
friend class File; |
friend class File; |
424 |
friend class Region; // Region has to compare the wave pool offset to get its sample |
friend class Region; // Region has to compare the wave pool offset to get its sample |
425 |
}; |
}; |
441 |
void SetSample(Sample* pSample); |
void SetSample(Sample* pSample); |
442 |
virtual void SetKeyRange(uint16_t Low, uint16_t High); |
virtual void SetKeyRange(uint16_t Low, uint16_t High); |
443 |
virtual void UpdateChunks(); |
virtual void UpdateChunks(); |
444 |
|
virtual void CopyAssign(const Region* orig); |
445 |
protected: |
protected: |
446 |
RIFF::List* pCkRegion; |
RIFF::List* pCkRegion; |
447 |
uint32_t WavePoolTableIndex; // index in the wave pool table to the sample wave this region is linked to |
uint32_t WavePoolTableIndex; // index in the wave pool table to the sample wave this region is linked to |
469 |
Region* AddRegion(); |
Region* AddRegion(); |
470 |
void DeleteRegion(Region* pRegion); |
void DeleteRegion(Region* pRegion); |
471 |
virtual void UpdateChunks(); |
virtual void UpdateChunks(); |
472 |
|
virtual void CopyAssign(const Instrument* orig); |
473 |
protected: |
protected: |
474 |
typedef std::list<Region*> RegionList; |
typedef std::list<Region*> RegionList; |
475 |
struct midi_locale_t { |
struct midi_locale_t { |
482 |
RegionList::iterator RegionsIterator; |
RegionList::iterator RegionsIterator; |
483 |
|
|
484 |
Instrument(File* pFile, RIFF::List* insList); |
Instrument(File* pFile, RIFF::List* insList); |
485 |
|
void CopyAssignCore(const Instrument* orig); |
486 |
virtual void LoadRegions(); |
virtual void LoadRegions(); |
487 |
virtual ~Instrument(); |
virtual ~Instrument(); |
488 |
friend class File; |
friend class File; |
500 |
File(); |
File(); |
501 |
File(RIFF::File* pRIFF); |
File(RIFF::File* pRIFF); |
502 |
String GetFileName(); |
String GetFileName(); |
503 |
|
void SetFileName(const String& name); |
504 |
Sample* GetFirstSample(); ///< Returns a pointer to the first <i>Sample</i> object of the file, <i>NULL</i> otherwise. |
Sample* GetFirstSample(); ///< Returns a pointer to the first <i>Sample</i> object of the file, <i>NULL</i> otherwise. |
505 |
Sample* GetNextSample(); ///< Returns a pointer to the next <i>Sample</i> object of the file, <i>NULL</i> otherwise. |
Sample* GetNextSample(); ///< Returns a pointer to the next <i>Sample</i> object of the file, <i>NULL</i> otherwise. |
506 |
Sample* AddSample(); |
Sample* AddSample(); |
509 |
Instrument* GetNextInstrument(); ///< Returns a pointer to the next <i>Instrument</i> object of the file, <i>NULL</i> otherwise. |
Instrument* GetNextInstrument(); ///< Returns a pointer to the next <i>Instrument</i> object of the file, <i>NULL</i> otherwise. |
510 |
Instrument* AddInstrument(); |
Instrument* AddInstrument(); |
511 |
void DeleteInstrument(Instrument* pInstrument); |
void DeleteInstrument(Instrument* pInstrument); |
512 |
|
RIFF::File* GetExtensionFile(int index); |
513 |
virtual void UpdateChunks(); |
virtual void UpdateChunks(); |
514 |
virtual void Save(const String& Path); |
virtual void Save(const String& Path); |
515 |
virtual void Save(); |
virtual void Save(); |