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 
108 namespace 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 
131  enum conn_src_t {
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 
157  enum conn_dst_t {
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 
202  enum conn_trn_t {
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 
235  struct sample_loop_t {
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 
249  class Connection {
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 
333  Articulation(RIFF::Chunk* artl);
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;
367  String CreationDate;
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;
380  String Commissioned;
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;
461  uint32_t SamplesPerSecond;
463  uint16_t BlockAlign;
464  uint16_t BitDepth;
465  file_offset_t SamplesTotal;
466  uint FrameSize;
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;
528  uint8_t MIDIBankCoarse;
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__
uint16_t BlockAlign
The block alignment (in bytes) of the waveform data. Playback software needs to process a multiple of...
Definition: DLS.h:463
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
uint32_t Regions
Reflects the number of Region defintions this Instrument has.
Definition: DLS.h:531
Parses DLS Level 1 and 2 compliant files and provides abstract access to the data.
Definition: DLS.h:564
stream_whence_t
File stream position dependent to these relations.
Definition: RIFF.h:124
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
Abstract base class for all classes using RIFF::Chunks for persistency.
Definition: DLS.h:283
uint32_t LoopType
Defines how the waveform samples will be looped (appropriate loop types for the gig format are define...
Definition: DLS.h:237
String Engineer
<IENG-ck>. Stores the name of the engineer who worked on the file. Multiple engineer names are separa...
Definition: DLS.h:374
String Artists
<IART-ck>. Lists the artist of the original subject of the file.
Definition: DLS.h:371
Will be thrown whenever a DLS specific error occurs while trying to access a DLS File.
Definition: DLS.h:623
Optional information for DLS files, instruments, samples, etc.
Definition: DLS.h:363
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.
Definition: DLS.h:373
conn_src_t
Connection Sources.
Definition: DLS.h:131
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
file_offset_t SamplesTotal
Reflects total number of sample points (only if known sample data format is used, 0 otherwise)...
Definition: DLS.h:465
String SourceForm
<ISRF-ck>. Identifies the original form of the material that was digitized, such as record...
Definition: DLS.h:379
Defines Sample Loop Points.
Definition: DLS.h:235
uint16_t MIDIBank
Reflects combination of MIDIBankCoarse and MIDIBankFine (bank 1 - bank 16384). Do not change this val...
Definition: DLS.h:527
uint8_t MIDIBankCoarse
Reflects the MIDI Bank number for MIDI Control Change 0 (bank 1 - 128).
Definition: DLS.h:528
uint FrameSize
Reflects the size (in bytes) of one single sample point (only if known sample data format is used...
Definition: DLS.h:466
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
RIFF List Chunk.
Definition: RIFF.h:261
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()).
Definition: DLS.h:459
Abstract base class which provides mandatory informations about sample players in general...
Definition: DLS.h:425
String libraryName()
Returns the name of this C++ library.
Definition: DLS.cpp:2573
conn_trn_t
Connection Transforms.
Definition: DLS.h:202
uint32_t SampleLoops
Reflects the number of sample loops.
Definition: DLS.h:432
conn_dst_t
Connection Destinations.
Definition: DLS.h:157
uint16_t high
High value of range.
Definition: DLS.h:212
uint64_t file_offset_t
Type used by libgig for handling file positioning during file I/O tasks.
Definition: RIFF.h:107
uint32_t Size
For internal usage only: usually reflects exactly sizeof(sample_loop_t), otherwise if the value is la...
Definition: DLS.h:236
String Source
<ISRC-ck>. Identifies the name of the person or organization who supplied the original subject of the...
Definition: DLS.h:378
uint16_t BitDepth
Size of each sample per channel (only if known sample data format is used, 0 otherwise).
Definition: DLS.h:464
Ordinary RIFF Chunk.
Definition: RIFF.h:179
uint32_t MIDIProgram
Specifies the MIDI Program Change Number this Instrument should be assigned to.
Definition: DLS.h:530
String Commissioned
<ICMS-ck>. Lists the name of the person or organization that commissioned the subject of the file...
Definition: DLS.h:380
uint32_t LoopLength
Length of the looping area (in sample points).
Definition: DLS.h:239
Used for indicating the progress of a certain task.
Definition: RIFF.h:163
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
String Technician
<ITCH-ck>. Identifies the technician who sampled the subject file.
Definition: DLS.h:375
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 AverageBytesPerSecond
The average number of bytes per second at which the waveform data should be transferred (Playback sof...
Definition: DLS.h:462
uint8_t MIDIBankFine
Reflects the MIDI Bank number for MIDI Control Change 32 (bank 1 - 128).
Definition: DLS.h:529
Abstract base class which encapsulates data structures which all DLS resources are able to provide...
Definition: DLS.h:404
RIFF File.
Definition: RIFF.h:313
RIFF specific classes and definitions.
Definition: RIFF.h:97
String Software
<ISFT-ck>. Identifies the name of the sofware package used to create the file.
Definition: DLS.h:376
String ArchivalLocation
<IARL-ck>. Indicates where the subject of the file is stored.
Definition: DLS.h:366
Encapsulates sample waves used for playback.
Definition: DLS.h:457
String Name
<INAM-ck>. Stores the title of the subject of the file, such as, Seattle From Above.
Definition: DLS.h:365
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
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 Medium
<IMED-ck>. Describes the original subject of the file, such as, record, CD, and so forth...
Definition: DLS.h:377
String Subject
<ISBJ-ck>. Describes the contents of the file.
Definition: DLS.h:381
Abstract base class for classes that provide articulation information (thus for Instrument and Region...
Definition: DLS.h:343
Connection * pConnections
Points to the beginning of a Connection array.
Definition: DLS.h:330
uint32_t Connections
Reflects the number of Connections.
Definition: DLS.h:331
range_t KeyRange
Definition: DLS.h:495
Provides access to the defined connections used for the synthesis model.
Definition: DLS.h:328
dlsid_t * pDLSID
Points to a dlsid_t structure if the file provided a DLS ID else is NULL.
Definition: DLS.h:407
uint32_t Instruments
Reflects the number of available Instrument objects.
Definition: DLS.h:567
String Genre
<IGNR-ck>. Descirbes the original work, such as, Jazz, Classic, Rock, Techno, Rave, etc.
Definition: DLS.h:372
Provides all neccessary information for the synthesis of a DLS Instrument.
Definition: DLS.h:524
int32_t Gain
Definition: DLS.h:429
Quadtuple version number ("major.minor.release.build").
Definition: DLS.h:115
String Copyright
<ICOP-ck>. Records the copyright information for the file.
Definition: DLS.h:370
DLS specific classes and definitions.
Definition: DLS.h:108
Info * pInfo
Points (in any case) to an Info object, providing additional, optional infos and comments.
Definition: DLS.h:406
String libraryVersion()
Returns version of this C++ library.
Definition: DLS.cpp:2581
Defines a connection within the synthesis model.
Definition: DLS.h:249
bool UseFixedLengthStrings
Definition: DLS.h:382
String Comments
<ICMT-ck>. Provides general comments about the file or the subject of the file. Sentences might end w...
Definition: DLS.h:368
Defines Region information of an Instrument.
Definition: DLS.h:493
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