libgig 4.4.1
DLS.h
1/***************************************************************************
2 * *
3 * libgig - C++ cross-platform Gigasampler format file access library *
4 * *
5 * Copyright (C) 2003-2021 by Christian Schoenebeck *
6 * <cuse@users.sourceforge.net> *
7 * *
8 * This library is free software; you can redistribute it and/or modify *
9 * it under the terms of the GNU General Public License as published by *
10 * the Free Software Foundation; either version 2 of the License, or *
11 * (at your option) any later version. *
12 * *
13 * This library is distributed in the hope that it will be useful, *
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
16 * GNU General Public License for more details. *
17 * *
18 * You should have received a copy of the GNU General Public License *
19 * along with this library; if not, write to the Free Software *
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, *
21 * MA 02111-1307 USA *
22 ***************************************************************************/
23
24#ifndef __DLS_H__
25#define __DLS_H__
26
27#include "RIFF.h"
28
29#if WORDS_BIGENDIAN
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
65#else // little endian
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
101#endif // WORDS_BIGENDIAN
102
103#define DLS_WAVE_FORMAT_PCM 0x0001
104
105//TODO: no support for conditional chunks <cdl> yet
106
108namespace DLS {
109
110 typedef std::string String;
112 typedef RIFF::file_offset_t file_offset_t;
113
115 struct version_t {
116 uint16_t minor;
117 uint16_t major;
118 uint16_t build;
119 uint16_t release;
120 };
121
123 struct dlsid_t {
124 uint32_t ulData1;
125 uint16_t usData2;
126 uint16_t usData3;
127 uint8_t abData[8];
128 };
129
132 // Modulator Sources
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,
143 // MIDI Controller Sources
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,
150 // Registered Parameter Numbers
151 conn_src_rpn0 = 0x0100,
152 conn_src_rpn1 = 0x0101,
153 conn_src_rpn2 = 0x0102
154 };
155
158 // Generic Destinations
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,
165 // Channel Output Destinations
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,
174 // Modulator LFO Destinations
175 conn_dst_lfo_frequency = 0x0104,
176 conn_dst_lfo_startdelay = 0x0105,
177 // Vibrato LFO Destinations
178 conn_dst_vib_frequency = 0x0114,
179 conn_dst_vib_startdelay = 0x0115,
180 // EG Destinations
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,
196 // Filter Destinations
197 conn_dst_filter_cutoff = 0x0500,
198 conn_dst_filter_q = 0x0501
199 };
200
203 conn_trn_none = 0x0000,
204 conn_trn_concave = 0x0001,
205 conn_trn_convex = 0x0002,
206 conn_trn_switch = 0x0003
207 };
208
210 struct range_t {
211 uint16_t low;
212 uint16_t high;
213
214 inline bool operator< (const range_t& other) const {
215 if (low < other.low) return true;
216 if (low > other.low) return false;
217 return high < other.high;
218 }
219
220 inline bool operator== (const range_t& other) const {
221 return low == other.low && high == other.high;
222 }
223
224 inline bool overlaps(uint16_t scalar) const {
225 return low <= scalar && scalar <= high;
226 }
227
228 inline bool overlaps(const range_t& other) const {
229 return overlaps(other.low) || overlaps(other.high) ||
230 other.overlaps(low) || other.overlaps(high);
231 }
232 };
233
236 uint32_t Size;
237 uint32_t LoopType;
238 uint32_t LoopStart;
239 uint32_t LoopLength;
240 };
241
242 // just symbol prototyping
243 class File;
244 class Instrument;
245 class Region;
246 class Sample;
247
250 public:
251 conn_src_t Source;
252 conn_trn_t SourceTransform;
253 bool SourceInvert;
254 bool SourceBipolar;
255 conn_src_t Control;
256 conn_trn_t ControlTransform;
257 bool ControlInvert;
258 bool ControlBipolar;
259 conn_dst_t Destination;
260 conn_trn_t DestinationTransform;
261 uint32_t Scale;
262 protected:
263 struct conn_block_t {
264 uint16_t source;
265 uint16_t control;
266 uint16_t destination;
267 uint16_t transform;
268 uint32_t scale;
269 };
270 Connection() {}
271 void Init(conn_block_t* Header);
272 conn_block_t ToConnBlock();
273 virtual ~Connection() {}
274 friend class Articulation;
275 };
276
283 class Storage {
284 public:
305 virtual void UpdateChunks(progress_t* pProgress) = 0;
306
324 virtual void DeleteChunks() = 0;
325 };
326
328 class Articulation : public Storage {
329 public:
331 uint32_t Connections;
332
334 virtual ~Articulation();
335 virtual void UpdateChunks(progress_t* pProgress) OVERRIDE;
336 virtual void DeleteChunks() OVERRIDE;
337 protected:
338 RIFF::Chunk* pArticulationCk;
339 uint32_t HeaderSize;
340 };
341
343 class Articulator : public Storage {
344 public:
345 Articulator(RIFF::List* ParentList);
346 Articulation* GetArticulation(size_t pos);
347 Articulation* GetFirstArticulation() LIBGIG_DEPRECATED_API("Use GetArticulation() instead.");
348 Articulation* GetNextArticulation() LIBGIG_DEPRECATED_API("Use GetArticulation() instead.");
349 virtual void UpdateChunks(progress_t* pProgress) OVERRIDE;
350 virtual void DeleteChunks() OVERRIDE;
351 virtual void CopyAssign(const Articulator* orig);
352 protected:
353 typedef std::vector<Articulation*> ArticulationList;
354 RIFF::List* pParentList;
355 ArticulationList* pArticulations;
356 ArticulationList::iterator ArticulationsIterator;
357
358 void LoadArticulations();
359 virtual ~Articulator();
360 };
361
363 class Info : public Storage {
364 public:
365 String Name;
368 String Comments;
369 String Product;
370 String Copyright;
371 String Artists;
372 String Genre;
373 String Keywords;
374 String Engineer;
375 String Technician;
376 String Software;
377 String Medium;
378 String Source;
379 String SourceForm;
381 String Subject;
383
384 struct string_length_t {
385 uint32_t chunkId;
386 int length;
387 };
388
389 Info(RIFF::List* list);
390 void SetFixedStringLengths(const string_length_t* lengths);
391 virtual ~Info();
392 virtual void UpdateChunks(progress_t* pProgress) OVERRIDE;
393 virtual void DeleteChunks() OVERRIDE;
394 virtual void CopyAssign(const Info* orig);
395 private:
396 RIFF::List* pResourceListChunk;
397 const string_length_t* pFixedStringLengths;
398
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);
401 };
402
404 class Resource : public Storage {
405 public:
408
409 Resource* GetParent() { return pParent; }
410 const Resource* GetParent() const { return pParent; }
411 virtual void UpdateChunks(progress_t* pProgress) OVERRIDE;
412 virtual void DeleteChunks() OVERRIDE;
413 void GenerateDLSID();
414 static void GenerateDLSID(dlsid_t* pDLSID);
415 virtual void CopyAssign(const Resource* orig);
416 protected:
417 Resource* pParent;
418 RIFF::List* pResourceList;
419
420 Resource(Resource* Parent, RIFF::List* lstResource);
421 virtual ~Resource();
422 };
423
425 class Sampler : public Storage {
426 public:
427 uint8_t UnityNote;
428 int16_t FineTune;
429 int32_t Gain;
430 bool NoSampleDepthTruncation;
431 bool NoSampleCompression;
432 uint32_t SampleLoops;
434
435 void AddSampleLoop(sample_loop_t* pLoopDef);
436 void DeleteSampleLoop(sample_loop_t* pLoopDef);
437 virtual void SetGain(int32_t gain);
438 virtual void UpdateChunks(progress_t* pProgress) OVERRIDE;
439 virtual void DeleteChunks() OVERRIDE;
440 virtual void CopyAssign(const Sampler* orig);
441 protected:
442 RIFF::List* pParentList;
443 uint32_t uiHeaderSize;
444 uint32_t SamplerOptions;
445 Sampler(RIFF::List* ParentList);
446 virtual ~Sampler();
447 };
448
457 class Sample : public Resource {
458 public:
459 uint16_t FormatTag;
460 uint16_t Channels;
463 uint16_t BlockAlign;
464 uint16_t BitDepth;
465 file_offset_t SamplesTotal;
467
468 void* LoadSampleData();
469 void ReleaseSampleData();
470 file_offset_t GetSize() const;
471 void Resize(file_offset_t NewSize);
472 file_offset_t SetPos(file_offset_t SampleCount, RIFF::stream_whence_t Whence = RIFF::stream_start);
473 file_offset_t Read(void* pBuffer, file_offset_t SampleCount);
474 file_offset_t Write(void* pBuffer, file_offset_t SampleCount);
475 virtual void UpdateChunks(progress_t* pProgress) OVERRIDE;
476 virtual void DeleteChunks() OVERRIDE;
477 virtual void CopyAssign(const Sample* orig);
478
479 protected:
480 RIFF::List* pWaveList;
481 RIFF::Chunk* pCkData;
482 RIFF::Chunk* pCkFormat;
483 file_offset_t ullWavePoolOffset; // needed for comparison with the wave pool link table, thus the link to instruments
484
485 Sample(File* pFile, RIFF::List* waveList, file_offset_t WavePoolOffset);
486 virtual ~Sample();
487 void CopyAssignCore(const Sample* orig);
488 friend class File;
489 friend class Region; // Region has to compare the wave pool offset to get its sample
490 };
491
493 class Region : public Resource, public Articulator, public Sampler {
494 public:
496 range_t VelocityRange;
497 uint16_t KeyGroup;
498 uint16_t Layer;
499 bool SelfNonExclusive;
500 bool PhaseMaster;
501 uint16_t PhaseGroup;
502 bool MultiChannel;
503 uint32_t Channel;
504
505 Sample* GetSample();
506 void SetSample(Sample* pSample);
507 virtual void SetKeyRange(uint16_t Low, uint16_t High);
508 virtual void UpdateChunks(progress_t* pProgress) OVERRIDE;
509 virtual void DeleteChunks() OVERRIDE;
510 virtual void CopyAssign(const Region* orig);
511 protected:
512 RIFF::List* pCkRegion;
513 uint32_t WavePoolTableIndex; // index in the wave pool table to the sample wave this region is linked to
514 Sample* pSample; // every region refers to exactly one sample
515 uint16_t FormatOptionFlags;
516 uint16_t WaveLinkOptionFlags;
517
518 Region(Instrument* pInstrument, RIFF::List* rgnList);
519 virtual ~Region();
520 friend class Instrument;
521 };
522
524 class Instrument : public Resource, public Articulator {
525 public:
526 bool IsDrum;
527 uint16_t MIDIBank;
529 uint8_t MIDIBankFine;
530 uint32_t MIDIProgram;
531 uint32_t Regions;
532
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.");
537 Region* AddRegion();
538 void DeleteRegion(Region* pRegion);
539 virtual void UpdateChunks(progress_t* pProgress) OVERRIDE;
540 virtual void DeleteChunks() OVERRIDE;
541 virtual void CopyAssign(const Instrument* orig);
542 protected:
543 typedef std::vector<Region*> RegionList;
544 struct midi_locale_t {
545 uint32_t bank;
546 uint32_t instrument;
547 };
548
549 RIFF::List* pCkInstrument;
550 RegionList* pRegions;
551 RegionList::iterator RegionsIterator;
552
553 Instrument(File* pFile, RIFF::List* insList);
554 void CopyAssignCore(const Instrument* orig);
555 virtual void LoadRegions();
556 virtual ~Instrument();
557 friend class File;
558 friend class Region;
559 private:
560 void MoveRegion(Region* pSrc, Region* pDst);
561 };
562
564 class File : public Resource {
565 public:
567 uint32_t Instruments;
568
569 File();
570 File(RIFF::File* pRIFF);
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.");
576 Sample* AddSample();
577 void DeleteSample(Sample* pSample);
578 Instrument* GetInstrument(size_t index);
579 Instrument* GetFirstInstrument() LIBGIG_DEPRECATED_API("Use GetInstrument() instead.");
580 Instrument* GetNextInstrument() LIBGIG_DEPRECATED_API("Use GetInstrument() instead.");
581 Instrument* AddInstrument();
582 void DeleteInstrument(Instrument* pInstrument);
583 RIFF::File* GetRiffFile();
584 RIFF::File* GetExtensionFile(int index);
585 virtual void UpdateChunks(progress_t* pProgress) OVERRIDE;
586 virtual void Save(const String& Path, progress_t* pProgress = NULL);
587 virtual void Save(progress_t* pProgress = NULL);
588 virtual ~File();
589 protected:
590 typedef std::vector<Sample*> SampleList;
591 typedef std::vector<Instrument*> InstrumentList;
592
593 RIFF::File* pRIFF;
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;
604 bool bOwningRiff;
605
606 virtual void LoadSamples();
607 virtual void LoadInstruments();
608 virtual void UpdateFileOffsets();
609 void __ensureMandatoryChunksExist();
610 friend class Region; // Region has to look in the wave pool table to get its sample
611 private:
612 void __UpdateWavePoolTableChunk();
613 void __UpdateWavePoolTable();
614 };
615
623 class Exception : public RIFF::Exception {
624 public:
625 Exception(String format, ...);
626 Exception(String format, va_list arg);
627 void PrintMessage();
628 protected:
629 Exception();
630 };
631
632 String libraryName();
633 String libraryVersion();
634
635} // namespace DLS
636
637#endif // __DLS_H__
Provides access to the defined connections used for the synthesis model.
Definition DLS.h:328
Connection * pConnections
Points to the beginning of a Connection array.
Definition DLS.h:330
virtual void DeleteChunks()
Remove all RIFF chunks associated with this Articulation object.
Definition DLS.cpp:179
virtual void UpdateChunks(progress_t *pProgress)
Apply articulation connections to the respective RIFF chunks.
Definition DLS.cpp:154
uint32_t Connections
Reflects the number of Connections.
Definition DLS.h:331
Abstract base class for classes that provide articulation information (thus for Instrument and Region...
Definition DLS.h:343
Defines a connection within the synthesis model.
Definition DLS.h:249
Will be thrown whenever a DLS specific error occurs while trying to access a DLS File.
Definition DLS.h:623
Parses DLS Level 1 and 2 compliant files and provides abstract access to the data.
Definition DLS.h:564
version_t * pVersion
Points to a version_t structure if the file provided a version number else is set to NULL.
Definition DLS.h:566
uint32_t Instruments
Reflects the number of available Instrument objects.
Definition DLS.h:567
Optional information for DLS files, instruments, samples, etc.
Definition DLS.h:363
String Subject
<ISBJ-ck>. Describes the contents of the file.
Definition DLS.h:381
String Genre
<IGNR-ck>. Descirbes the original work, such as, Jazz, Classic, Rock, Techno, Rave,...
Definition DLS.h:372
String Keywords
<IKEY-ck>. Provides a list of keywords that refer to the file or subject of the file....
Definition DLS.h:373
String SourceForm
<ISRF-ck>. Identifies the original form of the material that was digitized, such as record,...
Definition DLS.h:379
String Comments
<ICMT-ck>. Provides general comments about the file or the subject of the file. Sentences might end w...
Definition DLS.h:368
String Medium
<IMED-ck>. Describes the original subject of the file, such as, record, CD, and so forth.
Definition DLS.h:377
String Software
<ISFT-ck>. Identifies the name of the sofware package used to create the file.
Definition DLS.h:376
String Artists
<IART-ck>. Lists the artist of the original subject of the file.
Definition DLS.h:371
String Product
<IPRD-ck>. Specifies the name of the title the file was originally intended for, such as World Ruler ...
Definition DLS.h:369
String Name
<INAM-ck>. Stores the title of the subject of the file, such as, Seattle From Above.
Definition DLS.h:365
String CreationDate
<ICRD-ck>. Specifies the date the subject of the file was created. List dates in yyyy-mm-dd format.
Definition DLS.h:367
String ArchivalLocation
<IARL-ck>. Indicates where the subject of the file is stored.
Definition DLS.h:366
String Engineer
<IENG-ck>. Stores the name of the engineer who worked on the file. Multiple engineer names are separa...
Definition DLS.h:374
bool UseFixedLengthStrings
Definition DLS.h:382
String Commissioned
<ICMS-ck>. Lists the name of the person or organization that commissioned the subject of the file,...
Definition DLS.h:380
String Copyright
<ICOP-ck>. Records the copyright information for the file.
Definition DLS.h:370
String Source
<ISRC-ck>. Identifies the name of the person or organization who supplied the original subject of the...
Definition DLS.h:378
String Technician
<ITCH-ck>. Identifies the technician who sampled the subject file.
Definition DLS.h:375
Provides all neccessary information for the synthesis of a DLS Instrument.
Definition DLS.h:524
uint8_t MIDIBankFine
Reflects the MIDI Bank number for MIDI Control Change 32 (bank 1 - 128).
Definition DLS.h:529
uint8_t MIDIBankCoarse
Reflects the MIDI Bank number for MIDI Control Change 0 (bank 1 - 128).
Definition DLS.h:528
bool IsDrum
Indicates if the Instrument is a drum type, as they differ in the synthesis model of DLS from melodic...
Definition DLS.h:526
uint32_t Regions
Reflects the number of Region defintions this Instrument has.
Definition DLS.h:531
uint16_t MIDIBank
Reflects combination of MIDIBankCoarse and MIDIBankFine (bank 1 - bank 16384). Do not change this val...
Definition DLS.h:527
uint32_t MIDIProgram
Specifies the MIDI Program Change Number this Instrument should be assigned to.
Definition DLS.h:530
Defines Region information of an Instrument.
Definition DLS.h:493
range_t KeyRange
Definition DLS.h:495
Abstract base class which encapsulates data structures which all DLS resources are able to provide.
Definition DLS.h:404
Info * pInfo
Points (in any case) to an Info object, providing additional, optional infos and comments.
Definition DLS.h:406
dlsid_t * pDLSID
Points to a dlsid_t structure if the file provided a DLS ID else is NULL.
Definition DLS.h:407
Encapsulates sample waves used for playback.
Definition DLS.h:457
uint16_t BlockAlign
The block alignment (in bytes) of the waveform data. Playback software needs to process a multiple of...
Definition DLS.h:463
uint16_t BitDepth
Size of each sample per channel (only if known sample data format is used, 0 otherwise).
Definition DLS.h:464
uint16_t Channels
Number of channels represented in the waveform data, e.g. 1 for mono, 2 for stereo (defaults to 1=mon...
Definition DLS.h:460
uint32_t SamplesPerSecond
Sampling rate at which each channel should be played (defaults to 44100 if Sample was created with In...
Definition DLS.h:461
file_offset_t SamplesTotal
Reflects total number of sample points (only if known sample data format is used, 0 otherwise),...
Definition DLS.h:465
uint16_t FormatTag
Format ID of the waveform data (should be DLS_WAVE_FORMAT_PCM for DLS1 compliant files,...
Definition DLS.h:459
uint FrameSize
Reflects the size (in bytes) of one single sample point (only if known sample data format is used,...
Definition DLS.h:466
uint32_t AverageBytesPerSecond
The average number of bytes per second at which the waveform data should be transferred (Playback sof...
Definition DLS.h:462
Abstract base class which provides mandatory informations about sample players in general.
Definition DLS.h:425
uint32_t SampleLoops
Reflects the number of sample loops.
Definition DLS.h:432
sample_loop_t * pSampleLoops
Points to the beginning of a sample loop array, or is NULL if there are no loops defined.
Definition DLS.h:433
int32_t Gain
Definition DLS.h:429
Abstract base class for all classes using RIFF::Chunks for persistency.
Definition DLS.h:283
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.
Ordinary RIFF Chunk.
Definition RIFF.h:179
RIFF File.
Definition RIFF.h:313
RIFF List Chunk.
Definition RIFF.h:261
DLS specific classes and definitions.
Definition DLS.h:108
conn_src_t
Connection Sources.
Definition DLS.h:131
conn_dst_t
Connection Destinations.
Definition DLS.h:157
conn_trn_t
Connection Transforms.
Definition DLS.h:202
RIFF specific classes and definitions.
Definition RIFF.h:97
stream_whence_t
File stream position dependent to these relations.
Definition RIFF.h:124
uint64_t file_offset_t
Type used by libgig for handling file positioning during file I/O tasks.
Definition RIFF.h:107
Every subject of an DLS file and the file itself can have an unique, computer generated ID.
Definition DLS.h:123
Lower and upper limit of a range.
Definition DLS.h:210
uint16_t low
Low value of range.
Definition DLS.h:211
uint16_t high
High value of range.
Definition DLS.h:212
Defines Sample Loop Points.
Definition DLS.h:235
uint32_t LoopLength
Length of the looping area (in sample points).
Definition DLS.h:239
uint32_t Size
For internal usage only: usually reflects exactly sizeof(sample_loop_t), otherwise if the value is la...
Definition DLS.h:236
uint32_t LoopStart
The start value specifies the offset (in sample points) in the waveform data of the first sample poin...
Definition DLS.h:238
uint32_t LoopType
Defines how the waveform samples will be looped (appropriate loop types for the gig format are define...
Definition DLS.h:237
Quadtuple version number ("major.minor.release.build").
Definition DLS.h:115
Used for indicating the progress of a certain task.
Definition RIFF.h:163