30 #include <CoreFoundation/CFUUID.h> 31 #elif defined(HAVE_UUID_UUID_H) 32 #include <uuid/uuid.h> 38 #define CONN_TRANSFORM_SRC(x) ((x >> 10) & 0x000F) 39 #define CONN_TRANSFORM_CTL(x) ((x >> 4) & 0x000F) 40 #define CONN_TRANSFORM_DST(x) (x & 0x000F) 41 #define CONN_TRANSFORM_BIPOLAR_SRC(x) (x & 0x4000) 42 #define CONN_TRANSFORM_BIPOLAR_CTL(x) (x & 0x0100) 43 #define CONN_TRANSFORM_INVERT_SRC(x) (x & 0x8000) 44 #define CONN_TRANSFORM_INVERT_CTL(x) (x & 0x0200) 47 #define CONN_TRANSFORM_SRC_ENCODE(x) ((x & 0x000F) << 10) 48 #define CONN_TRANSFORM_CTL_ENCODE(x) ((x & 0x000F) << 4) 49 #define CONN_TRANSFORM_DST_ENCODE(x) (x & 0x000F) 50 #define CONN_TRANSFORM_BIPOLAR_SRC_ENCODE(x) ((x) ? 0x4000 : 0) 51 #define CONN_TRANSFORM_BIPOLAR_CTL_ENCODE(x) ((x) ? 0x0100 : 0) 52 #define CONN_TRANSFORM_INVERT_SRC_ENCODE(x) ((x) ? 0x8000 : 0) 53 #define CONN_TRANSFORM_INVERT_CTL_ENCODE(x) ((x) ? 0x0200 : 0) 55 #define DRUM_TYPE_MASK 0x80000000 57 #define F_RGN_OPTION_SELFNONEXCLUSIVE 0x0001 59 #define F_WAVELINK_PHASE_MASTER 0x0001 60 #define F_WAVELINK_MULTICHANNEL 0x0002 62 #define F_WSMP_NO_TRUNCATION 0x0001 63 #define F_WSMP_NO_COMPRESSION 0x0002 65 #define MIDI_BANK_COARSE(x) ((x & 0x00007F00) >> 8) // CC0 66 #define MIDI_BANK_FINE(x) (x & 0x0000007F) // CC32 67 #define MIDI_BANK_MERGE(coarse, fine) ((((uint16_t) coarse) << 7) | fine) // CC0 + CC32 68 #define MIDI_BANK_ENCODE(coarse, fine) (((coarse & 0x0000007F) << 8) | (fine & 0x0000007F)) 151 const int iEntrySize = 12;
211 while (iter != end) {
229 for (; iter != end; ++iter) {
230 (*iter)->UpdateChunks(pProgress);
256 pFixedStringLengths = NULL;
257 pResourceListChunk = list;
297 pFixedStringLengths = lengths;
327 if (pFixedStringLengths) {
328 for (
int i = 0 ; pFixedStringLengths[i].
length ; i++) {
329 if (pFixedStringLengths[i].chunkId == ChunkID) {
330 size = pFixedStringLengths[i].
length;
336 ::SaveString(ChunkID, ck, lstINFO, s, sDefault, size != 0, size);
347 if (!pResourceListChunk)
return;
353 String defaultCreationDate =
"";
354 String defaultSoftware =
"";
355 String defaultComments =
"";
357 uint32_t resourceType = pResourceListChunk->
GetListType();
363 defaultName =
"NONAME";
367 time_t now = time(NULL);
368 tm* pNowBroken = localtime(&now);
370 strftime(buf, 11,
"%F", pNowBroken);
371 defaultCreationDate = buf;
427 pFixedStringLengths = orig->pFixedStringLengths;
496 #if defined(WIN32) || defined(__APPLE__) || defined(HAVE_UUID_GENERATE) 509 #elif defined(__APPLE__) 511 CFUUIDRef uuidRef = CFUUIDCreate(NULL);
512 CFUUIDBytes uuid = CFUUIDGetUUIDBytes(uuidRef);
514 pDLSID->
ulData1 = uuid.byte0 | uuid.byte1 << 8 | uuid.byte2 << 16 | uuid.byte3 << 24;
528 pDLSID->
ulData1 = uuid[0] | uuid[1] << 8 | uuid[2] << 16 | uuid[3] << 24;
602 }
else if (wsmp->
GetSize() != wsmpSize) {
615 store32(&pData[8],
Gain);
662 throw Exception(
"Could not delete Sample Loop, because it does not exist");
798 for (
unsigned long todo = pOrig->
GetSize(), i = 0; todo; ) {
799 const int iReadAtOnce = 64*1024;
800 unsigned long n = (iReadAtOnce < todo) ? iReadAtOnce : todo;
801 n = pOrig->
Read(&buf[i], n);
893 if (iNewSize < 1)
throw Exception(
"Sample size must be at least one sample point");
894 const int iSizeInBytes = iNewSize *
FrameSize;
918 if (!
pCkData)
throw Exception(
"No data chunk created for sample yet, call Sample::Resize() to create one");
919 unsigned long orderedBytes = SampleCount *
FrameSize;
920 unsigned long result =
pCkData->
SetPos(orderedBytes, Whence);
921 return (result == orderedBytes) ? SampleCount
956 if (
GetSize() < SampleCount)
throw Exception(
"Could not write sample data, current sample size to small");
970 throw Exception(
"Could not save sample, only PCM format is supported");
973 throw Exception(
"Could not save sample, there is no sample data to save");
1006 rgnh->
Read(&
Layer, 1,
sizeof(uint16_t));
1083 if (!pInstrument->
pRegions)
return;
1088 Region* prev_region = NULL;
1090 Instrument::RegionList::iterator iter = pInstrument->
pRegions->begin();
1091 iter != pInstrument->
pRegions->end(); iter++
1093 if ((*iter)->KeyRange.low > this->KeyRange.low) {
1097 prev_region = *iter;
1101 if (prev_region !=
this) pInstrument->MoveRegion(
this, r);
1147 File::SampleList::iterator iter = pFile->
pSamples->begin();
1148 File::SampleList::iterator end = pFile->
pSamples->end();
1149 for (
int i = 0; iter != end; ++iter, i++) {
1227 insh->
Read(&locale, 2, 4);
1282 void Instrument::MoveRegion(
Region* pSrc,
Region* pDst) {
1287 RegionList::iterator iter = find(
pRegions->begin(),
pRegions->end(), pDst);
1293 RegionList::iterator iter = find(
pRegions->begin(),
pRegions->end(), pRegion);
1294 if (iter ==
pRegions->end())
return;
1323 store32(&pData[4], locale.
bank);
1327 RegionList::iterator iter =
pRegions->begin();
1328 RegionList::iterator end =
pRegions->end();
1329 for (
int i = 0; iter != end; ++iter, ++i) {
1332 __divide_progress(pProgress, &subprogress,
pRegions->size(), i);
1334 (*iter)->UpdateChunks(&subprogress);
1336 __notify_progress(pProgress, 1.0);
1346 RegionList::iterator iter =
pRegions->begin();
1347 RegionList::iterator end =
pRegions->end();
1348 while (iter != end) {
1387 RegionList::const_iterator it = orig->
pRegions->begin();
1388 for (
int i = 0; i < orig->
Regions; ++i, ++it) {
1437 this->pRIFF =
pRIFF;
1447 if (!colh)
throw DLS::Exception(
"Mandatory chunks in RIFF list chunk not found.");
1471 throw DLS::Exception(
"Files larger than 2 GB not yet supported");
1487 while (iter != end) {
1495 SampleList::iterator iter =
pSamples->begin();
1496 SampleList::iterator end =
pSamples->end();
1497 while (iter != end) {
1528 unsigned long wvplFileOffset = wvpl->
GetFilePos();
1532 unsigned long waveFileOffset = wave->
GetFilePos();
1533 pSamples->push_back(
new Sample(
this, wave, waveFileOffset - wvplFileOffset));
1541 unsigned long dwplFileOffset = dwpl->
GetFilePos();
1545 unsigned long waveFileOffset = wave->
GetFilePos();
1546 pSamples->push_back(
new Sample(
this, wave, waveFileOffset - dwplFileOffset));
1581 SampleList::iterator iter = find(
pSamples->begin(),
pSamples->end(), pSample);
1582 if (iter ==
pSamples->end())
return;
1603 if (lstInstruments) {
1662 if (i == index)
return *iter;
1721 __divide_progress(pProgress, &subprogress, 20.f, 0.f);
1726 for (
int i = 0; iter != end; ++iter, ++i) {
1729 __divide_progress(&subprogress, &subsubprogress,
pInstruments->size(), i);
1731 (*iter)->UpdateChunks(&subsubprogress);
1734 __notify_progress(&subprogress, 1.0);
1754 __divide_progress(pProgress, &subprogress, 20.f, 1.f);
1757 SampleList::iterator iter =
pSamples->begin();
1758 SampleList::iterator end =
pSamples->end();
1759 for (
int i = 0; iter != end; ++iter, ++i) {
1762 __divide_progress(&subprogress, &subsubprogress,
pSamples->size(), i);
1764 (*iter)->UpdateChunks(&subsubprogress);
1767 __notify_progress(&subprogress, 1.0);
1770 __notify_progress(pProgress, 1.0);
1791 __divide_progress(pProgress, &subprogress, 2.f, 0.f);
1799 __divide_progress(pProgress, &subprogress, 2.f, 1.f);
1804 __notify_progress(pProgress, 1.0);
1821 __divide_progress(pProgress, &subprogress, 2.f, 0.f);
1828 __divide_progress(pProgress, &subprogress, 2.f, 1.f);
1833 __notify_progress(pProgress, 1.0);
1847 __UpdateWavePoolTableChunk();
1879 void File::__UpdateWavePoolTableChunk() {
1880 __UpdateWavePoolTable();
1886 if (ptbl->
GetSize() < ulRequiredSize)
throw Exception(
"Fatal error, 'ptbl' chunk too small");
1888 unsigned long ulOriginalPos = ptbl->
GetPos();
1911 ptbl->
SetPos(ulOriginalPos);
1919 void File::__UpdateWavePoolTable() {
1929 uint64_t wvplFileOffset = wvpl->
GetFilePos();
1931 SampleList::iterator iter =
pSamples->begin();
1932 SampleList::iterator end =
pSamples->end();
1933 for (
int i = 0 ; iter != end ; ++iter, i++) {
1934 uint64_t _64BitOffset = (*iter)->pWaveList->GetFilePos() - wvplFileOffset -
LIST_HEADER_SIZE;
1935 (*iter)->ulWavePoolOffset = _64BitOffset;
1940 SampleList::iterator iter =
pSamples->begin();
1941 SampleList::iterator end =
pSamples->end();
1942 for (
int i = 0 ; iter != end ; ++iter, i++) {
1943 uint64_t _64BitOffset = (*iter)->pWaveList->GetFilePos() - wvplFileOffset -
LIST_HEADER_SIZE;
1944 (*iter)->ulWavePoolOffset = _64BitOffset;
1959 std::cout <<
"DLS::Exception: " <<
Message << std::endl;
virtual void CopyAssign(const Instrument *orig)
Make a (semi) deep copy of the Instrument object given by orig and assign it to this object...
#define CONN_TRANSFORM_BIPOLAR_CTL_ENCODE(x)
unsigned long WriteUint32(uint32_t *pData, unsigned long WordCount=1)
Writes WordCount number of 32 Bit unsigned integer words from the buffer pointed by pData to the chun...
ArticulationList * pArticulations
uint16_t BlockAlign
The block alignment (in bytes) of the waveform data. Playback software needs to process a multiple of...
#define LIST_TYPE_DWPL
Seen on some files instead of a wvpl list chunk.
sample_loop_t * pSampleLoops
Points to the beginning of a sample loop array, or is NULL if there are no loops defined.
uint32_t Regions
Reflects the number of Region defintions this Instrument has.
Parses DLS Level 1 and 2 compliant files and provides abstract access to the data.
stream_whence_t
File stream position dependent to these relations.
unsigned long Read(void *pData, unsigned long WordCount, unsigned long WordSize)
Reads WordCount number of data words with given WordSize and copies it into a buffer pointed by pData...
String CreationDate
<ICRD-ck>. Specifies the date the subject of the file was created. List dates in yyyy-mm-dd format...
Chunk * GetFirstSubChunk()
Returns the first subchunk within the list.
#define F_WAVELINK_PHASE_MASTER
ArticulationList::iterator ArticulationsIterator
uint32_t GetChunkID()
Chunk ID in unsigned integer representation.
String Engineer
<IENG-ck>. Stores the name of the engineer who worked on the file. Multiple engineer names are separa...
virtual void SetKeyRange(uint16_t Low, uint16_t High)
Modifies the key range of this Region and makes sure the respective chunks are in correct order...
void __ensureMandatoryChunksExist()
Checks if all (for DLS) mandatory chunks exist, if not they will be created.
String Artists
<IART-ck>. Lists the artist of the original subject of the file.
Sample * GetFirstSample()
Returns a pointer to the first Sample object of the file, NULL otherwise.
Instrument * GetNextInstrument()
Returns a pointer to the next Instrument object of the file, NULL otherwise.
Will be thrown whenever a DLS specific error occurs while trying to access a DLS File.
conn_trn_t SourceTransform
Optional information for DLS files, instruments, samples, etc.
virtual void CopyAssign(const Region *orig)
Make a (semi) deep copy of the Region object given by orig and assign it to this object.
unsigned long Read(void *pBuffer, unsigned long SampleCount)
Reads SampleCount number of sample points from the current position into the buffer pointed by pBuffe...
virtual void UpdateChunks(progress_t *pProgress)
Update chunks with current Resource data.
#define CONN_TRANSFORM_INVERT_SRC_ENCODE(x)
RIFF::File * GetExtensionFile(int index)
Returns extension file of given index.
virtual ~Region()
Destructor.
Instrument * AddInstrument()
Add a new instrument definition.
unsigned long GetSize() const
Returns sample size.
Instrument * GetFirstInstrument()
Returns a pointer to the first Instrument object of the file, NULL otherwise.
String Keywords
<IKEY-ck>. Provides a list of keywords that refer to the file or subject of the file. Keywords are separated with semicolon and blank, e.g., FX; death; murder.
#define DLS_WAVE_FORMAT_PCM
#define CONN_TRANSFORM_DST(x)
std::list< Articulation * > ArticulationList
conn_src_t
Connection Sources.
unsigned long SetPos(unsigned long Where, stream_whence_t Whence=stream_start)
Sets the position within the chunk body, thus within the data portion of the chunk (in bytes)...
#define CONN_TRANSFORM_SRC_ENCODE(x)
uint32_t * pWavePoolTable
uint32_t WavePoolTableIndex
uint16_t Channels
Number of channels represented in the waveform data, e.g. 1 for mono, 2 for stereo (defaults to 1=mon...
#define CONN_TRANSFORM_BIPOLAR_SRC(x)
RIFF::List * pCkInstrument
String SourceForm
<ISRF-ck>. Identifies the original form of the material that was digitized, such as record...
Sampler(RIFF::List *ParentList)
List * GetSubList(uint32_t ListType)
Returns sublist chunk with list type ListType within this chunk list.
Defines Sample Loop Points.
unsigned long SetPos(unsigned long SampleCount, RIFF::stream_whence_t Whence=RIFF::stream_start)
Sets the position within the sample (in sample points, not in bytes).
RIFF::List * pResourceList
virtual ~Sample()
Destructor.
virtual void LoadSamples()
uint16_t MIDIBank
Reflects combination of MIDIBankCoarse and MIDIBankFine (bank 1 - bank 16384). Do not change this val...
virtual void SetGain(int32_t gain)
#define CONN_TRANSFORM_BIPOLAR_CTL(x)
unsigned long RemainingBytes()
Returns the number of bytes left to read in the chunk body.
List * GetFirstSubList()
Returns the first sublist within the list (that is a subchunk with chunk ID "LIST").
#define MIDI_BANK_MERGE(coarse, fine)
#define MIDI_BANK_FINE(x)
virtual void CopyAssign(const Info *orig)
Make a deep copy of the Info object given by orig and assign it to this object.
std::list< Sample * > SampleList
InstrumentList::iterator InstrumentsIterator
uint8_t MIDIBankCoarse
Reflects the MIDI Bank number for MIDI Control Change 0 (bank 1 - 128).
void GenerateDLSID()
Generates a new DLSID for the resource.
uint FrameSize
Reflects the size (in bytes) of one single sample point (only if known sample data format is used...
#define MIDI_BANK_COARSE(x)
unsigned long ReadUint32(uint32_t *pData, unsigned long WordCount=1)
Reads WordCount number of 32 Bit unsigned integer words and copies it into the buffer pointed by pDat...
Every subject of an DLS file and the file itself can have an unique, computer generated ID...
unsigned long GetPos()
Position within the chunk data body.
#define F_WAVELINK_MULTICHANNEL
virtual void CopyAssign(const Sample *orig)
Make a deep copy of the Sample object given by orig and assign it to this object. ...
Region * GetFirstRegion()
void DeleteSampleLoop(sample_loop_t *pLoopDef)
Deletes an existing sample loop.
virtual ~Instrument()
Destructor.
uint16_t low
Low value of range.
void SetByteOrder(endian_t Endian)
Set the byte order to be used when saving.
#define CONN_TRANSFORM_BIPOLAR_SRC_ENCODE(x)
bool b64BitWavePoolOffsets
void SetFixedStringLengths(const string_length_t *lengths)
Forces specific Info fields to be of a fixed length when being saved to a file.
uint16_t FormatTag
Format ID of the waveform data (should be DLS_WAVE_FORMAT_PCM for DLS1 compliant files, this is also the default value if Sample was created with Instrument::AddSample()).
virtual void CopyAssign(const Sampler *orig)
Make a deep copy of the Sampler object given by orig and assign it to this object.
void ReleaseSampleData()
Free sample data from RAM.
virtual void CopyAssign(const Articulator *orig)
Not yet implemented in this version, since the .gig format does not need to copy DLS articulators and...
Abstract base class which provides mandatory informations about sample players in general...
String libraryName()
Returns the name of this C++ library.
Exception(String Message)
#define CONN_TRANSFORM_DST_ENCODE(x)
conn_trn_t
Connection Transforms.
void SetFileName(const String &name)
You may call this method store a future file name, so you don't have to to pass it to the Save() call...
uint32_t SampleLoops
Reflects the number of sample loops.
conn_trn_t DestinationTransform
virtual void Save(const String &Path, progress_t *pProgress=NULL)
Save changes to another file.
void Resize(int iNewSize)
Resize sample.
conn_dst_t
Connection Destinations.
bool NoSampleDepthTruncation
void DeleteSample(Sample *pSample)
Delete a sample.
unsigned long ReadInt32(int32_t *pData, unsigned long WordCount=1)
Reads WordCount number of 32 Bit signed integer words and copies it into the buffer pointed by pData...
uint16_t high
High value of range.
Articulation * GetFirstArticulation()
uint32_t Size
For internal usage only: usually reflects exactly sizeof(sample_loop_t), otherwise if the value is la...
Chunk * GetSubChunk(uint32_t ChunkID)
Returns subchunk with chunk ID ChunkID within this chunk list.
Chunk * GetNextSubChunk()
Returns the next subchunk within the list.
Info(RIFF::List *list)
Constructor.
std::list< Instrument * > InstrumentList
Region(Instrument *pInstrument, RIFF::List *rgnList)
virtual void Save(progress_t *pProgress=NULL)
Save changes to same file.
unsigned long SamplesTotal
Reflects total number of sample points (only if known sample data format is used, 0 otherwise)...
String Source
<ISRC-ck>. Identifies the name of the person or organization who supplied the original subject of the...
uint16_t BitDepth
Size of each sample per channel (only if known sample data format is used, 0 otherwise).
uint32_t GetListType()
Returns unsigned integer representation of the list's ID.
unsigned long GetFilePos()
Current, actual offset in file.
#define F_WSMP_NO_COMPRESSION
#define CONN_TRANSFORM_SRC(x)
uint32_t MIDIProgram
Specifies the MIDI Program Change Number this Instrument should be assigned to.
virtual void UpdateChunks(progress_t *pProgress)
Update chunks with current info values.
String Commissioned
<ICMS-ck>. Lists the name of the person or organization that commissioned the subject of the file...
unsigned long ReadInt16(int16_t *pData, unsigned long WordCount=1)
Reads WordCount number of 16 Bit signed integer words and copies it into the buffer pointed by pData...
#define F_RGN_OPTION_SELFNONEXCLUSIVE
void SetSample(Sample *pSample)
Assign another sample to this Region.
unsigned long Write(void *pData, unsigned long WordCount, unsigned long WordSize)
Writes WordCount number of data words with given WordSize from the buffer pointed by pData...
Used for indicating the progress of a certain task.
SampleList::iterator SamplesIterator
List * GetParent()
Returns pointer to the chunk's parent list chunk.
Articulation * GetNextArticulation()
Chunk * AddSubChunk(uint32_t uiChunkID, uint uiBodySize)
Creates a new sub chunk.
#define CONN_TRANSFORM_INVERT_CTL_ENCODE(x)
uint16_t WaveLinkOptionFlags
#define F_WSMP_NO_TRUNCATION
#define CONN_TRANSFORM_CTL(x)
#define MIDI_BANK_ENCODE(coarse, fine)
virtual void UpdateChunks(progress_t *pProgress)
Apply Instrument with all its Regions to the respective RIFF chunks.
#define CONN_TRANSFORM_INVERT_SRC(x)
void DeleteInstrument(Instrument *pInstrument)
Delete an instrument.
unsigned long Write(void *pBuffer, unsigned long SampleCount)
Write sample wave data.
version_t * pVersion
Points to a version_t structure if the file provided a version number else is set to NULL...
String Technician
<ITCH-ck>. Identifies the technician who sampled the subject file.
Instrument(File *pFile, RIFF::List *insList)
Constructor.
RegionList::iterator RegionsIterator
void SetFileName(const String &path)
void * LoadChunkData()
Load chunk body into RAM.
RIFF::Chunk * pArticulationCk
uint32_t AverageBytesPerSecond
The average number of bytes per second at which the waveform data should be transferred (Playback sof...
uint8_t MIDIBankFine
Reflects the MIDI Bank number for MIDI Control Change 32 (bank 1 - 128).
uint32_t WavePoolHeaderSize
virtual void UpdateChunks(progress_t *pProgress)
Apply all articulations to the respective RIFF chunks.
Abstract base class which encapsulates data structures which all DLS resources are able to provide...
void Init(conn_block_t *Header)
List * AddSubList(uint32_t uiListType)
Creates a new list sub chunk.
InstrumentList * pInstruments
virtual void LoadInstruments()
RIFF specific classes and definitions.
virtual void UpdateChunks(progress_t *pProgress)
Apply all sample player options to the respective RIFF chunk.
unsigned long GetSize() const
Chunk size in bytes (without header, thus the chunk data body)
String Software
<ISFT-ck>. Identifies the name of the sofware package used to create the file.
#define CONN_TRANSFORM_CTL_ENCODE(x)
String ArchivalLocation
<IARL-ck>. Indicates where the subject of the file is stored.
unsigned long ulWavePoolOffset
Encapsulates sample waves used for playback.
Sample * GetNextSample()
Returns a pointer to the next Sample object of the file, NULL otherwise.
void MoveSubChunk(Chunk *pSrc, Chunk *pDst)
Moves a sub chunk witin this list.
String Name
<INAM-ck>. Stores the title of the subject of the file, such as, Seattle From Above.
uint32_t SamplesPerSecond
Sampling rate at which each channel should be played (defaults to 44100 if Sample was created with In...
String Product
<IPRD-ck>. Specifies the name of the title the file was originally intended for, such as World Ruler ...
Sample(File *pFile, RIFF::List *waveList, unsigned long WavePoolOffset)
Constructor.
String GetFileName()
File name of this DLS file.
String Medium
<IMED-ck>. Describes the original subject of the file, such as, record, CD, and so forth...
String Subject
<ISBJ-ck>. Describes the contents of the file.
virtual void LoadRegions()
unsigned long ReadUint16(uint16_t *pData, unsigned long WordCount=1)
Reads WordCount number of 16 Bit unsigned integer words and copies it into the buffer pointed by pDat...
void CopyAssignCore(const Sample *orig)
Make a deep copy of the Sample object given by orig (without the actual sample waveform data however)...
conn_block_t ToConnBlock()
void ReleaseChunkData()
Free loaded chunk body from RAM.
void DeleteRegion(Region *pRegion)
Abstract base class for classes that provide articulation information (thus for Instrument and Region...
Connection * pConnections
Points to the beginning of a Connection array.
uint32_t Connections
Reflects the number of Connections.
conn_trn_t ControlTransform
virtual void UpdateChunks(progress_t *pProgress)
Apply sample and its settings to the respective RIFF chunks.
Provides access to the defined connections used for the synthesis model.
virtual void UpdateChunks(progress_t *pProgress)
Apply articulation connections to the respective RIFF chunks.
#define CONN_TRANSFORM_INVERT_CTL(x)
dlsid_t * pDLSID
Points to a dlsid_t structure if the file provided a DLS ID else is NULL.
uint32_t Instruments
Reflects the number of available Instrument objects.
String Genre
<IGNR-ck>. Descirbes the original work, such as, Jazz, Classic, Rock, Techno, Rave, etc.
Provides all neccessary information for the synthesis of a DLS Instrument.
Quadtuple version number ("major.minor.release.build").
virtual void CopyAssign(const Resource *orig)
Make a deep copy of the Resource object given by orig and assign it to this object.
String Copyright
<ICOP-ck>. Records the copyright information for the file.
Sample * AddSample()
Add a new sample.
void CopyAssignCore(const Instrument *orig)
DLS specific classes and definitions.
Info * pInfo
Points (in any case) to an Info object, providing additional, optional infos and comments.
String libraryVersion()
Returns version of this C++ library.
Defines a connection within the synthesis model.
uint16_t FormatOptionFlags
uint32_t * pWavePoolTableHi
virtual void UpdateChunks(progress_t *pProgress)
Apply Region settings to the respective RIFF chunks.
String Comments
<ICMT-ck>. Provides general comments about the file or the subject of the file. Sentences might end w...
void Resize(int iNewSize)
Resize chunk.
Articulator(RIFF::List *ParentList)
List * GetNextSubList()
Returns the next sublist (that is a subchunk with chunk ID "LIST") within the list.
Defines Region information of an Instrument.
std::list< RIFF::File * > ExtensionFiles
Articulation(RIFF::Chunk *artl)
Constructor.
bool IsDrum
Indicates if the Instrument is a drum type, as they differ in the synthesis model of DLS from melodic...
std::list< Region * > RegionList
virtual void UpdateChunks(progress_t *pProgress)
Apply all the DLS file's current instruments, samples and settings to the respective RIFF chunks...
void * LoadSampleData()
Load sample data into RAM.
void AddSampleLoop(sample_loop_t *pLoopDef)
Adds a new sample loop with the provided loop definition.
virtual void UpdateFileOffsets()
Updates all file offsets stored all over the file.
Resource(Resource *Parent, RIFF::List *lstResource)
Constructor.