30 # define RIFF_TYPE_DLS 0x444C5320
31 # define LIST_TYPE_WVPL 0x7776706C
32 # define LIST_TYPE_DWPL 0x6477706C
33 # define LIST_TYPE_WAVE 0x77617665
34 # define LIST_TYPE_LINS 0X6C696E73
35 # define LIST_TYPE_INS 0X696E7320
36 # define LIST_TYPE_LRGN 0x6C72676E
37 # define LIST_TYPE_LART 0x6C617274
38 # define LIST_TYPE_LAR2 0x6C617232
39 # define LIST_TYPE_RGN 0x72676E20
40 # define LIST_TYPE_RGN2 0x72676E32
41 # define CHUNK_ID_IARL 0x4941524C
42 # define CHUNK_ID_IART 0x49415254
43 # define CHUNK_ID_ICMS 0x49434D53
44 # define CHUNK_ID_IGNR 0x49474E52
45 # define CHUNK_ID_IKEY 0x494B4559
46 # define CHUNK_ID_IMED 0x494D4544
47 # define CHUNK_ID_ISBJ 0x4953424A
48 # define CHUNK_ID_ISRC 0x49535243
49 # define CHUNK_ID_ISRF 0x49535246
50 # define CHUNK_ID_ITCH 0x49544348
51 # define CHUNK_ID_VERS 0x76657273
52 # define CHUNK_ID_DLID 0x646C6964
53 # define CHUNK_ID_FMT 0x666D7420
54 # define CHUNK_ID_DATA 0x64617461
55 # define CHUNK_ID_INSH 0x696E7368
56 # define CHUNK_ID_RGNH 0x72676E68
57 # define CHUNK_ID_WLNK 0x776C6E6B
58 # define CHUNK_ID_PTBL 0x7074626C
59 # define CHUNK_ID_WSMP 0x77736D70
60 # define CHUNK_ID_COLH 0x636F6C68
61 # define CHUNK_ID_ARTL 0x6172746C
62 # define CHUNK_ID_ART2 0x61727432
63 # define CHUNK_ID_XFIL 0x7866696C
64 # define CHUNK_ID_DOXF 0x646F7866
66 # define RIFF_TYPE_DLS 0x20534C44
67 # define LIST_TYPE_WVPL 0x6C707677
68 # define LIST_TYPE_DWPL 0x6C707764
69 # define LIST_TYPE_WAVE 0x65766177
70 # define LIST_TYPE_LINS 0X736E696C
71 # define LIST_TYPE_INS 0X20736E69
72 # define LIST_TYPE_LRGN 0x6E67726C
73 # define LIST_TYPE_LART 0x7472616C
74 # define LIST_TYPE_LAR2 0x3272616C
75 # define LIST_TYPE_RGN 0x206E6772
76 # define LIST_TYPE_RGN2 0x326E6772
77 # define CHUNK_ID_IARL 0x4C524149
78 # define CHUNK_ID_IART 0x54524149
79 # define CHUNK_ID_ICMS 0x534D4349
80 # define CHUNK_ID_IGNR 0x524E4749
81 # define CHUNK_ID_IKEY 0x59454B49
82 # define CHUNK_ID_IMED 0x44454D49
83 # define CHUNK_ID_ISBJ 0x4A425349
84 # define CHUNK_ID_ISRC 0x43525349
85 # define CHUNK_ID_ISRF 0x46525349
86 # define CHUNK_ID_ITCH 0x48435449
87 # define CHUNK_ID_VERS 0x73726576
88 # define CHUNK_ID_DLID 0x64696C64
89 # define CHUNK_ID_FMT 0x20746D66
90 # define CHUNK_ID_DATA 0x61746164
91 # define CHUNK_ID_INSH 0x68736E69
92 # define CHUNK_ID_RGNH 0x686E6772
93 # define CHUNK_ID_WLNK 0x6B6E6C77
94 # define CHUNK_ID_PTBL 0x6C627470
95 # define CHUNK_ID_WSMP 0x706D7377
96 # define CHUNK_ID_COLH 0x686C6F63
97 # define CHUNK_ID_ARTL 0x6C747261
98 # define CHUNK_ID_ART2 0x32747261
99 # define CHUNK_ID_XFIL 0x6C696678
100 # define CHUNK_ID_DOXF 0x66786F64
103 #define DLS_WAVE_FORMAT_PCM 0x0001
110 typedef std::string String;
133 conn_src_none = 0x0000,
134 conn_src_lfo = 0x0001,
135 conn_src_keyonvelocity = 0x0002,
136 conn_src_keynumber = 0x0003,
137 conn_src_eg1 = 0x0004,
138 conn_src_eg2 = 0x0005,
139 conn_src_pitchwheel = 0x0006,
140 conn_src_polypressure = 0x0007,
141 conn_src_channelpressure = 0x0008,
142 conn_src_vibrato = 0x0009,
144 conn_src_cc1 = 0x0081,
145 conn_src_cc7 = 0x0087,
146 conn_src_cc10 = 0x008A,
147 conn_src_cc11 = 0x008B,
148 conn_src_cc91 = 0x00DB,
149 conn_src_cc93 = 0x00DD,
151 conn_src_rpn0 = 0x0100,
152 conn_src_rpn1 = 0x0101,
153 conn_src_rpn2 = 0x0102
159 conn_dst_none = 0x0000,
160 conn_dst_gain = 0x0001,
161 conn_dst_reserved = 0x0002,
162 conn_dst_pitch = 0x0003,
163 conn_dst_pan = 0x0004,
164 conn_dst_keynumber = 0x0005,
166 conn_dst_left = 0x0010,
167 conn_dst_right = 0x0011,
168 conn_dst_center = 0x0012,
169 conn_dst_lfe_channel = 0x0013,
170 conn_dst_leftrear = 0x0014,
171 conn_dst_rightrear = 0x0015,
172 conn_dst_chorus = 0x0080,
173 conn_dst_reverb = 0x0081,
175 conn_dst_lfo_frequency = 0x0104,
176 conn_dst_lfo_startdelay = 0x0105,
178 conn_dst_vib_frequency = 0x0114,
179 conn_dst_vib_startdelay = 0x0115,
181 conn_dst_eg1_attacktime = 0x0206,
182 conn_dst_eg1_decaytime = 0x0207,
183 conn_dst_eg1_reserved = 0x0208,
184 conn_dst_eg1_releasetime = 0x0209,
185 conn_dst_eg1_sustainlevel = 0x020A,
186 conn_dst_eg1_delaytime = 0x020B,
187 conn_dst_eg1_holdtime = 0x020C,
188 conn_dst_eg1_shutdowntime = 0x020D,
189 conn_dst_eg2_attacktime = 0x030A,
190 conn_dst_eg2_decaytime = 0x030B,
191 conn_dst_eg2_reserved = 0x030C,
192 conn_dst_eg2_releasetime = 0x030D,
193 conn_dst_eg2_sustainlevel = 0x030E,
194 conn_dst_eg2_delaytime = 0x030F,
195 conn_dst_eg2_holdtime = 0x0310,
197 conn_dst_filter_cutoff = 0x0500,
198 conn_dst_filter_q = 0x0501
203 conn_trn_none = 0x0000,
204 conn_trn_concave = 0x0001,
205 conn_trn_convex = 0x0002,
206 conn_trn_switch = 0x0003
214 inline bool operator< (
const range_t& other)
const {
215 if (
low < other.
low)
return true;
216 if (
low > other.
low)
return false;
220 inline bool operator== (
const range_t& other)
const {
224 inline bool overlaps(uint16_t scalar)
const {
225 return low <= scalar && scalar <=
high;
228 inline bool overlaps(
const range_t& other)
const {
229 return overlaps(other.low) || overlaps(other.high) ||
230 other.overlaps(
low) || other.overlaps(
high);
263 struct conn_block_t {
266 uint16_t destination;
271 void Init(conn_block_t* Header);
272 conn_block_t ToConnBlock();
338 RIFF::Chunk* pArticulationCk;
347 Articulation* GetFirstArticulation() LIBGIG_DEPRECATED_API(
"Use GetArticulation() instead.");
348 Articulation* GetNextArticulation() LIBGIG_DEPRECATED_API(
"Use GetArticulation() instead.");
353 typedef std::vector<Articulation*> ArticulationList;
355 ArticulationList* pArticulations;
356 ArticulationList::iterator ArticulationsIterator;
358 void LoadArticulations();
382 bool UseFixedLengthStrings LIBGIG_DEPRECATED_API(
"Not used anymore, use SetFixedStringLengths() instead.");
384 struct string_length_t {
390 void SetFixedStringLengths(
const string_length_t* lengths);
394 virtual
void CopyAssign(const
Info* orig);
396 RIFF::List* pResourceListChunk;
397 const string_length_t* pFixedStringLengths;
399 static
void LoadString(uint32_t ChunkID,
RIFF::List* lstINFO, String& s);
400 void SaveString(uint32_t ChunkID,
RIFF::List* lstINFO, const String& s, const String& sDefault);
409 Resource* GetParent() {
return pParent; }
410 const Resource* GetParent()
const {
return pParent; }
411 virtual void UpdateChunks(progress_t* pProgress) OVERRIDE;
413 void GenerateDLSID();
414 static
void GenerateDLSID(dlsid_t* pDLSID);
415 virtual
void CopyAssign(const Resource* orig);
418 RIFF::List* pResourceList;
420 Resource(Resource* Parent,
RIFF::List* lstResource);
430 bool NoSampleDepthTruncation;
431 bool NoSampleCompression;
437 virtual void SetGain(int32_t gain);
440 virtual
void CopyAssign(const
Sampler* orig);
442 RIFF::List* pParentList;
443 uint32_t uiHeaderSize;
444 uint32_t SamplerOptions;
468 void* LoadSampleData();
469 void ReleaseSampleData();
470 file_offset_t GetSize()
const;
471 void Resize(file_offset_t NewSize);
473 file_offset_t Read(
void* pBuffer, file_offset_t SampleCount);
474 file_offset_t Write(
void* pBuffer, file_offset_t SampleCount);
477 virtual
void CopyAssign(const
Sample* orig);
480 RIFF::List* pWaveList;
481 RIFF::Chunk* pCkData;
482 RIFF::Chunk* pCkFormat;
483 file_offset_t ullWavePoolOffset;
485 Sample(
File* pFile,
RIFF::List* waveList, file_offset_t WavePoolOffset);
487 void CopyAssignCore(const
Sample* orig);
499 bool SelfNonExclusive;
506 void SetSample(
Sample* pSample);
507 virtual void SetKeyRange(uint16_t Low, uint16_t High);
510 virtual
void CopyAssign(const
Region* orig);
512 RIFF::List* pCkRegion;
513 uint32_t WavePoolTableIndex;
515 uint16_t FormatOptionFlags;
516 uint16_t WaveLinkOptionFlags;
533 size_t CountRegions();
534 Region* GetRegionAt(
size_t pos);
535 Region* GetFirstRegion() LIBGIG_DEPRECATED_API("Use GetRegionAt() instead.");
536 Region* GetNextRegion() LIBGIG_DEPRECATED_API("Use GetRegionAt() instead.");
538 void DeleteRegion(
Region* pRegion);
541 virtual
void CopyAssign(const
Instrument* orig);
543 typedef std::vector<
Region*> RegionList;
544 struct midi_locale_t {
550 RegionList* pRegions;
551 RegionList::iterator RegionsIterator;
555 virtual void LoadRegions();
571 String GetFileName();
572 void SetFileName(
const String& name);
573 Sample* GetSample(
size_t index);
574 Sample* GetFirstSample() LIBGIG_DEPRECATED_API("Use GetSample() instead.");
575 Sample* GetNextSample() LIBGIG_DEPRECATED_API("Use GetSample() instead.");
577 void DeleteSample(
Sample* pSample);
579 Instrument* GetFirstInstrument() LIBGIG_DEPRECATED_API("Use GetInstrument() instead.");
580 Instrument* GetNextInstrument() LIBGIG_DEPRECATED_API("Use GetInstrument() instead.");
582 void DeleteInstrument(
Instrument* pInstrument);
584 RIFF::
File* GetExtensionFile(
int index);
586 virtual
void Save(const String& Path,
progress_t* pProgress = NULL);
587 virtual
void Save(
progress_t* pProgress = NULL);
590 typedef std::vector<
Sample*> SampleList;
591 typedef std::vector<
Instrument*> InstrumentList;
594 std::list<
RIFF::
File*> ExtensionFiles;
595 SampleList* pSamples;
596 SampleList::iterator SamplesIterator;
597 InstrumentList* pInstruments;
598 InstrumentList::iterator InstrumentsIterator;
599 uint32_t WavePoolHeaderSize;
600 uint32_t WavePoolCount;
601 uint32_t* pWavePoolTable;
602 uint32_t* pWavePoolTableHi;
603 bool b64BitWavePoolOffsets;
606 virtual
void LoadSamples();
607 virtual
void LoadInstruments();
608 virtual
void UpdateFileOffsets();
609 void __ensureMandatoryChunksExist();
612 void __UpdateWavePoolTableChunk();
613 void __UpdateWavePoolTable();
Provides access to the defined connections used for the synthesis model.
Connection * pConnections
Points to the beginning of a Connection array.
virtual void DeleteChunks()
Remove all RIFF chunks associated with this Articulation object.
virtual void UpdateChunks(progress_t *pProgress)
Apply articulation connections to the respective RIFF chunks.
uint32_t Connections
Reflects the number of Connections.
Articulation(RIFF::Chunk *artl)
Constructor.
Abstract base class for classes that provide articulation information (thus for Instrument and Region...
Defines a connection within the synthesis model.
Will be thrown whenever a DLS specific error occurs while trying to access a DLS File.
Parses DLS Level 1 and 2 compliant files and provides abstract access to the data.
version_t * pVersion
Points to a version_t structure if the file provided a version number else is set to NULL.
uint32_t Instruments
Reflects the number of available Instrument objects.
Optional information for DLS files, instruments, samples, etc.
String Subject
<ISBJ-ck>. Describes the contents of the file.
String Genre
<IGNR-ck>. Descirbes the original work, such as, Jazz, Classic, Rock, Techno, Rave,...
String Keywords
<IKEY-ck>. Provides a list of keywords that refer to the file or subject of the file....
String SourceForm
<ISRF-ck>. Identifies the original form of the material that was digitized, such as record,...
String Comments
<ICMT-ck>. Provides general comments about the file or the subject of the file. Sentences might end w...
String Medium
<IMED-ck>. Describes the original subject of the file, such as, record, CD, and so forth.
String Software
<ISFT-ck>. Identifies the name of the sofware package used to create the file.
String Artists
<IART-ck>. Lists the artist of the original subject of the file.
String Product
<IPRD-ck>. Specifies the name of the title the file was originally intended for, such as World Ruler ...
String Name
<INAM-ck>. Stores the title of the subject of the file, such as, Seattle From Above.
String CreationDate
<ICRD-ck>. Specifies the date the subject of the file was created. List dates in yyyy-mm-dd format.
String ArchivalLocation
<IARL-ck>. Indicates where the subject of the file is stored.
String Engineer
<IENG-ck>. Stores the name of the engineer who worked on the file. Multiple engineer names are separa...
String Commissioned
<ICMS-ck>. Lists the name of the person or organization that commissioned the subject of the file,...
String Copyright
<ICOP-ck>. Records the copyright information for the file.
String Source
<ISRC-ck>. Identifies the name of the person or organization who supplied the original subject of the...
String Technician
<ITCH-ck>. Identifies the technician who sampled the subject file.
Provides all neccessary information for the synthesis of a DLS Instrument.
uint8_t MIDIBankFine
Reflects the MIDI Bank number for MIDI Control Change 32 (bank 1 - 128).
uint8_t MIDIBankCoarse
Reflects the MIDI Bank number for MIDI Control Change 0 (bank 1 - 128).
bool IsDrum
Indicates if the Instrument is a drum type, as they differ in the synthesis model of DLS from melodic...
uint32_t Regions
Reflects the number of Region defintions this Instrument has.
uint16_t MIDIBank
Reflects combination of MIDIBankCoarse and MIDIBankFine (bank 1 - bank 16384). Do not change this val...
uint32_t MIDIProgram
Specifies the MIDI Program Change Number this Instrument should be assigned to.
Defines Region information of an Instrument.
Abstract base class which encapsulates data structures which all DLS resources are able to provide.
Info * pInfo
Points (in any case) to an Info object, providing additional, optional infos and comments.
dlsid_t * pDLSID
Points to a dlsid_t structure if the file provided a DLS ID else is NULL.
Encapsulates sample waves used for playback.
uint16_t BlockAlign
The block alignment (in bytes) of the waveform data. Playback software needs to process a multiple of...
uint16_t BitDepth
Size of each sample per channel (only if known sample data format is used, 0 otherwise).
uint16_t Channels
Number of channels represented in the waveform data, e.g. 1 for mono, 2 for stereo (defaults to 1=mon...
uint32_t SamplesPerSecond
Sampling rate at which each channel should be played (defaults to 44100 if Sample was created with In...
file_offset_t SamplesTotal
Reflects total number of sample points (only if known sample data format is used, 0 otherwise),...
uint16_t FormatTag
Format ID of the waveform data (should be DLS_WAVE_FORMAT_PCM for DLS1 compliant files,...
uint FrameSize
Reflects the size (in bytes) of one single sample point (only if known sample data format is used,...
uint32_t AverageBytesPerSecond
The average number of bytes per second at which the waveform data should be transferred (Playback sof...
Abstract base class which provides mandatory informations about sample players in general.
uint32_t SampleLoops
Reflects the number of sample loops.
sample_loop_t * pSampleLoops
Points to the beginning of a sample loop array, or is NULL if there are no loops defined.
Abstract base class for all classes using RIFF::Chunks for persistency.
virtual void DeleteChunks()=0
Remove all RIFF chunks associated with this object.
virtual void UpdateChunks(progress_t *pProgress)=0
Apply object's changes to the respective RIF::Chunks.
DLS specific classes and definitions.
String libraryName()
Returns the name of this C++ library.
String libraryVersion()
Returns version of this C++ library.
conn_src_t
Connection Sources.
conn_dst_t
Connection Destinations.
conn_trn_t
Connection Transforms.
RIFF specific classes and definitions.
stream_whence_t
File stream position dependent to these relations.
uint64_t file_offset_t
Type used by libgig for handling file positioning during file I/O tasks.
Every subject of an DLS file and the file itself can have an unique, computer generated ID.
Lower and upper limit of a range.
uint16_t low
Low value of range.
uint16_t high
High value of range.
Defines Sample Loop Points.
uint32_t LoopLength
Length of the looping area (in sample points).
uint32_t Size
For internal usage only: usually reflects exactly sizeof(sample_loop_t), otherwise if the value is la...
uint32_t LoopStart
The start value specifies the offset (in sample points) in the waveform data of the first sample poin...
uint32_t LoopType
Defines how the waveform samples will be looped (appropriate loop types for the gig format are define...
Quadtuple version number ("major.minor.release.build").
Used for indicating the progress of a certain task.