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-2014 by Christian Schoenebeck * |
* Copyright (C) 2003-2016 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 * |
105 |
|
|
106 |
typedef std::string String; |
typedef std::string String; |
107 |
typedef RIFF::progress_t progress_t; |
typedef RIFF::progress_t progress_t; |
108 |
|
typedef RIFF::file_offset_t file_offset_t; |
109 |
|
|
110 |
/** Quadtuple version number ("major.minor.release.build"). */ |
/** Quadtuple version number ("major.minor.release.build"). */ |
111 |
struct version_t { |
struct version_t { |
401 |
uint32_t AverageBytesPerSecond; ///< The average number of bytes per second at which the waveform data should be transferred (Playback software can estimate the buffer size using this value). |
uint32_t AverageBytesPerSecond; ///< The average number of bytes per second at which the waveform data should be transferred (Playback software can estimate the buffer size using this value). |
402 |
uint16_t BlockAlign; ///< The block alignment (in bytes) of the waveform data. Playback software needs to process a multiple of <i>BlockAlign</i> bytes of data at a time, so the value of <i>BlockAlign</i> can be used for buffer alignment. |
uint16_t BlockAlign; ///< The block alignment (in bytes) of the waveform data. Playback software needs to process a multiple of <i>BlockAlign</i> bytes of data at a time, so the value of <i>BlockAlign</i> can be used for buffer alignment. |
403 |
uint16_t BitDepth; ///< Size of each sample per channel (only if known sample data format is used, 0 otherwise). |
uint16_t BitDepth; ///< Size of each sample per channel (only if known sample data format is used, 0 otherwise). |
404 |
unsigned long SamplesTotal; ///< Reflects total number of sample points (only if known sample data format is used, 0 otherwise), do not bother to change this value, it will not be saved. |
file_offset_t SamplesTotal; ///< Reflects total number of sample points (only if known sample data format is used, 0 otherwise), do not bother to change this value, it will not be saved. |
405 |
uint FrameSize; ///< Reflects the size (in bytes) of one single sample point (only if known sample data format is used, 0 otherwise). <b>Caution:</b> with the current version of libgig you have to upate this field by yourself whenever you change one of the following fields: Channels, BitDepth ! Ignoring this might lead to undesired behavior when i.e. calling Resize(), SetPos(), Write() or Read(). |
uint FrameSize; ///< Reflects the size (in bytes) of one single sample point (only if known sample data format is used, 0 otherwise). <b>Caution:</b> with the current version of libgig you have to upate this field by yourself whenever you change one of the following fields: Channels, BitDepth ! Ignoring this might lead to undesired behavior when i.e. calling Resize(), SetPos(), Write() or Read(). |
406 |
|
|
407 |
void* LoadSampleData(); |
void* LoadSampleData(); |
408 |
void ReleaseSampleData(); |
void ReleaseSampleData(); |
409 |
unsigned long GetSize() const; |
file_offset_t GetSize() const; |
410 |
void Resize(int iNewSize); |
void Resize(int iNewSize); |
411 |
unsigned long SetPos(unsigned long 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); |
412 |
unsigned long Read(void* pBuffer, unsigned long SampleCount); |
file_offset_t Read(void* pBuffer, file_offset_t SampleCount); |
413 |
unsigned long Write(void* pBuffer, unsigned long SampleCount); |
file_offset_t Write(void* pBuffer, file_offset_t SampleCount); |
414 |
virtual void UpdateChunks(progress_t* pProgress); |
virtual void UpdateChunks(progress_t* pProgress); |
415 |
virtual void CopyAssign(const Sample* orig); |
virtual void CopyAssign(const Sample* orig); |
416 |
|
|
417 |
protected: |
protected: |
418 |
RIFF::List* pWaveList; |
RIFF::List* pWaveList; |
419 |
RIFF::Chunk* pCkData; |
RIFF::Chunk* pCkData; |
420 |
RIFF::Chunk* pCkFormat; |
RIFF::Chunk* pCkFormat; |
421 |
unsigned long ulWavePoolOffset; // needed for comparison with the wave pool link table, thus the link to instruments |
file_offset_t ullWavePoolOffset; // needed for comparison with the wave pool link table, thus the link to instruments |
422 |
|
|
423 |
Sample(File* pFile, RIFF::List* waveList, unsigned long WavePoolOffset); |
Sample(File* pFile, RIFF::List* waveList, file_offset_t WavePoolOffset); |
424 |
virtual ~Sample(); |
virtual ~Sample(); |
425 |
void CopyAssignCore(const Sample* orig); |
void CopyAssignCore(const Sample* orig); |
426 |
friend class File; |
friend class File; |