libgig  4.0.0
DLS.h
Go to the documentation of this file.
1 /***************************************************************************
2  * *
3  * libgig - C++ cross-platform Gigasampler format file access library *
4  * *
5  * Copyright (C) 2003-2014 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 #else // little endian
64 # define RIFF_TYPE_DLS 0x20534C44
65 # define LIST_TYPE_WVPL 0x6C707677
66 # define LIST_TYPE_DWPL 0x6C707764
67 # define LIST_TYPE_WAVE 0x65766177
68 # define LIST_TYPE_LINS 0X736E696C
69 # define LIST_TYPE_INS 0X20736E69
70 # define LIST_TYPE_LRGN 0x6E67726C
71 # define LIST_TYPE_LART 0x7472616C
72 # define LIST_TYPE_LAR2 0x3272616C
73 # define LIST_TYPE_RGN 0x206E6772
74 # define LIST_TYPE_RGN2 0x326E6772
75 # define CHUNK_ID_IARL 0x4C524149
76 # define CHUNK_ID_IART 0x54524149
77 # define CHUNK_ID_ICMS 0x534D4349
78 # define CHUNK_ID_IGNR 0x524E4749
79 # define CHUNK_ID_IKEY 0x59454B49
80 # define CHUNK_ID_IMED 0x44454D49
81 # define CHUNK_ID_ISBJ 0x4A425349
82 # define CHUNK_ID_ISRC 0x43525349
83 # define CHUNK_ID_ISRF 0x46525349
84 # define CHUNK_ID_ITCH 0x48435449
85 # define CHUNK_ID_VERS 0x73726576
86 # define CHUNK_ID_DLID 0x64696C64
87 # define CHUNK_ID_FMT 0x20746D66
88 # define CHUNK_ID_DATA 0x61746164
89 # define CHUNK_ID_INSH 0x68736E69
90 # define CHUNK_ID_RGNH 0x686E6772
91 # define CHUNK_ID_WLNK 0x6B6E6C77
92 # define CHUNK_ID_PTBL 0x6C627470
93 # define CHUNK_ID_WSMP 0x706D7377
94 # define CHUNK_ID_COLH 0x686C6F63
95 # define CHUNK_ID_ARTL 0x6C747261
96 # define CHUNK_ID_ART2 0x32747261
97 #endif // WORDS_BIGENDIAN
98 
99 #define DLS_WAVE_FORMAT_PCM 0x0001
100 
101 //TODO: no support for conditional chunks <cdl> yet
102 
104 namespace DLS {
105 
106  typedef std::string String;
108 
110  struct version_t {
111  uint16_t minor;
112  uint16_t major;
113  uint16_t build;
114  uint16_t release;
115  };
116 
118  struct dlsid_t {
119  uint32_t ulData1;
120  uint16_t usData2;
121  uint16_t usData3;
122  uint8_t abData[8];
123  };
124 
126  typedef enum {
127  // Modulator Sources
128  conn_src_none = 0x0000,
129  conn_src_lfo = 0x0001,
132  conn_src_eg1 = 0x0004,
133  conn_src_eg2 = 0x0005,
138  // MIDI Controller Sources
139  conn_src_cc1 = 0x0081,
140  conn_src_cc7 = 0x0087,
141  conn_src_cc10 = 0x008A,
142  conn_src_cc11 = 0x008B,
143  conn_src_cc91 = 0x00DB,
144  conn_src_cc93 = 0x00DD,
145  // Registered Parameter Numbers
146  conn_src_rpn0 = 0x0100,
147  conn_src_rpn1 = 0x0101,
148  conn_src_rpn2 = 0x0102
149  } conn_src_t;
150 
152  typedef enum {
153  // Generic Destinations
154  conn_dst_none = 0x0000,
155  conn_dst_gain = 0x0001,
157  conn_dst_pitch = 0x0003,
158  conn_dst_pan = 0x0004,
160  // Channel Output Destinations
161  conn_dst_left = 0x0010,
162  conn_dst_right = 0x0011,
163  conn_dst_center = 0x0012,
167  conn_dst_chorus = 0x0080,
168  conn_dst_reverb = 0x0081,
169  // Modulator LFO Destinations
172  // Vibrato LFO Destinations
175  // EG Destinations
191  // Filter Destinations
194  } conn_dst_t;
195 
197  typedef enum {
198  conn_trn_none = 0x0000,
200  conn_trn_convex = 0x0002,
202  } conn_trn_t;
203 
205  struct range_t {
206  uint16_t low;
207  uint16_t high;
208 
209  inline bool operator< (const range_t& other) const {
210  if (low < other.low) return true;
211  if (low > other.low) return false;
212  return high < other.high;
213  }
214 
215  inline bool operator== (const range_t& other) const {
216  return low == other.low && high == other.high;
217  }
218 
219  inline bool overlaps(uint16_t scalar) const {
220  return low <= scalar && scalar <= high;
221  }
222 
223  inline bool overlaps(const range_t& other) const {
224  return overlaps(other.low) || overlaps(other.high) ||
225  other.overlaps(low) || other.overlaps(high);
226  }
227  };
228 
230  struct sample_loop_t {
231  uint32_t Size;
232  uint32_t LoopType;
233  uint32_t LoopStart;
234  uint32_t LoopLength;
235  };
236 
237  // just symbol prototyping
238  class File;
239  class Instrument;
240  class Region;
241  class Sample;
242 
244  class Connection {
245  public:
256  uint32_t Scale;
257  protected:
258  struct conn_block_t {
259  uint16_t source;
260  uint16_t control;
261  uint16_t destination;
262  uint16_t transform;
263  uint32_t scale;
264  };
266  void Init(conn_block_t* Header);
267  conn_block_t ToConnBlock();
268  virtual ~Connection() {}
269  friend class Articulation;
270  };
271 
273  class Articulation {
274  public:
276  uint32_t Connections;
277 
278  Articulation(RIFF::Chunk* artl);
279  virtual ~Articulation();
280  virtual void UpdateChunks(progress_t* pProgress);
281  protected:
283  uint32_t HeaderSize;
284  };
285 
287  class Articulator {
288  public:
289  Articulator(RIFF::List* ParentList);
290  Articulation* GetFirstArticulation();
291  Articulation* GetNextArticulation();
292  virtual void UpdateChunks(progress_t* pProgress);
293  virtual void CopyAssign(const Articulator* orig);
294  protected:
295  typedef std::list<Articulation*> ArticulationList;
297  ArticulationList* pArticulations;
298  ArticulationList::iterator ArticulationsIterator;
299 
300  void LoadArticulations();
301  virtual ~Articulator();
302  };
303 
305  class Info {
306  public:
307  String Name;
309  String CreationDate;
310  String Comments;
311  String Product;
312  String Copyright;
313  String Artists;
314  String Genre;
315  String Keywords;
316  String Engineer;
317  String Technician;
318  String Software;
319  String Medium;
320  String Source;
321  String SourceForm;
322  String Commissioned;
323  String Subject;
325 
327  uint32_t chunkId;
328  int length;
329  };
330 
331  Info(RIFF::List* list);
332  void SetFixedStringLengths(const string_length_t* lengths);
333  virtual ~Info();
334  virtual void UpdateChunks(progress_t* pProgress);
335  virtual void CopyAssign(const Info* orig);
336  private:
337  RIFF::List* pResourceListChunk;
338  const string_length_t* pFixedStringLengths;
339 
340  static void LoadString(uint32_t ChunkID, RIFF::List* lstINFO, String& s);
341  void SaveString(uint32_t ChunkID, RIFF::List* lstINFO, const String& s, const String& sDefault);
342  };
343 
345  class Resource {
346  public:
349 
350  Resource* GetParent() { return pParent; }
351  const Resource* GetParent() const { return pParent; }
352  virtual void UpdateChunks(progress_t* pProgress);
353  void GenerateDLSID();
354  virtual void CopyAssign(const Resource* orig);
355  protected:
358 
359  Resource(Resource* Parent, RIFF::List* lstResource);
360  virtual ~Resource();
361  };
362 
364  class Sampler {
365  public:
366  uint8_t UnityNote;
367  int16_t FineTune;
368  int32_t Gain;
371  uint32_t SampleLoops;
373 
374  void AddSampleLoop(sample_loop_t* pLoopDef);
375  void DeleteSampleLoop(sample_loop_t* pLoopDef);
376  virtual void SetGain(int32_t gain);
377  virtual void UpdateChunks(progress_t* pProgress);
378  virtual void CopyAssign(const Sampler* orig);
379  protected:
381  uint32_t uiHeaderSize;
382  uint32_t SamplerOptions;
383  Sampler(RIFF::List* ParentList);
384  virtual ~Sampler();
385  };
386 
395  class Sample : public Resource {
396  public:
397  uint16_t FormatTag;
398  uint16_t Channels;
399  uint32_t SamplesPerSecond;
401  uint16_t BlockAlign;
402  uint16_t BitDepth;
403  unsigned long SamplesTotal;
404  uint FrameSize;
405 
406  void* LoadSampleData();
407  void ReleaseSampleData();
408  unsigned long GetSize() const;
409  void Resize(int iNewSize);
410  unsigned long SetPos(unsigned long SampleCount, RIFF::stream_whence_t Whence = RIFF::stream_start);
411  unsigned long Read(void* pBuffer, unsigned long SampleCount);
412  unsigned long Write(void* pBuffer, unsigned long SampleCount);
413  virtual void UpdateChunks(progress_t* pProgress);
414  virtual void CopyAssign(const Sample* orig);
415  protected:
419  unsigned long ulWavePoolOffset; // needed for comparison with the wave pool link table, thus the link to instruments
420 
421  Sample(File* pFile, RIFF::List* waveList, unsigned long WavePoolOffset);
422  virtual ~Sample();
423  void CopyAssignCore(const Sample* orig);
424  friend class File;
425  friend class Region; // Region has to compare the wave pool offset to get its sample
426  };
427 
429  class Region : public Resource, public Articulator, public Sampler {
430  public:
433  uint16_t KeyGroup;
434  uint16_t Layer;
437  uint16_t PhaseGroup;
439  uint32_t Channel;
440 
441  Sample* GetSample();
442  void SetSample(Sample* pSample);
443  virtual void SetKeyRange(uint16_t Low, uint16_t High);
444  virtual void UpdateChunks(progress_t* pProgress);
445  virtual void CopyAssign(const Region* orig);
446  protected:
448  uint32_t WavePoolTableIndex; // index in the wave pool table to the sample wave this region is linked to
449  Sample* pSample; // every region refers to exactly one sample
452 
453  Region(Instrument* pInstrument, RIFF::List* rgnList);
454  virtual ~Region();
455  friend class Instrument;
456  };
457 
459  class Instrument : public Resource, public Articulator {
460  public:
461  bool IsDrum;
462  uint16_t MIDIBank;
463  uint8_t MIDIBankCoarse;
464  uint8_t MIDIBankFine;
465  uint32_t MIDIProgram;
466  uint32_t Regions;
467 
468  Region* GetFirstRegion();
469  Region* GetNextRegion();
470  Region* AddRegion();
471  void DeleteRegion(Region* pRegion);
472  virtual void UpdateChunks(progress_t* pProgress);
473  virtual void CopyAssign(const Instrument* orig);
474  protected:
475  typedef std::list<Region*> RegionList;
476  struct midi_locale_t {
477  uint32_t bank;
478  uint32_t instrument;
479  };
480 
482  RegionList* pRegions;
483  RegionList::iterator RegionsIterator;
484 
485  Instrument(File* pFile, RIFF::List* insList);
486  void CopyAssignCore(const Instrument* orig);
487  virtual void LoadRegions();
488  virtual ~Instrument();
489  friend class File;
490  friend class Region;
491  private:
492  void MoveRegion(Region* pSrc, Region* pDst);
493  };
494 
496  class File : public Resource {
497  public:
499  uint32_t Instruments;
500 
501  File();
502  File(RIFF::File* pRIFF);
503  String GetFileName();
504  void SetFileName(const String& name);
505  Sample* GetFirstSample();
506  Sample* GetNextSample();
507  Sample* AddSample();
508  void DeleteSample(Sample* pSample);
509  Instrument* GetFirstInstrument();
510  Instrument* GetNextInstrument();
511  Instrument* AddInstrument();
512  void DeleteInstrument(Instrument* pInstrument);
513  RIFF::File* GetExtensionFile(int index);
514  virtual void UpdateChunks(progress_t* pProgress);
515  virtual void Save(const String& Path, progress_t* pProgress = NULL);
516  virtual void Save(progress_t* pProgress = NULL);
517  virtual ~File();
518  protected:
519  typedef std::list<Sample*> SampleList;
520  typedef std::list<Instrument*> InstrumentList;
521 
523  std::list<RIFF::File*> ExtensionFiles;
524  SampleList* pSamples;
525  SampleList::iterator SamplesIterator;
526  InstrumentList* pInstruments;
527  InstrumentList::iterator InstrumentsIterator;
529  uint32_t WavePoolCount;
530  uint32_t* pWavePoolTable;
531  uint32_t* pWavePoolTableHi;
533 
534  virtual void LoadSamples();
535  virtual void LoadInstruments();
536  virtual void UpdateFileOffsets();
537  void __ensureMandatoryChunksExist();
538  friend class Region; // Region has to look in the wave pool table to get its sample
539  private:
540  void __UpdateWavePoolTableChunk();
541  void __UpdateWavePoolTable();
542  };
543 
551  class Exception : public RIFF::Exception {
552  public:
553  Exception(String Message);
554  void PrintMessage();
555  };
556 
557  String libraryName();
558  String libraryVersion();
559 
560 } // namespace DLS
561 
562 #endif // __DLS_H__
ArticulationList * pArticulations
Definition: DLS.h:297
virtual ~Connection()
Definition: DLS.h:268
uint16_t BlockAlign
The block alignment (in bytes) of the waveform data. Playback software needs to process a multiple of...
Definition: DLS.h:401
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:372
uint32_t Regions
Reflects the number of Region defintions this Instrument has.
Definition: DLS.h:466
range_t VelocityRange
Definition: DLS.h:432
bool SourceBipolar
Definition: DLS.h:249
Parses DLS Level 1 and 2 compliant files and provides abstract access to the data.
Definition: DLS.h:496
stream_whence_t
File stream position dependent to these relations.
Definition: RIFF.h:159
uint16_t Layer
Definition: DLS.h:434
Connection()
Definition: DLS.h:265
String CreationDate
<ICRD-ck>. Specifies the date the subject of the file was created. List dates in yyyy-mm-dd format...
Definition: DLS.h:309
uint32_t LoopType
Defines how the waveform samples will be looped (appropriate loop types for the gig format are define...
Definition: DLS.h:232
ArticulationList::iterator ArticulationsIterator
Definition: DLS.h:298
String Engineer
<IENG-ck>. Stores the name of the engineer who worked on the file. Multiple engineer names are separa...
Definition: DLS.h:316
String Artists
<IART-ck>. Lists the artist of the original subject of the file.
Definition: DLS.h:313
std::string String
Definition: DLS.h:106
Will be thrown whenever a DLS specific error occurs while trying to access a DLS File.
Definition: DLS.h:551
uint32_t HeaderSize
Definition: DLS.h:283
conn_trn_t SourceTransform
Definition: DLS.h:247
Optional information for DLS files, instruments, samples, etc.
Definition: DLS.h:305
uint16_t usData2
Definition: DLS.h:120
uint16_t KeyGroup
Definition: DLS.h:433
const Resource * GetParent() const
Definition: DLS.h:351
RIFF::List * pCkRegion
Definition: DLS.h:447
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:315
std::list< Articulation * > ArticulationList
Definition: DLS.h:295
conn_src_t
Connection Sources.
Definition: DLS.h:126
uint32_t * pWavePoolTable
Definition: DLS.h:530
uint32_t WavePoolTableIndex
Definition: DLS.h:448
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:398
RIFF::List * pCkInstrument
Definition: DLS.h:481
uint32_t SamplerOptions
Definition: DLS.h:382
String SourceForm
<ISRF-ck>. Identifies the original form of the material that was digitized, such as record...
Definition: DLS.h:321
int16_t FineTune
Definition: DLS.h:367
bool ControlInvert
Definition: DLS.h:252
Defines Sample Loop Points.
Definition: DLS.h:230
RIFF::List * pResourceList
Definition: DLS.h:357
bool ControlBipolar
Definition: DLS.h:253
bool NoSampleCompression
Definition: DLS.h:370
uint16_t MIDIBank
Reflects combination of MIDIBankCoarse and MIDIBankFine (bank 1 - bank 16384). Do not change this val...
Definition: DLS.h:462
void LoadString(RIFF::Chunk *ck, std::string &s, int strLength)
Definition: SF.cpp:60
RIFF::List * pParentList
Definition: DLS.h:380
uint16_t minor
Definition: DLS.h:111
RIFF::List * pParentList
Definition: DLS.h:296
std::list< Sample * > SampleList
Definition: DLS.h:519
InstrumentList::iterator InstrumentsIterator
Definition: DLS.h:527
uint32_t uiHeaderSize
Definition: DLS.h:381
uint8_t MIDIBankCoarse
Reflects the MIDI Bank number for MIDI Control Change 0 (bank 1 - 128).
Definition: DLS.h:463
conn_dst_t Destination
Definition: DLS.h:254
uint FrameSize
Reflects the size (in bytes) of one single sample point (only if known sample data format is used...
Definition: DLS.h:404
RIFF::Chunk * pCkFormat
Definition: DLS.h:418
Every subject of an DLS file and the file itself can have an unique, computer generated ID...
Definition: DLS.h:118
bool overlaps(uint16_t scalar) const
Definition: DLS.h:219
bool MultiChannel
Definition: DLS.h:438
Lower and upper limit of a range.
Definition: DLS.h:205
uint16_t usData3
Definition: DLS.h:121
uint16_t low
Low value of range.
Definition: DLS.h:206
bool b64BitWavePoolOffsets
Definition: DLS.h:532
RIFF List Chunk.
Definition: RIFF.h:302
RIFF::Chunk * pCkData
Definition: DLS.h:417
RegionList * pRegions
Definition: DLS.h:482
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:397
Abstract base class which provides mandatory informations about sample players in general...
Definition: DLS.h:364
bool SelfNonExclusive
Definition: DLS.h:435
String libraryName()
Returns the name of this C++ library.
Definition: DLS.cpp:1971
conn_trn_t
Connection Transforms.
Definition: DLS.h:197
uint32_t SampleLoops
Reflects the number of sample loops.
Definition: DLS.h:371
conn_trn_t DestinationTransform
Definition: DLS.h:255
Resource * pParent
Definition: DLS.h:356
SampleList * pSamples
Definition: DLS.h:524
conn_dst_t
Connection Destinations.
Definition: DLS.h:152
bool NoSampleDepthTruncation
Definition: DLS.h:369
bool SourceInvert
Definition: DLS.h:248
uint16_t high
High value of range.
Definition: DLS.h:207
uint32_t Size
For internal usage only: usually reflects exactly sizeof(sample_loop_t), otherwise if the value is la...
Definition: DLS.h:231
bool PhaseMaster
Definition: DLS.h:436
std::list< Instrument * > InstrumentList
Definition: DLS.h:520
unsigned long SamplesTotal
Reflects total number of sample points (only if known sample data format is used, 0 otherwise)...
Definition: DLS.h:403
String Source
<ISRC-ck>. Identifies the name of the person or organization who supplied the original subject of the...
Definition: DLS.h:320
uint16_t BitDepth
Size of each sample per channel (only if known sample data format is used, 0 otherwise).
Definition: DLS.h:402
Ordinary RIFF Chunk.
Definition: RIFF.h:205
uint32_t Scale
Definition: DLS.h:256
uint8_t UnityNote
Definition: DLS.h:366
uint32_t MIDIProgram
Specifies the MIDI Program Change Number this Instrument should be assigned to.
Definition: DLS.h:465
String Commissioned
<ICMS-ck>. Lists the name of the person or organization that commissioned the subject of the file...
Definition: DLS.h:322
uint32_t LoopLength
Length of the looping area (in sample points).
Definition: DLS.h:234
Used for indicating the progress of a certain task.
Definition: RIFF.h:191
uint32_t ulData1
Definition: DLS.h:119
SampleList::iterator SamplesIterator
Definition: DLS.h:525
conn_src_t Control
Definition: DLS.h:250
uint16_t WaveLinkOptionFlags
Definition: DLS.h:451
version_t * pVersion
Points to a version_t structure if the file provided a version number else is set to NULL...
Definition: DLS.h:498
String Technician
<ITCH-ck>. Identifies the technician who sampled the subject file.
Definition: DLS.h:317
uint32_t LoopStart
The start value specifies the offset (in sample points) in the waveform data of the first sample poin...
Definition: DLS.h:233
uint16_t major
Definition: DLS.h:112
RegionList::iterator RegionsIterator
Definition: DLS.h:483
RIFF::Chunk * pArticulationCk
Definition: DLS.h:282
uint32_t AverageBytesPerSecond
The average number of bytes per second at which the waveform data should be transferred (Playback sof...
Definition: DLS.h:400
conn_src_t Source
Definition: DLS.h:246
uint8_t MIDIBankFine
Reflects the MIDI Bank number for MIDI Control Change 32 (bank 1 - 128).
Definition: DLS.h:464
uint16_t PhaseGroup
Definition: DLS.h:437
uint32_t Channel
Definition: DLS.h:439
uint32_t WavePoolHeaderSize
Definition: DLS.h:528
RIFF::File * pRIFF
Definition: DLS.h:522
Abstract base class which encapsulates data structures which all DLS resources are able to provide...
Definition: DLS.h:345
RIFF File.
Definition: RIFF.h:351
InstrumentList * pInstruments
Definition: DLS.h:526
uint16_t build
Definition: DLS.h:113
String Software
<ISFT-ck>. Identifies the name of the sofware package used to create the file.
Definition: DLS.h:318
String ArchivalLocation
<IARL-ck>. Indicates where the subject of the file is stored.
Definition: DLS.h:308
unsigned long ulWavePoolOffset
Definition: DLS.h:419
uint16_t release
Definition: DLS.h:114
Encapsulates sample waves used for playback.
Definition: DLS.h:395
String Name
<INAM-ck>. Stores the title of the subject of the file, such as, Seattle From Above.
Definition: DLS.h:307
uint32_t SamplesPerSecond
Sampling rate at which each channel should be played (defaults to 44100 if Sample was created with In...
Definition: DLS.h:399
String Product
<IPRD-ck>. Specifies the name of the title the file was originally intended for, such as World Ruler ...
Definition: DLS.h:311
uint32_t WavePoolCount
Definition: DLS.h:529
String Medium
<IMED-ck>. Describes the original subject of the file, such as, record, CD, and so forth...
Definition: DLS.h:319
String Subject
<ISBJ-ck>. Describes the contents of the file.
Definition: DLS.h:323
RIFF::List * pWaveList
Definition: DLS.h:416
bool overlaps(const range_t &other) const
Definition: DLS.h:223
Will be thrown whenever an error occurs while handling a RIFF file.
Definition: RIFF.h:406
Resource * GetParent()
Definition: DLS.h:350
Abstract base class for classes that provide articulation information (thus for Instrument and Region...
Definition: DLS.h:287
Connection * pConnections
Points to the beginning of a Connection array.
Definition: DLS.h:275
Sample * pSample
Definition: DLS.h:449
uint32_t Connections
Reflects the number of Connections.
Definition: DLS.h:276
conn_trn_t ControlTransform
Definition: DLS.h:251
range_t KeyRange
Definition: DLS.h:431
Provides access to the defined connections used for the synthesis model.
Definition: DLS.h:273
dlsid_t * pDLSID
Points to a dlsid_t structure if the file provided a DLS ID else is NULL.
Definition: DLS.h:348
uint32_t Instruments
Reflects the number of available Instrument objects.
Definition: DLS.h:499
String Genre
<IGNR-ck>. Descirbes the original work, such as, Jazz, Classic, Rock, Techno, Rave, etc.
Definition: DLS.h:314
Provides all neccessary information for the synthesis of a DLS Instrument.
Definition: DLS.h:459
int32_t Gain
Definition: DLS.h:368
Quadtuple version number ("major.minor.release.build").
Definition: DLS.h:110
String Copyright
<ICOP-ck>. Records the copyright information for the file.
Definition: DLS.h:312
DLS specific classes and definitions.
Definition: DLS.h:104
Info * pInfo
Points (in any case) to an Info object, providing additional, optional infos and comments.
Definition: DLS.h:347
String libraryVersion()
Returns version of this C++ library.
Definition: DLS.cpp:1979
Defines a connection within the synthesis model.
Definition: DLS.h:244
uint16_t FormatOptionFlags
Definition: DLS.h:450
bool UseFixedLengthStrings
Definition: DLS.h:324
uint32_t * pWavePoolTableHi
Definition: DLS.h:531
String Comments
<ICMT-ck>. Provides general comments about the file or the subject of the file. Sentences might end w...
Definition: DLS.h:310
Defines Region information of an Instrument.
Definition: DLS.h:429
std::list< RIFF::File * > ExtensionFiles
Definition: DLS.h:523
bool IsDrum
Indicates if the Instrument is a drum type, as they differ in the synthesis model of DLS from melodic...
Definition: DLS.h:461
std::list< Region * > RegionList
Definition: DLS.h:475
RIFF::progress_t progress_t
Definition: DLS.h:107