30 # define RIFF_TYPE_DLS 0x444C5320
31 # define LIST_TYPE_INFO 0x494E464F
32 # define LIST_TYPE_WVPL 0x7776706C
33 # define LIST_TYPE_DWPL 0x6477706C
34 # define LIST_TYPE_WAVE 0x77617665
35 # define LIST_TYPE_LINS 0X6C696E73
36 # define LIST_TYPE_INS 0X696E7320
37 # define LIST_TYPE_LRGN 0x6C72676E
38 # define LIST_TYPE_LART 0x6C617274
39 # define LIST_TYPE_LAR2 0x6C617232
40 # define LIST_TYPE_RGN 0x72676E20
41 # define LIST_TYPE_RGN2 0x72676E32
42 # define CHUNK_ID_IARL 0x4941524C
43 # define CHUNK_ID_IART 0x49415254
44 # define CHUNK_ID_ICMS 0x49434D53
45 # define CHUNK_ID_ICMT 0x49434D54
46 # define CHUNK_ID_ICOP 0x49434F50
47 # define CHUNK_ID_ICRD 0x49435244
48 # define CHUNK_ID_IENG 0x49454E47
49 # define CHUNK_ID_IGNR 0x49474E52
50 # define CHUNK_ID_IKEY 0x494B4559
51 # define CHUNK_ID_IMED 0x494D4544
52 # define CHUNK_ID_INAM 0x494E414D
53 # define CHUNK_ID_IPRD 0x49505244
54 # define CHUNK_ID_ISBJ 0x4953424A
55 # define CHUNK_ID_ISFT 0x49534654
56 # define CHUNK_ID_ISRC 0x49535243
57 # define CHUNK_ID_ISRF 0x49535246
58 # define CHUNK_ID_ITCH 0x49544348
59 # define CHUNK_ID_VERS 0x76657273
60 # define CHUNK_ID_DLID 0x646C6964
61 # define CHUNK_ID_FMT 0x666D7420
62 # define CHUNK_ID_DATA 0x64617461
63 # define CHUNK_ID_INSH 0x696E7368
64 # define CHUNK_ID_RGNH 0x72676E68
65 # define CHUNK_ID_WLNK 0x776C6E6B
66 # define CHUNK_ID_PTBL 0x7074626C
67 # define CHUNK_ID_WSMP 0x77736D70
68 # define CHUNK_ID_COLH 0x636F6C68
69 # define CHUNK_ID_ARTL 0x6172746C
70 # define CHUNK_ID_ART2 0x61727432
71 #else // little endian
72 # define RIFF_TYPE_DLS 0x20534C44
73 # define LIST_TYPE_INFO 0x4F464E49
74 # define LIST_TYPE_WVPL 0x6C707677
75 # define LIST_TYPE_DWPL 0x6C707764
76 # define LIST_TYPE_WAVE 0x65766177
77 # define LIST_TYPE_LINS 0X736E696C
78 # define LIST_TYPE_INS 0X20736E69
79 # define LIST_TYPE_LRGN 0x6E67726C
80 # define LIST_TYPE_LART 0x7472616C
81 # define LIST_TYPE_LAR2 0x3272616C
82 # define LIST_TYPE_RGN 0x206E6772
83 # define LIST_TYPE_RGN2 0x326E6772
84 # define CHUNK_ID_IARL 0x4C524149
85 # define CHUNK_ID_IART 0x54524149
86 # define CHUNK_ID_ICMS 0x534D4349
87 # define CHUNK_ID_ICMT 0x544D4349
88 # define CHUNK_ID_ICOP 0x504F4349
89 # define CHUNK_ID_ICRD 0x44524349
90 # define CHUNK_ID_IENG 0x474E4549
91 # define CHUNK_ID_IGNR 0x524E4749
92 # define CHUNK_ID_IKEY 0x59454B49
93 # define CHUNK_ID_IMED 0x44454D49
94 # define CHUNK_ID_INAM 0x4D414E49
95 # define CHUNK_ID_IPRD 0x44525049
96 # define CHUNK_ID_ISBJ 0x4A425349
97 # define CHUNK_ID_ISFT 0x54465349
98 # define CHUNK_ID_ISRC 0x43525349
99 # define CHUNK_ID_ISRF 0x46525349
100 # define CHUNK_ID_ITCH 0x48435449
101 # define CHUNK_ID_VERS 0x73726576
102 # define CHUNK_ID_DLID 0x64696C64
103 # define CHUNK_ID_FMT 0x20746D66
104 # define CHUNK_ID_DATA 0x61746164
105 # define CHUNK_ID_INSH 0x68736E69
106 # define CHUNK_ID_RGNH 0x686E6772
107 # define CHUNK_ID_WLNK 0x6B6E6C77
108 # define CHUNK_ID_PTBL 0x6C627470
109 # define CHUNK_ID_WSMP 0x706D7377
110 # define CHUNK_ID_COLH 0x686C6F63
111 # define CHUNK_ID_ARTL 0x6C747261
112 # define CHUNK_ID_ART2 0x32747261
113 #endif // WORDS_BIGENDIAN
115 #define DLS_WAVE_FORMAT_PCM 0x0001
262 void Init(conn_block_t* Header);
368 virtual void SetGain(int32_t gain);
400 void Resize(
int iNewSize);
402 unsigned long Read(
void* pBuffer,
unsigned long SampleCount);
403 unsigned long Write(
void* pBuffer,
unsigned long SampleCount);
432 virtual void SetKeyRange(uint16_t Low, uint16_t High);
522 void __UpdateWavePoolTableChunk();
523 void __UpdateWavePoolTable();
ArticulationList * pArticulations
uint16_t BlockAlign
The block alignment (in bytes) of the waveform data. Playback software needs to process a multiple of...
sample_loop_t * pSampleLoops
Points to the beginning of a sample loop array, or is NULL if there are no loops defined.
virtual void UpdateChunks()
Update chunks with current info values.
uint32_t Regions
Reflects the number of Region defintions this Instrument has.
virtual void UpdateChunks()
Update chunks with current Resource data.
virtual void UpdateChunks()
Apply Instrument with all its Regions to the respective RIFF chunks.
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.
String CreationDate
<ICRD-ck>. Specifies the date the subject of the file was created. List dates in yyyy-mm-dd format...
uint32_t LoopType
Defines how the waveform samples will be looped (appropriate loop types for the gig format are define...
ArticulationList::iterator ArticulationsIterator
virtual void UpdateChunks()
Apply all articulations to the respective RIFF chunks.
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.
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 ~Region()
Destructor.
Instrument * AddInstrument()
Add a new instrument definition.
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.
std::list< Articulation * > ArticulationList
conn_src_t
Connection Sources.
unsigned long GetSize()
Returns sample size.
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...
RIFF::List * pCkInstrument
void GenerateDLSID()
Generates a new DLSID for the resource.
String SourceForm
<ISRF-ck>. Identifies the original form of the material that was digitized, such as record...
Sampler(RIFF::List *ParentList)
Defines Sample Loop Points.
virtual void UpdateChunks()
Apply articulation connections to the respective RIFF chunks.
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)
std::list< Sample * > SampleList
virtual void UpdateChunks()
Apply all the DLS file's current instruments, samples and settings to the respective RIFF chunks...
InstrumentList::iterator InstrumentsIterator
uint8_t MIDIBankCoarse
Reflects the MIDI Bank number for MIDI Control Change 0 (bank 1 - 128).
uint FrameSize
Reflects the size (in bytes) of one single sample point (only if known sample data format is used...
Every subject of an DLS file and the file itself can have an unique, computer generated ID...
Lower and upper limit of a range.
Region * GetFirstRegion()
void DeleteSampleLoop(sample_loop_t *pLoopDef)
Deletes an existing sample loop.
virtual ~Instrument()
Destructor.
uint16_t low
Low value of range.
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()).
void ReleaseSampleData()
Free sample data from RAM.
Abstract base class which provides mandatory informations about sample players in general...
String libraryName()
Returns the name of this C++ library.
Exception(String Message)
conn_trn_t
Connection Transforms.
uint32_t SampleLoops
Reflects the number of sample loops.
conn_trn_t DestinationTransform
void Resize(int iNewSize)
Resize sample.
conn_dst_t
Connection Destinations.
bool NoSampleDepthTruncation
void DeleteSample(Sample *pSample)
Delete a sample.
uint16_t high
High value of range.
virtual void UpdateChunks()
Apply Region settings to the respective RIFF chunks.
Articulation * GetFirstArticulation()
uint32_t Size
For internal usage only: usually reflects exactly sizeof(sample_loop_t), otherwise if the value is la...
Info(RIFF::List *list)
Constructor.
std::list< Instrument * > InstrumentList
Region(Instrument *pInstrument, RIFF::List *rgnList)
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 MIDIProgram
Specifies the MIDI Program Change Number this Instrument should be assigned to.
String Commissioned
<ICMS-ck>. Lists the name of the person or organization that commissioned the subject of the file...
uint32_t LoopLength
Length of the looping area (in sample points).
void SetSample(Sample *pSample)
Assign another sample to this Region.
SampleList::iterator SamplesIterator
Articulation * GetNextArticulation()
uint16_t WaveLinkOptionFlags
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.
uint32_t LoopStart
The start value specifies the offset (in sample points) in the waveform data of the first sample poin...
Instrument(File *pFile, RIFF::List *insList)
Constructor.
RegionList::iterator RegionsIterator
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
Abstract base class which encapsulates data structures which all DLS resources are able to provide...
void Init(conn_block_t *Header)
InstrumentList * pInstruments
virtual void LoadInstruments()
virtual void UpdateChunks()
Apply sample and its settings to the respective RIFF chunks.
String Software
<ISFT-ck>. Identifies the name of the sofware package used to create the file.
String ArchivalLocation
<IARL-ck>. Indicates where the subject of the file is stored.
unsigned long ulWavePoolOffset
virtual void Save()
Save changes to same file.
Encapsulates sample waves used for playback.
Sample * GetNextSample()
Returns a pointer to the next Sample object of the file, NULL otherwise.
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 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()
Will be thrown whenever an error occurs while handling a RIFF file.
conn_block_t ToConnBlock()
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
Provides access to the defined connections used for the synthesis model.
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").
String Copyright
<ICOP-ck>. Records the copyright information for the file.
Sample * AddSample()
Add a new sample.
Info * pInfo
Points (in any case) to an Info object, providing additional, optional infos and comments.
String libraryVersion()
Returns version of this C++ library.
virtual void UpdateChunks()
Apply all sample player options to the respective RIFF chunk.
Defines a connection within the synthesis model.
uint16_t FormatOptionFlags
bool UseFixedLengthStrings
uint32_t * pWavePoolTableHi
String Comments
<ICMT-ck>. Provides general comments about the file or the subject of the file. Sentences might end w...
Articulator(RIFF::List *ParentList)
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
void * LoadSampleData()
Load sample data into RAM.
void AddSampleLoop(sample_loop_t *pLoopDef)
Adds a new sample loop with the provided loop definition.
Resource(Resource *Parent, RIFF::List *lstResource)
Constructor.