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);
292  virtual void UpdateChunks(progress_t* pProgress);
293  virtual void CopyAssign(const Articulator* orig);
294  protected:
295  typedef std::list<Articulation*> ArticulationList;
298  ArticulationList::iterator ArticulationsIterator;
299 
300  void LoadArticulations();
301  virtual ~Articulator();
302  };
303 
305  class Info {
306  public:
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 
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 
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();
504  void SetFileName(const String& name);
506  Sample* GetNextSample();
507  Sample* AddSample();
508  void DeleteSample(Sample* pSample);
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;
525  SampleList::iterator SamplesIterator;
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();
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:
554  void PrintMessage();
555  };
556 
559 
560 } // namespace DLS
561 
562 #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:1381
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
File()
Constructor.
Definition: DLS.cpp:1406
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
virtual ~Articulation()
Definition: DLS.cpp:140
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
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:1076
void __ensureMandatoryChunksExist()
Checks if all (for DLS) mandatory chunks exist, if not they will be created.
Definition: DLS.cpp:1855
String Artists
<IART-ck>. Lists the artist of the original subject of the file.
Definition: DLS.h:313
Sample * GetFirstSample()
Returns a pointer to the first Sample object of the file, NULL otherwise.
Definition: DLS.cpp:1511
Instrument * GetNextInstrument()
Returns a pointer to the next Instrument object of the file, NULL otherwise.
Definition: DLS.cpp:1594
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
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:1173
unsigned long Read(void *pBuffer, unsigned long SampleCount)
Reads SampleCount number of sample points from the current position into the buffer pointed by pBuffe...
Definition: DLS.cpp:934
uint16_t KeyGroup
Definition: DLS.h:433
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:1658
virtual ~Region()
Destructor.
Definition: DLS.cpp:1042
Instrument * AddInstrument()
Add a new instrument definition.
Definition: DLS.cpp:1621
unsigned long GetSize() const
Returns sample size.
Definition: DLS.cpp:858
const Resource * GetParent() const
Definition: DLS.h:351
RIFF::List * pCkRegion
Definition: DLS.h:447
Instrument * GetFirstInstrument()
Returns a pointer to the first Instrument object of the file, NULL otherwise.
Definition: DLS.cpp:1587
String Keywords
<IKEY-ck>. Provides a list of keywords that refer to the file or subject of the file....
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
virtual ~Info()
Definition: DLS.cpp:282
RIFF::List * pCkInstrument
Definition: DLS.h:481
uint32_t SamplerOptions
Definition: DLS.h:382
virtual ~Resource()
Definition: DLS.cpp:461
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
Sampler(RIFF::List *ParentList)
Definition: DLS.cpp:550
Defines Sample Loop Points.
Definition: DLS.h:230
Region * AddRegion()
Definition: DLS.cpp:1271
uint8_t abData[8]
Definition: DLS.h:122
unsigned long SetPos(unsigned long SampleCount, RIFF::stream_whence_t Whence=RIFF::stream_start)
Sets the position within the sample (in sample points, not in bytes).
Definition: DLS.cpp:916
RIFF::List * pResourceList
Definition: DLS.h:357
virtual ~Sample()
Destructor.
Definition: DLS.cpp:753
void PrintMessage()
Definition: DLS.cpp:1958
virtual void LoadSamples()
Definition: DLS.cpp:1524
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
virtual void SetGain(int32_t gain)
Definition: DLS.cpp:586
RIFF::List * pParentList
Definition: DLS.h:380
uint16_t minor
Definition: DLS.h:111
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
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
void GenerateDLSID()
Generates a new DLSID for the resource.
Definition: DLS.cpp:495
bool operator==(const range_t &other) const
Definition: DLS.h:215
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
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
Region * GetFirstRegion()
Definition: DLS.cpp:1243
void DeleteSampleLoop(sample_loop_t *pLoopDef)
Deletes an existing sample loop.
Definition: DLS.cpp:655
virtual ~Instrument()
Destructor.
Definition: DLS.cpp:1344
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
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
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,...
Definition: DLS.h:397
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:364
bool SelfNonExclusive
Definition: DLS.h:435
String libraryName()
Returns the name of this C++ library.
Definition: DLS.cpp:1971
Sample * GetSample()
Definition: DLS.cpp:1047
Exception(String Message)
Definition: DLS.cpp:1955
conn_trn_t
Connection Transforms.
Definition: DLS.h:197
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:1683
uint32_t SampleLoops
Reflects the number of sample loops.
Definition: DLS.h:371
conn_trn_t DestinationTransform
Definition: DLS.h:255
virtual void Save(const String &Path, progress_t *pProgress=NULL)
Save changes to another file.
Definition: DLS.cpp:1787
Resource * pParent
Definition: DLS.h:356
void Resize(int iNewSize)
Resize sample.
Definition: DLS.cpp:891
SampleList * pSamples
Definition: DLS.h:524
conn_dst_t
Connection Destinations.
Definition: DLS.h:152
bool NoSampleDepthTruncation
Definition: DLS.h:369
String Message
Definition: RIFF.h:408
virtual ~Articulator()
Definition: DLS.cpp:207
void DeleteSample(Sample *pSample)
Delete a sample.
Definition: DLS.cpp:1579
bool SourceInvert
Definition: DLS.h:248
uint16_t high
High value of range.
Definition: DLS.h:207
Articulation * GetFirstArticulation()
Definition: DLS.cpp:176
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
Info(RIFF::List *list)
Constructor.
Definition: DLS.cpp:255
std::list< Instrument * > InstrumentList
Definition: DLS.h:520
Region(Instrument *pInstrument, RIFF::List *rgnList)
Definition: DLS.cpp:994
unsigned long SamplesTotal
Reflects total number of sample points (only if known sample data format is used, 0 otherwise),...
Definition: DLS.h:403
bool operator<(const range_t &other) const
Definition: DLS.h:209
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
virtual ~File()
Definition: DLS.cpp:1483
uint32_t MIDIProgram
Specifies the MIDI Program Change Number this Instrument should be assigned to.
Definition: DLS.h:465
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:322
uint32_t LoopLength
Length of the looping area (in sample points).
Definition: DLS.h:234
void SetSample(Sample *pSample)
Assign another sample to this Region.
Definition: DLS.cpp:1064
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
Articulation * GetNextArticulation()
Definition: DLS.cpp:183
conn_src_t Control
Definition: DLS.h:250
uint16_t WaveLinkOptionFlags
Definition: DLS.h:451
virtual void UpdateChunks(progress_t *pProgress)
Apply Instrument with all its Regions to the respective RIFF chunks.
Definition: DLS.cpp:1307
void DeleteInstrument(Instrument *pInstrument)
Delete an instrument.
Definition: DLS.cpp:1638
unsigned long Write(void *pBuffer, unsigned long SampleCount)
Write sample wave data.
Definition: DLS.cpp:954
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
Instrument(File *pFile, RIFF::List *insList)
Constructor.
Definition: DLS.cpp:1220
uint16_t major
Definition: DLS.h:112
RegionList::iterator RegionsIterator
Definition: DLS.h:483
Region * GetNextRegion()
Definition: DLS.cpp:1250
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
virtual void UpdateChunks(progress_t *pProgress)
Apply all articulations to the respective RIFF chunks.
Definition: DLS.cpp:225
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
void Init(conn_block_t *Header)
Definition: DLS.cpp:75
InstrumentList * pInstruments
Definition: DLS.h:526
uint16_t build
Definition: DLS.h:113
virtual void LoadInstruments()
Definition: DLS.cpp:1600
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: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
Sample * GetNextSample()
Returns a pointer to the next Sample object of the file, NULL otherwise.
Definition: DLS.cpp:1518
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
Sample(File *pFile, RIFF::List *waveList, unsigned long WavePoolOffset)
Constructor.
Definition: DLS.cpp:714
uint32_t WavePoolCount
Definition: DLS.h:529
String GetFileName()
File name of this DLS file.
Definition: DLS.cpp:1675
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
void LoadArticulations()
Definition: DLS.cpp:189
RIFF::List * pWaveList
Definition: DLS.h:416
virtual void LoadRegions()
Definition: DLS.cpp:1256
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
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
conn_block_t ToConnBlock()
Definition: DLS.cpp:89
virtual ~Sampler()
Definition: DLS.cpp:582
Resource * GetParent()
Definition: DLS.h:350
void DeleteRegion(Region *pRegion)
Definition: DLS.cpp:1291
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
virtual void UpdateChunks(progress_t *pProgress)
Apply sample and its settings to the respective RIFF chunks.
Definition: DLS.cpp:968
Provides access to the defined connections used for the synthesis model.
Definition: DLS.h:273
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: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,...
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
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:312
Sample * AddSample()
Add a new sample.
Definition: DLS.cpp:1561
void CopyAssignCore(const Instrument *orig)
Definition: DLS.cpp:1359
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
virtual void UpdateChunks(progress_t *pProgress)
Apply Region settings to the respective RIFF chunks.
Definition: DLS.cpp:1111
String Comments
<ICMT-ck>. Provides general comments about the file or the subject of the file. Sentences might end w...
Definition: DLS.h:310
Articulator(RIFF::List *ParentList)
Definition: DLS.cpp:171
Defines Region information of an Instrument.
Definition: DLS.h:429
std::list< RIFF::File * > ExtensionFiles
Definition: DLS.h:523
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:461
std::list< Region * > RegionList
Definition: DLS.h:475
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:1695
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:1846
RIFF::progress_t progress_t
Definition: DLS.h:107
Resource(Resource *Parent, RIFF::List *lstResource)
Constructor.
Definition: DLS.cpp:444