libgig  4.1.0
DLS.h
1 /***************************************************************************
2  * *
3  * libgig - C++ cross-platform Gigasampler format file access library *
4  * *
5  * Copyright (C) 2003-2017 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  typedef RIFF::file_offset_t file_offset_t;
109 
111  struct version_t {
112  uint16_t minor;
113  uint16_t major;
114  uint16_t build;
115  uint16_t release;
116  };
117 
119  struct dlsid_t {
120  uint32_t ulData1;
121  uint16_t usData2;
122  uint16_t usData3;
123  uint8_t abData[8];
124  };
125 
127  enum conn_src_t {
128  // Modulator Sources
129  conn_src_none = 0x0000,
130  conn_src_lfo = 0x0001,
131  conn_src_keyonvelocity = 0x0002,
132  conn_src_keynumber = 0x0003,
133  conn_src_eg1 = 0x0004,
134  conn_src_eg2 = 0x0005,
135  conn_src_pitchwheel = 0x0006,
136  conn_src_polypressure = 0x0007,
137  conn_src_channelpressure = 0x0008,
138  conn_src_vibrato = 0x0009,
139  // MIDI Controller Sources
140  conn_src_cc1 = 0x0081,
141  conn_src_cc7 = 0x0087,
142  conn_src_cc10 = 0x008A,
143  conn_src_cc11 = 0x008B,
144  conn_src_cc91 = 0x00DB,
145  conn_src_cc93 = 0x00DD,
146  // Registered Parameter Numbers
147  conn_src_rpn0 = 0x0100,
148  conn_src_rpn1 = 0x0101,
149  conn_src_rpn2 = 0x0102
150  };
151 
153  enum conn_dst_t {
154  // Generic Destinations
155  conn_dst_none = 0x0000,
156  conn_dst_gain = 0x0001,
157  conn_dst_reserved = 0x0002,
158  conn_dst_pitch = 0x0003,
159  conn_dst_pan = 0x0004,
160  conn_dst_keynumber = 0x0005,
161  // Channel Output Destinations
162  conn_dst_left = 0x0010,
163  conn_dst_right = 0x0011,
164  conn_dst_center = 0x0012,
165  conn_dst_lfe_channel = 0x0013,
166  conn_dst_leftrear = 0x0014,
167  conn_dst_rightrear = 0x0015,
168  conn_dst_chorus = 0x0080,
169  conn_dst_reverb = 0x0081,
170  // Modulator LFO Destinations
171  conn_dst_lfo_frequency = 0x0104,
172  conn_dst_lfo_startdelay = 0x0105,
173  // Vibrato LFO Destinations
174  conn_dst_vib_frequency = 0x0114,
175  conn_dst_vib_startdelay = 0x0115,
176  // EG Destinations
177  conn_dst_eg1_attacktime = 0x0206,
178  conn_dst_eg1_decaytime = 0x0207,
179  conn_dst_eg1_reserved = 0x0208,
180  conn_dst_eg1_releasetime = 0x0209,
181  conn_dst_eg1_sustainlevel = 0x020A,
182  conn_dst_eg1_delaytime = 0x020B,
183  conn_dst_eg1_holdtime = 0x020C,
184  conn_dst_eg1_shutdowntime = 0x020D,
185  conn_dst_eg2_attacktime = 0x030A,
186  conn_dst_eg2_decaytime = 0x030B,
187  conn_dst_eg2_reserved = 0x030C,
188  conn_dst_eg2_releasetime = 0x030D,
189  conn_dst_eg2_sustainlevel = 0x030E,
190  conn_dst_eg2_delaytime = 0x030F,
191  conn_dst_eg2_holdtime = 0x0310,
192  // Filter Destinations
193  conn_dst_filter_cutoff = 0x0500,
194  conn_dst_filter_q = 0x0501
195  };
196 
198  enum conn_trn_t {
199  conn_trn_none = 0x0000,
200  conn_trn_concave = 0x0001,
201  conn_trn_convex = 0x0002,
202  conn_trn_switch = 0x0003
203  };
204 
206  struct range_t {
207  uint16_t low;
208  uint16_t high;
209 
210  inline bool operator< (const range_t& other) const {
211  if (low < other.low) return true;
212  if (low > other.low) return false;
213  return high < other.high;
214  }
215 
216  inline bool operator== (const range_t& other) const {
217  return low == other.low && high == other.high;
218  }
219 
220  inline bool overlaps(uint16_t scalar) const {
221  return low <= scalar && scalar <= high;
222  }
223 
224  inline bool overlaps(const range_t& other) const {
225  return overlaps(other.low) || overlaps(other.high) ||
226  other.overlaps(low) || other.overlaps(high);
227  }
228  };
229 
231  struct sample_loop_t {
232  uint32_t Size;
233  uint32_t LoopType;
234  uint32_t LoopStart;
235  uint32_t LoopLength;
236  };
237 
238  // just symbol prototyping
239  class File;
240  class Instrument;
241  class Region;
242  class Sample;
243 
245  class Connection {
246  public:
247  conn_src_t Source;
248  conn_trn_t SourceTransform;
249  bool SourceInvert;
250  bool SourceBipolar;
251  conn_src_t Control;
252  conn_trn_t ControlTransform;
253  bool ControlInvert;
254  bool ControlBipolar;
255  conn_dst_t Destination;
256  conn_trn_t DestinationTransform;
257  uint32_t Scale;
258  protected:
259  struct conn_block_t {
260  uint16_t source;
261  uint16_t control;
262  uint16_t destination;
263  uint16_t transform;
264  uint32_t scale;
265  };
266  Connection() {}
267  void Init(conn_block_t* Header);
268  conn_block_t ToConnBlock();
269  virtual ~Connection() {}
270  friend class Articulation;
271  };
272 
274  class Articulation {
275  public:
277  uint32_t Connections;
278 
279  Articulation(RIFF::Chunk* artl);
280  virtual ~Articulation();
281  virtual void UpdateChunks(progress_t* pProgress);
282  protected:
283  RIFF::Chunk* pArticulationCk;
284  uint32_t HeaderSize;
285  };
286 
288  class Articulator {
289  public:
290  Articulator(RIFF::List* ParentList);
291  Articulation* GetFirstArticulation();
292  Articulation* GetNextArticulation();
293  virtual void UpdateChunks(progress_t* pProgress);
294  virtual void CopyAssign(const Articulator* orig);
295  protected:
296  typedef std::list<Articulation*> ArticulationList;
297  RIFF::List* pParentList;
298  ArticulationList* pArticulations;
299  ArticulationList::iterator ArticulationsIterator;
300 
301  void LoadArticulations();
302  virtual ~Articulator();
303  };
304 
306  class Info {
307  public:
308  String Name;
310  String CreationDate;
311  String Comments;
312  String Product;
313  String Copyright;
314  String Artists;
315  String Genre;
316  String Keywords;
317  String Engineer;
318  String Technician;
319  String Software;
320  String Medium;
321  String Source;
322  String SourceForm;
323  String Commissioned;
324  String Subject;
326 
327  struct string_length_t {
328  uint32_t chunkId;
329  int length;
330  };
331 
332  Info(RIFF::List* list);
333  void SetFixedStringLengths(const string_length_t* lengths);
334  virtual ~Info();
335  virtual void UpdateChunks(progress_t* pProgress);
336  virtual void CopyAssign(const Info* orig);
337  private:
338  RIFF::List* pResourceListChunk;
339  const string_length_t* pFixedStringLengths;
340 
341  static void LoadString(uint32_t ChunkID, RIFF::List* lstINFO, String& s);
342  void SaveString(uint32_t ChunkID, RIFF::List* lstINFO, const String& s, const String& sDefault);
343  };
344 
346  class Resource {
347  public:
350 
351  Resource* GetParent() { return pParent; }
352  const Resource* GetParent() const { return pParent; }
353  virtual void UpdateChunks(progress_t* pProgress);
354  void GenerateDLSID();
355  virtual void CopyAssign(const Resource* orig);
356  protected:
357  Resource* pParent;
358  RIFF::List* pResourceList;
359 
360  Resource(Resource* Parent, RIFF::List* lstResource);
361  virtual ~Resource();
362  };
363 
365  class Sampler {
366  public:
367  uint8_t UnityNote;
368  int16_t FineTune;
369  int32_t Gain;
370  bool NoSampleDepthTruncation;
371  bool NoSampleCompression;
372  uint32_t SampleLoops;
374 
375  void AddSampleLoop(sample_loop_t* pLoopDef);
376  void DeleteSampleLoop(sample_loop_t* pLoopDef);
377  virtual void SetGain(int32_t gain);
378  virtual void UpdateChunks(progress_t* pProgress);
379  virtual void CopyAssign(const Sampler* orig);
380  protected:
381  RIFF::List* pParentList;
382  uint32_t uiHeaderSize;
383  uint32_t SamplerOptions;
384  Sampler(RIFF::List* ParentList);
385  virtual ~Sampler();
386  };
387 
396  class Sample : public Resource {
397  public:
398  uint16_t FormatTag;
399  uint16_t Channels;
400  uint32_t SamplesPerSecond;
402  uint16_t BlockAlign;
403  uint16_t BitDepth;
404  file_offset_t SamplesTotal;
405  uint FrameSize;
406 
407  void* LoadSampleData();
408  void ReleaseSampleData();
409  file_offset_t GetSize() const;
410  void Resize(file_offset_t NewSize);
411  file_offset_t SetPos(file_offset_t SampleCount, RIFF::stream_whence_t Whence = RIFF::stream_start);
412  file_offset_t Read(void* pBuffer, file_offset_t SampleCount);
413  file_offset_t Write(void* pBuffer, file_offset_t SampleCount);
414  virtual void UpdateChunks(progress_t* pProgress);
415  virtual void CopyAssign(const Sample* orig);
416 
417  protected:
418  RIFF::List* pWaveList;
419  RIFF::Chunk* pCkData;
420  RIFF::Chunk* pCkFormat;
421  file_offset_t ullWavePoolOffset; // needed for comparison with the wave pool link table, thus the link to instruments
422 
423  Sample(File* pFile, RIFF::List* waveList, file_offset_t WavePoolOffset);
424  virtual ~Sample();
425  void CopyAssignCore(const Sample* orig);
426  friend class File;
427  friend class Region; // Region has to compare the wave pool offset to get its sample
428  };
429 
431  class Region : public Resource, public Articulator, public Sampler {
432  public:
434  range_t VelocityRange;
435  uint16_t KeyGroup;
436  uint16_t Layer;
437  bool SelfNonExclusive;
438  bool PhaseMaster;
439  uint16_t PhaseGroup;
440  bool MultiChannel;
441  uint32_t Channel;
442 
443  Sample* GetSample();
444  void SetSample(Sample* pSample);
445  virtual void SetKeyRange(uint16_t Low, uint16_t High);
446  virtual void UpdateChunks(progress_t* pProgress);
447  virtual void CopyAssign(const Region* orig);
448  protected:
449  RIFF::List* pCkRegion;
450  uint32_t WavePoolTableIndex; // index in the wave pool table to the sample wave this region is linked to
451  Sample* pSample; // every region refers to exactly one sample
452  uint16_t FormatOptionFlags;
453  uint16_t WaveLinkOptionFlags;
454 
455  Region(Instrument* pInstrument, RIFF::List* rgnList);
456  virtual ~Region();
457  friend class Instrument;
458  };
459 
461  class Instrument : public Resource, public Articulator {
462  public:
463  bool IsDrum;
464  uint16_t MIDIBank;
465  uint8_t MIDIBankCoarse;
466  uint8_t MIDIBankFine;
467  uint32_t MIDIProgram;
468  uint32_t Regions;
469 
470  Region* GetFirstRegion();
471  Region* GetNextRegion();
472  Region* AddRegion();
473  void DeleteRegion(Region* pRegion);
474  virtual void UpdateChunks(progress_t* pProgress);
475  virtual void CopyAssign(const Instrument* orig);
476  protected:
477  typedef std::list<Region*> RegionList;
478  struct midi_locale_t {
479  uint32_t bank;
480  uint32_t instrument;
481  };
482 
483  RIFF::List* pCkInstrument;
484  RegionList* pRegions;
485  RegionList::iterator RegionsIterator;
486 
487  Instrument(File* pFile, RIFF::List* insList);
488  void CopyAssignCore(const Instrument* orig);
489  virtual void LoadRegions();
490  virtual ~Instrument();
491  friend class File;
492  friend class Region;
493  private:
494  void MoveRegion(Region* pSrc, Region* pDst);
495  };
496 
498  class File : public Resource {
499  public:
501  uint32_t Instruments;
502 
503  File();
504  File(RIFF::File* pRIFF);
505  String GetFileName();
506  void SetFileName(const String& name);
508  Sample* GetNextSample();
509  Sample* AddSample();
510  void DeleteSample(Sample* pSample);
514  void DeleteInstrument(Instrument* pInstrument);
515  RIFF::File* GetExtensionFile(int index);
516  virtual void UpdateChunks(progress_t* pProgress);
517  virtual void Save(const String& Path, progress_t* pProgress = NULL);
518  virtual void Save(progress_t* pProgress = NULL);
519  virtual ~File();
520  protected:
521  typedef std::list<Sample*> SampleList;
522  typedef std::list<Instrument*> InstrumentList;
523 
524  RIFF::File* pRIFF;
525  std::list<RIFF::File*> ExtensionFiles;
526  SampleList* pSamples;
527  SampleList::iterator SamplesIterator;
528  InstrumentList* pInstruments;
529  InstrumentList::iterator InstrumentsIterator;
530  uint32_t WavePoolHeaderSize;
531  uint32_t WavePoolCount;
532  uint32_t* pWavePoolTable;
533  uint32_t* pWavePoolTableHi;
534  bool b64BitWavePoolOffsets;
535 
536  virtual void LoadSamples();
537  virtual void LoadInstruments();
538  virtual void UpdateFileOffsets();
540  friend class Region; // Region has to look in the wave pool table to get its sample
541  private:
542  void __UpdateWavePoolTableChunk();
543  void __UpdateWavePoolTable();
544  };
545 
553  class Exception : public RIFF::Exception {
554  public:
555  Exception(String format, ...);
556  Exception(String format, va_list arg);
557  void PrintMessage();
558  protected:
559  Exception();
560  };
561 
562  String libraryName();
563  String libraryVersion();
564 
565 } // namespace DLS
566 
567 #endif // __DLS_H__
virtual void CopyAssign(const Instrument *orig)
Make a (semi) deep copy of the Instrument object given by orig and assign it to this object.
Definition: DLS.cpp:1383
uint16_t BlockAlign
The block alignment (in bytes) of the waveform data. Playback software needs to process a multiple of...
Definition: DLS.h:402
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:373
uint32_t Regions
Reflects the number of Region defintions this Instrument has.
Definition: DLS.h:468
Parses DLS Level 1 and 2 compliant files and provides abstract access to the data.
Definition: DLS.h:498
File()
Constructor.
Definition: DLS.cpp:1408
stream_whence_t
File stream position dependent to these relations.
Definition: RIFF.h:165
String CreationDate
<ICRD-ck>. Specifies the date the subject of the file was created. List dates in yyyy-mm-dd format.
Definition: DLS.h:310
uint32_t LoopType
Defines how the waveform samples will be looped (appropriate loop types for the gig format are define...
Definition: DLS.h:233
String Engineer
<IENG-ck>. Stores the name of the engineer who worked on the file. Multiple engineer names are separa...
Definition: DLS.h:317
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.
Definition: DLS.cpp:1078
void __ensureMandatoryChunksExist()
Checks if all (for DLS) mandatory chunks exist, if not they will be created.
Definition: DLS.cpp:1871
String Artists
<IART-ck>. Lists the artist of the original subject of the file.
Definition: DLS.h:314
Sample * GetFirstSample()
Returns a pointer to the first Sample object of the file, NULL otherwise.
Definition: DLS.cpp:1514
file_offset_t SetPos(file_offset_t SampleCount, RIFF::stream_whence_t Whence=RIFF::stream_start)
Sets the position within the sample (in sample points, not in bytes).
Definition: DLS.cpp:918
Instrument * GetNextInstrument()
Returns a pointer to the next Instrument object of the file, NULL otherwise.
Definition: DLS.cpp:1597
Will be thrown whenever a DLS specific error occurs while trying to access a DLS File.
Definition: DLS.h:553
Optional information for DLS files, instruments, samples, etc.
Definition: DLS.h:306
virtual void CopyAssign(const Region *orig)
Make a (semi) deep copy of the Region object given by orig and assign it to this object.
Definition: DLS.cpp:1175
virtual void UpdateChunks(progress_t *pProgress)
Update chunks with current Resource data.
Definition: DLS.cpp:476
RIFF::File * GetExtensionFile(int index)
Returns extension file of given index.
Definition: DLS.cpp:1661
virtual ~Region()
Destructor.
Definition: DLS.cpp:1044
Instrument * AddInstrument()
Add a new instrument definition.
Definition: DLS.cpp:1624
Instrument * GetFirstInstrument()
Returns a pointer to the first Instrument object of the file, NULL otherwise.
Definition: DLS.cpp:1590
String Keywords
<IKEY-ck>. Provides a list of keywords that refer to the file or subject of the file....
Definition: DLS.h:316
conn_src_t
Connection Sources.
Definition: DLS.h:127
file_offset_t GetSize() const
Returns sample size.
Definition: DLS.cpp:858
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:399
file_offset_t SamplesTotal
Reflects total number of sample points (only if known sample data format is used, 0 otherwise),...
Definition: DLS.h:404
String SourceForm
<ISRF-ck>. Identifies the original form of the material that was digitized, such as record,...
Definition: DLS.h:322
Defines Sample Loop Points.
Definition: DLS.h:231
virtual ~Sample()
Destructor.
Definition: DLS.cpp:753
uint16_t MIDIBank
Reflects combination of MIDIBankCoarse and MIDIBankFine (bank 1 - bank 16384). Do not change this val...
Definition: DLS.h:464
virtual void CopyAssign(const Info *orig)
Make a deep copy of the Info object given by orig and assign it to this object.
Definition: DLS.cpp:408
uint8_t MIDIBankCoarse
Reflects the MIDI Bank number for MIDI Control Change 0 (bank 1 - 128).
Definition: DLS.h:465
void GenerateDLSID()
Generates a new DLSID for the resource.
Definition: DLS.cpp:495
uint FrameSize
Reflects the size (in bytes) of one single sample point (only if known sample data format is used,...
Definition: DLS.h:405
Every subject of an DLS file and the file itself can have an unique, computer generated ID.
Definition: DLS.h:119
Lower and upper limit of a range.
Definition: DLS.h:206
virtual void CopyAssign(const Sample *orig)
Make a deep copy of the Sample object given by orig and assign it to this object.
Definition: DLS.cpp:789
void DeleteSampleLoop(sample_loop_t *pLoopDef)
Deletes an existing sample loop.
Definition: DLS.cpp:655
virtual ~Instrument()
Destructor.
Definition: DLS.cpp:1346
uint16_t low
Low value of range.
Definition: DLS.h:207
RIFF List Chunk.
Definition: RIFF.h:294
void SetFixedStringLengths(const string_length_t *lengths)
Forces specific Info fields to be of a fixed length when being saved to a file.
Definition: DLS.cpp:296
uint16_t FormatTag
Format ID of the waveform data (should be DLS_WAVE_FORMAT_PCM for DLS1 compliant files,...
Definition: DLS.h:398
virtual void CopyAssign(const Sampler *orig)
Make a deep copy of the Sampler object given by orig and assign it to this object.
Definition: DLS.cpp:679
void ReleaseSampleData()
Free sample data from RAM.
Definition: DLS.cpp:844
virtual void CopyAssign(const Articulator *orig)
Not yet implemented in this version, since the .gig format does not need to copy DLS articulators and...
Definition: DLS.cpp:240
Abstract base class which provides mandatory informations about sample players in general.
Definition: DLS.h:365
String libraryName()
Returns the name of this C++ library.
Definition: DLS.cpp:1998
conn_trn_t
Connection Transforms.
Definition: DLS.h:198
void SetFileName(const String &name)
You may call this method store a future file name, so you don't have to to pass it to the Save() call...
Definition: DLS.cpp:1686
uint32_t SampleLoops
Reflects the number of sample loops.
Definition: DLS.h:372
virtual void Save(const String &Path, progress_t *pProgress=NULL)
Save changes to another file.
Definition: DLS.cpp:1803
void Resize(file_offset_t NewSize)
Resize sample.
Definition: DLS.cpp:891
conn_dst_t
Connection Destinations.
Definition: DLS.h:153
void DeleteSample(Sample *pSample)
Delete a sample.
Definition: DLS.cpp:1582
uint16_t high
High value of range.
Definition: DLS.h:208
uint64_t file_offset_t
Type used by libgig for handling file positioning during file I/O tasks.
Definition: RIFF.h:148
uint32_t Size
For internal usage only: usually reflects exactly sizeof(sample_loop_t), otherwise if the value is la...
Definition: DLS.h:232
Info(RIFF::List *list)
Constructor.
Definition: DLS.cpp:255
String Source
<ISRC-ck>. Identifies the name of the person or organization who supplied the original subject of the...
Definition: DLS.h:321
uint16_t BitDepth
Size of each sample per channel (only if known sample data format is used, 0 otherwise).
Definition: DLS.h:403
Ordinary RIFF Chunk.
Definition: RIFF.h:218
Sample(File *pFile, RIFF::List *waveList, file_offset_t WavePoolOffset)
Constructor.
Definition: DLS.cpp:714
uint32_t MIDIProgram
Specifies the MIDI Program Change Number this Instrument should be assigned to.
Definition: DLS.h:467
virtual void UpdateChunks(progress_t *pProgress)
Update chunks with current info values.
Definition: DLS.cpp:346
String Commissioned
<ICMS-ck>. Lists the name of the person or organization that commissioned the subject of the file,...
Definition: DLS.h:323
uint32_t LoopLength
Length of the looping area (in sample points).
Definition: DLS.h:235
void SetSample(Sample *pSample)
Assign another sample to this Region.
Definition: DLS.cpp:1066
Used for indicating the progress of a certain task.
Definition: RIFF.h:204
virtual void UpdateChunks(progress_t *pProgress)
Apply Instrument with all its Regions to the respective RIFF chunks.
Definition: DLS.cpp:1309
void DeleteInstrument(Instrument *pInstrument)
Delete an instrument.
Definition: DLS.cpp:1641
version_t * pVersion
Points to a version_t structure if the file provided a version number else is set to NULL.
Definition: DLS.h:500
String Technician
<ITCH-ck>. Identifies the technician who sampled the subject file.
Definition: DLS.h:318
uint32_t LoopStart
The start value specifies the offset (in sample points) in the waveform data of the first sample poin...
Definition: DLS.h:234
Instrument(File *pFile, RIFF::List *insList)
Constructor.
Definition: DLS.cpp:1222
uint32_t AverageBytesPerSecond
The average number of bytes per second at which the waveform data should be transferred (Playback sof...
Definition: DLS.h:401
uint8_t MIDIBankFine
Reflects the MIDI Bank number for MIDI Control Change 32 (bank 1 - 128).
Definition: DLS.h:466
virtual void UpdateChunks(progress_t *pProgress)
Apply all articulations to the respective RIFF chunks.
Definition: DLS.cpp:225
Abstract base class which encapsulates data structures which all DLS resources are able to provide.
Definition: DLS.h:346
RIFF File.
Definition: RIFF.h:344
virtual void UpdateChunks(progress_t *pProgress)
Apply all sample player options to the respective RIFF chunk.
Definition: DLS.cpp:596
String Software
<ISFT-ck>. Identifies the name of the sofware package used to create the file.
Definition: DLS.h:319
String ArchivalLocation
<IARL-ck>. Indicates where the subject of the file is stored.
Definition: DLS.h:309
Encapsulates sample waves used for playback.
Definition: DLS.h:396
Sample * GetNextSample()
Returns a pointer to the next Sample object of the file, NULL otherwise.
Definition: DLS.cpp:1521
String Name
<INAM-ck>. Stores the title of the subject of the file, such as, Seattle From Above.
Definition: DLS.h:308
uint32_t SamplesPerSecond
Sampling rate at which each channel should be played (defaults to 44100 if Sample was created with In...
Definition: DLS.h:400
String Product
<IPRD-ck>. Specifies the name of the title the file was originally intended for, such as World Ruler ...
Definition: DLS.h:312
String GetFileName()
File name of this DLS file.
Definition: DLS.cpp:1678
String Medium
<IMED-ck>. Describes the original subject of the file, such as, record, CD, and so forth.
Definition: DLS.h:320
String Subject
<ISBJ-ck>. Describes the contents of the file.
Definition: DLS.h:324
file_offset_t Read(void *pBuffer, file_offset_t SampleCount)
Reads SampleCount number of sample points from the current position into the buffer pointed by pBuffe...
Definition: DLS.cpp:936
Will be thrown whenever an error occurs while handling a RIFF file.
Definition: RIFF.h:404
void CopyAssignCore(const Sample *orig)
Make a deep copy of the Sample object given by orig (without the actual sample waveform data however)...
Definition: DLS.cpp:769
Abstract base class for classes that provide articulation information (thus for Instrument and Region...
Definition: DLS.h:288
Connection * pConnections
Points to the beginning of a Connection array.
Definition: DLS.h:276
uint32_t Connections
Reflects the number of Connections.
Definition: DLS.h:277
range_t KeyRange
Definition: DLS.h:433
virtual void UpdateChunks(progress_t *pProgress)
Apply sample and its settings to the respective RIFF chunks.
Definition: DLS.cpp:970
Provides access to the defined connections used for the synthesis model.
Definition: DLS.h:274
virtual void UpdateChunks(progress_t *pProgress)
Apply articulation connections to the respective RIFF chunks.
Definition: DLS.cpp:150
dlsid_t * pDLSID
Points to a dlsid_t structure if the file provided a DLS ID else is NULL.
Definition: DLS.h:349
uint32_t Instruments
Reflects the number of available Instrument objects.
Definition: DLS.h:501
String Genre
<IGNR-ck>. Descirbes the original work, such as, Jazz, Classic, Rock, Techno, Rave,...
Definition: DLS.h:315
Provides all neccessary information for the synthesis of a DLS Instrument.
Definition: DLS.h:461
int32_t Gain
Definition: DLS.h:369
Quadtuple version number ("major.minor.release.build").
Definition: DLS.h:111
virtual void CopyAssign(const Resource *orig)
Make a deep copy of the Resource object given by orig and assign it to this object.
Definition: DLS.cpp:542
String Copyright
<ICOP-ck>. Records the copyright information for the file.
Definition: DLS.h:313
file_offset_t Write(void *pBuffer, file_offset_t SampleCount)
Write sample wave data.
Definition: DLS.cpp:956
Sample * AddSample()
Add a new sample.
Definition: DLS.cpp:1564
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:348
String libraryVersion()
Returns version of this C++ library.
Definition: DLS.cpp:2006
Defines a connection within the synthesis model.
Definition: DLS.h:245
bool UseFixedLengthStrings
Definition: DLS.h:325
virtual void UpdateChunks(progress_t *pProgress)
Apply Region settings to the respective RIFF chunks.
Definition: DLS.cpp:1113
String Comments
<ICMT-ck>. Provides general comments about the file or the subject of the file. Sentences might end w...
Definition: DLS.h:311
Defines Region information of an Instrument.
Definition: DLS.h:431
Articulation(RIFF::Chunk *artl)
Constructor.
Definition: DLS.cpp:118
bool IsDrum
Indicates if the Instrument is a drum type, as they differ in the synthesis model of DLS from melodic...
Definition: DLS.h:463
virtual void UpdateChunks(progress_t *pProgress)
Apply all the DLS file's current instruments, samples and settings to the respective RIFF chunks.
Definition: DLS.cpp:1698
void * LoadSampleData()
Load sample data into RAM.
Definition: DLS.cpp:835
void AddSampleLoop(sample_loop_t *pLoopDef)
Adds a new sample loop with the provided loop definition.
Definition: DLS.cpp:633
virtual void UpdateFileOffsets()
Updates all file offsets stored all over the file.
Definition: DLS.cpp:1862
Resource(Resource *Parent, RIFF::List *lstResource)
Constructor.
Definition: DLS.cpp:444