libgig  3.3.0.19svn2660
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;
107 
109  struct version_t {
110  uint16_t minor;
111  uint16_t major;
112  uint16_t build;
113  uint16_t release;
114  };
115 
117  struct dlsid_t {
118  uint32_t ulData1;
119  uint16_t usData2;
120  uint16_t usData3;
121  uint8_t abData[8];
122  };
123 
125  typedef enum {
126  // Modulator Sources
127  conn_src_none = 0x0000,
128  conn_src_lfo = 0x0001,
131  conn_src_eg1 = 0x0004,
132  conn_src_eg2 = 0x0005,
137  // MIDI Controller Sources
138  conn_src_cc1 = 0x0081,
139  conn_src_cc7 = 0x0087,
140  conn_src_cc10 = 0x008A,
141  conn_src_cc11 = 0x008B,
142  conn_src_cc91 = 0x00DB,
143  conn_src_cc93 = 0x00DD,
144  // Registered Parameter Numbers
145  conn_src_rpn0 = 0x0100,
146  conn_src_rpn1 = 0x0101,
147  conn_src_rpn2 = 0x0102
148  } conn_src_t;
149 
151  typedef enum {
152  // Generic Destinations
153  conn_dst_none = 0x0000,
154  conn_dst_gain = 0x0001,
156  conn_dst_pitch = 0x0003,
157  conn_dst_pan = 0x0004,
159  // Channel Output Destinations
160  conn_dst_left = 0x0010,
161  conn_dst_right = 0x0011,
162  conn_dst_center = 0x0012,
166  conn_dst_chorus = 0x0080,
167  conn_dst_reverb = 0x0081,
168  // Modulator LFO Destinations
171  // Vibrato LFO Destinations
174  // EG Destinations
190  // Filter Destinations
193  } conn_dst_t;
194 
196  typedef enum {
197  conn_trn_none = 0x0000,
199  conn_trn_convex = 0x0002,
201  } conn_trn_t;
202 
204  struct range_t {
205  uint16_t low;
206  uint16_t high;
207 
208  inline bool operator< (const range_t& other) const {
209  if (low < other.low) return true;
210  if (low > other.low) return false;
211  return high < other.high;
212  }
213 
214  inline bool operator== (const range_t& other) const {
215  return low == other.low && high == other.high;
216  }
217 
218  inline bool overlaps(uint16_t scalar) const {
219  return low <= scalar && scalar <= high;
220  }
221 
222  inline bool overlaps(const range_t& other) const {
223  return overlaps(other.low) || overlaps(other.high) ||
224  other.overlaps(low) || other.overlaps(high);
225  }
226  };
227 
229  struct sample_loop_t {
230  uint32_t Size;
231  uint32_t LoopType;
232  uint32_t LoopStart;
233  uint32_t LoopLength;
234  };
235 
236  // just symbol prototyping
237  class File;
238  class Instrument;
239  class Region;
240  class Sample;
241 
243  class Connection {
244  public:
255  uint32_t Scale;
256  protected:
257  struct conn_block_t {
258  uint16_t source;
259  uint16_t control;
260  uint16_t destination;
261  uint16_t transform;
262  uint32_t scale;
263  };
265  void Init(conn_block_t* Header);
266  conn_block_t ToConnBlock();
267  virtual ~Connection() {}
268  friend class Articulation;
269  };
270 
272  class Articulation {
273  public:
275  uint32_t Connections;
276 
277  Articulation(RIFF::Chunk* artl);
278  virtual ~Articulation();
279  virtual void UpdateChunks();
280  protected:
282  uint32_t HeaderSize;
283  };
284 
286  class Articulator {
287  public:
288  Articulator(RIFF::List* ParentList);
291  virtual void UpdateChunks();
292  virtual void CopyAssign(const Articulator* orig);
293  protected:
294  typedef std::list<Articulation*> ArticulationList;
297  ArticulationList::iterator ArticulationsIterator;
298 
299  void LoadArticulations();
300  virtual ~Articulator();
301  };
302 
304  class Info {
305  public:
324 
326  uint32_t chunkId;
327  int length;
328  };
329 
330  Info(RIFF::List* list);
331  void SetFixedStringLengths(const string_length_t* lengths);
332  virtual ~Info();
333  virtual void UpdateChunks();
334  virtual void CopyAssign(const Info* orig);
335  private:
336  RIFF::List* pResourceListChunk;
337  const string_length_t* pFixedStringLengths;
338 
339  static void LoadString(uint32_t ChunkID, RIFF::List* lstINFO, String& s);
340  void SaveString(uint32_t ChunkID, RIFF::List* lstINFO, const String& s, const String& sDefault);
341  };
342 
344  class Resource {
345  public:
348 
349  Resource* GetParent() { return pParent; }
350  const Resource* GetParent() const { return pParent; }
351  virtual void UpdateChunks();
352  void GenerateDLSID();
353  virtual void CopyAssign(const Resource* orig);
354  protected:
357 
358  Resource(Resource* Parent, RIFF::List* lstResource);
359  virtual ~Resource();
360  };
361 
363  class Sampler {
364  public:
365  uint8_t UnityNote;
366  int16_t FineTune;
367  int32_t Gain;
370  uint32_t SampleLoops;
372 
373  void AddSampleLoop(sample_loop_t* pLoopDef);
374  void DeleteSampleLoop(sample_loop_t* pLoopDef);
375  virtual void SetGain(int32_t gain);
376  virtual void UpdateChunks();
377  virtual void CopyAssign(const Sampler* orig);
378  protected:
380  uint32_t uiHeaderSize;
381  uint32_t SamplerOptions;
382  Sampler(RIFF::List* ParentList);
383  virtual ~Sampler();
384  };
385 
394  class Sample : public Resource {
395  public:
396  uint16_t FormatTag;
397  uint16_t Channels;
398  uint32_t SamplesPerSecond;
400  uint16_t BlockAlign;
401  uint16_t BitDepth;
402  unsigned long SamplesTotal;
403  uint FrameSize;
404 
405  void* LoadSampleData();
406  void ReleaseSampleData();
407  unsigned long GetSize() const;
408  void Resize(int iNewSize);
409  unsigned long SetPos(unsigned long SampleCount, RIFF::stream_whence_t Whence = RIFF::stream_start);
410  unsigned long Read(void* pBuffer, unsigned long SampleCount);
411  unsigned long Write(void* pBuffer, unsigned long SampleCount);
412  virtual void UpdateChunks();
413  virtual void CopyAssign(const Sample* orig);
414  protected:
418  unsigned long ulWavePoolOffset; // needed for comparison with the wave pool link table, thus the link to instruments
419 
420  Sample(File* pFile, RIFF::List* waveList, unsigned long WavePoolOffset);
421  virtual ~Sample();
422  void CopyAssignCore(const Sample* orig);
423  friend class File;
424  friend class Region; // Region has to compare the wave pool offset to get its sample
425  };
426 
428  class Region : public Resource, public Articulator, public Sampler {
429  public:
432  uint16_t KeyGroup;
433  uint16_t Layer;
436  uint16_t PhaseGroup;
438  uint32_t Channel;
439 
440  Sample* GetSample();
441  void SetSample(Sample* pSample);
442  virtual void SetKeyRange(uint16_t Low, uint16_t High);
443  virtual void UpdateChunks();
444  virtual void CopyAssign(const Region* orig);
445  protected:
447  uint32_t WavePoolTableIndex; // index in the wave pool table to the sample wave this region is linked to
448  Sample* pSample; // every region refers to exactly one sample
451 
452  Region(Instrument* pInstrument, RIFF::List* rgnList);
453  virtual ~Region();
454  friend class Instrument;
455  };
456 
458  class Instrument : public Resource, public Articulator {
459  public:
460  bool IsDrum;
461  uint16_t MIDIBank;
462  uint8_t MIDIBankCoarse;
463  uint8_t MIDIBankFine;
464  uint32_t MIDIProgram;
465  uint32_t Regions;
466 
469  Region* AddRegion();
470  void DeleteRegion(Region* pRegion);
471  virtual void UpdateChunks();
472  virtual void CopyAssign(const Instrument* orig);
473  protected:
474  typedef std::list<Region*> RegionList;
475  struct midi_locale_t {
476  uint32_t bank;
477  uint32_t instrument;
478  };
479 
482  RegionList::iterator RegionsIterator;
483 
484  Instrument(File* pFile, RIFF::List* insList);
485  void CopyAssignCore(const Instrument* orig);
486  virtual void LoadRegions();
487  virtual ~Instrument();
488  friend class File;
489  friend class Region;
490  private:
491  void MoveRegion(Region* pSrc, Region* pDst);
492  };
493 
495  class File : public Resource {
496  public:
498  uint32_t Instruments;
499 
500  File();
503  void SetFileName(const String& name);
505  Sample* GetNextSample();
506  Sample* AddSample();
507  void DeleteSample(Sample* pSample);
511  void DeleteInstrument(Instrument* pInstrument);
512  RIFF::File* GetExtensionFile(int index);
513  virtual void UpdateChunks();
514  virtual void Save(const String& Path);
515  virtual void Save();
516  virtual ~File();
517  protected:
518  typedef std::list<Sample*> SampleList;
519  typedef std::list<Instrument*> InstrumentList;
520 
522  std::list<RIFF::File*> ExtensionFiles;
524  SampleList::iterator SamplesIterator;
526  InstrumentList::iterator InstrumentsIterator;
528  uint32_t WavePoolCount;
529  uint32_t* pWavePoolTable;
530  uint32_t* pWavePoolTableHi;
532 
533  virtual void LoadSamples();
534  virtual void LoadInstruments();
535  virtual void UpdateFileOffsets();
537  friend class Region; // Region has to look in the wave pool table to get its sample
538  private:
539  void __UpdateWavePoolTableChunk();
540  void __UpdateWavePoolTable();
541  };
542 
550  class Exception : public RIFF::Exception {
551  public:
553  void PrintMessage();
554  };
555 
558 
559 } // namespace DLS
560 
561 #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:1363
ArticulationList * pArticulations
Definition: DLS.h:296
virtual ~Connection()
Definition: DLS.h:267
uint16_t BlockAlign
The block alignment (in bytes) of the waveform data. Playback software needs to process a multiple of...
Definition: DLS.h:400
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:371
virtual void UpdateChunks()
Update chunks with current info values.
Definition: DLS.cpp:340
uint32_t Regions
Reflects the number of Region defintions this Instrument has.
Definition: DLS.h:465
range_t VelocityRange
Definition: DLS.h:431
bool operator<(const range_t &other) const
Definition: DLS.h:208
bool SourceBipolar
Definition: DLS.h:248
virtual void UpdateChunks()
Apply Instrument with all its Regions to the respective RIFF chunks.
Definition: DLS.cpp:1294
Parses DLS Level 1 and 2 compliant files and provides abstract access to the data.
Definition: DLS.h:495
File()
Constructor.
Definition: DLS.cpp:1388
stream_whence_t
File stream position dependent to these relations.
Definition: RIFF.h:158
uint16_t Layer
Definition: DLS.h:433
Connection()
Definition: DLS.h:264
String CreationDate
&lt;ICRD-ck&gt;. Specifies the date the subject of the file was created. List dates in yyyy-mm-dd format...
Definition: DLS.h:308
uint32_t LoopType
Defines how the waveform samples will be looped (appropriate loop types for the gig format are define...
Definition: DLS.h:231
virtual ~Articulation()
Definition: DLS.cpp:140
bool operator==(const range_t &other) const
Definition: DLS.h:214
ArticulationList::iterator ArticulationsIterator
Definition: DLS.h:297
virtual void UpdateChunks()
Apply all articulations to the respective RIFF chunks.
Definition: DLS.cpp:221
String Engineer
&lt;IENG-ck&gt;. Stores the name of the engineer who worked on the file. Multiple engineer names are separa...
Definition: DLS.h:315
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:1065
void __ensureMandatoryChunksExist()
Checks if all (for DLS) mandatory chunks exist, if not they will be created.
Definition: DLS.cpp:1783
String Artists
&lt;IART-ck&gt;. Lists the artist of the original subject of the file.
Definition: DLS.h:312
Sample * GetFirstSample()
Returns a pointer to the first Sample object of the file, NULL otherwise.
Definition: DLS.cpp:1493
Instrument * GetNextInstrument()
Returns a pointer to the next Instrument object of the file, NULL otherwise.
Definition: DLS.cpp:1576
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:550
uint32_t HeaderSize
Definition: DLS.h:282
conn_trn_t SourceTransform
Definition: DLS.h:246
Optional information for DLS files, instruments, samples, etc.
Definition: DLS.h:304
uint16_t usData2
Definition: DLS.h:119
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:1161
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:924
uint16_t KeyGroup
Definition: DLS.h:432
RIFF::File * GetExtensionFile(int index)
Returns extension file of given index.
Definition: DLS.cpp:1640
virtual ~Region()
Destructor.
Definition: DLS.cpp:1031
Instrument * AddInstrument()
Add a new instrument definition.
Definition: DLS.cpp:1603
RIFF::List * pCkRegion
Definition: DLS.h:446
Instrument * GetFirstInstrument()
Returns a pointer to the first Instrument object of the file, NULL otherwise.
Definition: DLS.cpp:1569
String Keywords
&lt;IKEY-ck&gt;. 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:314
unsigned long GetSize() const
Returns sample size.
Definition: DLS.cpp:848
std::list< Articulation * > ArticulationList
Definition: DLS.h:294
conn_src_t
Connection Sources.
Definition: DLS.h:125
uint32_t * pWavePoolTable
Definition: DLS.h:529
uint32_t WavePoolTableIndex
Definition: DLS.h:447
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:397
virtual ~Info()
Definition: DLS.cpp:278
RIFF::List * pCkInstrument
Definition: DLS.h:480
uint32_t SamplerOptions
Definition: DLS.h:381
virtual ~Resource()
Definition: DLS.cpp:455
String SourceForm
&lt;ISRF-ck&gt;. Identifies the original form of the material that was digitized, such as record...
Definition: DLS.h:320
int16_t FineTune
Definition: DLS.h:366
bool ControlInvert
Definition: DLS.h:251
Sampler(RIFF::List *ParentList)
Definition: DLS.cpp:542
Defines Sample Loop Points.
Definition: DLS.h:229
virtual void UpdateChunks()
Apply articulation connections to the respective RIFF chunks.
Definition: DLS.cpp:148
Region * AddRegion()
Definition: DLS.cpp:1259
uint8_t abData[8]
Definition: DLS.h:121
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:906
RIFF::List * pResourceList
Definition: DLS.h:356
virtual ~Sample()
Destructor.
Definition: DLS.cpp:743
void PrintMessage()
Definition: DLS.cpp:1886
virtual void LoadSamples()
Definition: DLS.cpp:1506
bool ControlBipolar
Definition: DLS.h:252
bool NoSampleCompression
Definition: DLS.h:369
uint16_t MIDIBank
Reflects combination of MIDIBankCoarse and MIDIBankFine (bank 1 - bank 16384). Do not change this val...
Definition: DLS.h:461
virtual void SetGain(int32_t gain)
Definition: DLS.cpp:578
RIFF::List * pParentList
Definition: DLS.h:379
uint16_t minor
Definition: DLS.h:110
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:402
RIFF::List * pParentList
Definition: DLS.h:295
std::list< Sample * > SampleList
Definition: DLS.h:518
virtual void UpdateChunks()
Apply all the DLS file&#39;s current instruments, samples and settings to the respective RIFF chunks...
Definition: DLS.cpp:1676
InstrumentList::iterator InstrumentsIterator
Definition: DLS.h:526
uint32_t uiHeaderSize
Definition: DLS.h:380
uint8_t MIDIBankCoarse
Reflects the MIDI Bank number for MIDI Control Change 0 (bank 1 - 128).
Definition: DLS.h:462
void GenerateDLSID()
Generates a new DLSID for the resource.
Definition: DLS.cpp:487
conn_dst_t Destination
Definition: DLS.h:253
uint FrameSize
Reflects the size (in bytes) of one single sample point (only if known sample data format is used...
Definition: DLS.h:403
RIFF::Chunk * pCkFormat
Definition: DLS.h:417
Every subject of an DLS file and the file itself can have an unique, computer generated ID...
Definition: DLS.h:117
bool MultiChannel
Definition: DLS.h:437
Lower and upper limit of a range.
Definition: DLS.h:204
uint16_t usData3
Definition: DLS.h:120
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:779
Region * GetFirstRegion()
Definition: DLS.cpp:1231
void DeleteSampleLoop(sample_loop_t *pLoopDef)
Deletes an existing sample loop.
Definition: DLS.cpp:645
virtual ~Instrument()
Destructor.
Definition: DLS.cpp:1326
uint16_t low
Low value of range.
Definition: DLS.h:205
bool b64BitWavePoolOffsets
Definition: DLS.h:531
RIFF List Chunk.
Definition: RIFF.h:280
RIFF::Chunk * pCkData
Definition: DLS.h:416
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:292
RegionList * pRegions
Definition: DLS.h:481
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:396
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:669
void ReleaseSampleData()
Free sample data from RAM.
Definition: DLS.cpp:834
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:236
Abstract base class which provides mandatory informations about sample players in general...
Definition: DLS.h:363
bool SelfNonExclusive
Definition: DLS.h:434
String libraryName()
Returns the name of this C++ library.
Definition: DLS.cpp:1899
Sample * GetSample()
Definition: DLS.cpp:1036
Exception(String Message)
Definition: DLS.cpp:1883
conn_trn_t
Connection Transforms.
Definition: DLS.h:196
void SetFileName(const String &name)
You may call this method store a future file name, so you don&#39;t have to to pass it to the Save() call...
Definition: DLS.cpp:1665
uint32_t SampleLoops
Reflects the number of sample loops.
Definition: DLS.h:370
conn_trn_t DestinationTransform
Definition: DLS.h:254
Resource * pParent
Definition: DLS.h:355
void Resize(int iNewSize)
Resize sample.
Definition: DLS.cpp:881
SampleList * pSamples
Definition: DLS.h:523
conn_dst_t
Connection Destinations.
Definition: DLS.h:151
bool NoSampleDepthTruncation
Definition: DLS.h:368
String Message
Definition: RIFF.h:385
virtual ~Articulator()
Definition: DLS.cpp:205
void DeleteSample(Sample *pSample)
Delete a sample.
Definition: DLS.cpp:1561
bool SourceInvert
Definition: DLS.h:247
bool overlaps(uint16_t scalar) const
Definition: DLS.h:218
uint16_t high
High value of range.
Definition: DLS.h:206
virtual void UpdateChunks()
Apply Region settings to the respective RIFF chunks.
Definition: DLS.cpp:1099
Articulation * GetFirstArticulation()
Definition: DLS.cpp:174
uint32_t Size
For internal usage only: usually reflects exactly sizeof(sample_loop_t), otherwise if the value is la...
Definition: DLS.h:230
bool PhaseMaster
Definition: DLS.h:435
Info(RIFF::List *list)
Constructor.
Definition: DLS.cpp:251
std::list< Instrument * > InstrumentList
Definition: DLS.h:519
Region(Instrument *pInstrument, RIFF::List *rgnList)
Definition: DLS.cpp:983
unsigned long SamplesTotal
Reflects total number of sample points (only if known sample data format is used, 0 otherwise)...
Definition: DLS.h:402
String Source
&lt;ISRC-ck&gt;. Identifies the name of the person or organization who supplied the original subject of the...
Definition: DLS.h:319
uint16_t BitDepth
Size of each sample per channel (only if known sample data format is used, 0 otherwise).
Definition: DLS.h:401
Ordinary RIFF Chunk.
Definition: RIFF.h:183
uint32_t Scale
Definition: DLS.h:255
uint8_t UnityNote
Definition: DLS.h:365
virtual ~File()
Definition: DLS.cpp:1465
uint32_t MIDIProgram
Specifies the MIDI Program Change Number this Instrument should be assigned to.
Definition: DLS.h:464
String Commissioned
&lt;ICMS-ck&gt;. Lists the name of the person or organization that commissioned the subject of the file...
Definition: DLS.h:321
uint32_t LoopLength
Length of the looping area (in sample points).
Definition: DLS.h:233
bool overlaps(const range_t &other) const
Definition: DLS.h:222
void SetSample(Sample *pSample)
Assign another sample to this Region.
Definition: DLS.cpp:1053
uint32_t ulData1
Definition: DLS.h:118
SampleList::iterator SamplesIterator
Definition: DLS.h:524
Articulation * GetNextArticulation()
Definition: DLS.cpp:181
conn_src_t Control
Definition: DLS.h:249
uint16_t WaveLinkOptionFlags
Definition: DLS.h:450
void DeleteInstrument(Instrument *pInstrument)
Delete an instrument.
Definition: DLS.cpp:1620
unsigned long Write(void *pBuffer, unsigned long SampleCount)
Write sample wave data.
Definition: DLS.cpp:944
version_t * pVersion
Points to a version_t structure if the file provided a version number else is set to NULL...
Definition: DLS.h:497
String Technician
&lt;ITCH-ck&gt;. Identifies the technician who sampled the subject file.
Definition: DLS.h:316
uint32_t LoopStart
The start value specifies the offset (in sample points) in the waveform data of the first sample poin...
Definition: DLS.h:232
Instrument(File *pFile, RIFF::List *insList)
Constructor.
Definition: DLS.cpp:1208
uint16_t major
Definition: DLS.h:111
RegionList::iterator RegionsIterator
Definition: DLS.h:482
Region * GetNextRegion()
Definition: DLS.cpp:1238
RIFF::Chunk * pArticulationCk
Definition: DLS.h:281
uint32_t AverageBytesPerSecond
The average number of bytes per second at which the waveform data should be transferred (Playback sof...
Definition: DLS.h:399
conn_src_t Source
Definition: DLS.h:245
uint8_t MIDIBankFine
Reflects the MIDI Bank number for MIDI Control Change 32 (bank 1 - 128).
Definition: DLS.h:463
uint16_t PhaseGroup
Definition: DLS.h:436
uint32_t Channel
Definition: DLS.h:438
uint32_t WavePoolHeaderSize
Definition: DLS.h:527
RIFF::File * pRIFF
Definition: DLS.h:521
Abstract base class which encapsulates data structures which all DLS resources are able to provide...
Definition: DLS.h:344
RIFF File.
Definition: RIFF.h:328
void Init(conn_block_t *Header)
Definition: DLS.cpp:75
InstrumentList * pInstruments
Definition: DLS.h:525
uint16_t build
Definition: DLS.h:112
virtual void LoadInstruments()
Definition: DLS.cpp:1582
virtual void UpdateChunks()
Apply sample and its settings to the respective RIFF chunks.
Definition: DLS.cpp:957
String Software
&lt;ISFT-ck&gt;. Identifies the name of the sofware package used to create the file.
Definition: DLS.h:317
virtual void UpdateChunks()
Update chunks with current Resource data.
Definition: DLS.cpp:468
String ArchivalLocation
&lt;IARL-ck&gt;. Indicates where the subject of the file is stored.
Definition: DLS.h:307
unsigned long ulWavePoolOffset
Definition: DLS.h:418
virtual void Save()
Save changes to same file.
Definition: DLS.cpp:1758
uint16_t release
Definition: DLS.h:113
Encapsulates sample waves used for playback.
Definition: DLS.h:394
Sample * GetNextSample()
Returns a pointer to the next Sample object of the file, NULL otherwise.
Definition: DLS.cpp:1500
String Name
&lt;INAM-ck&gt;. Stores the title of the subject of the file, such as, Seattle From Above.
Definition: DLS.h:306
uint32_t SamplesPerSecond
Sampling rate at which each channel should be played (defaults to 44100 if Sample was created with In...
Definition: DLS.h:398
String Product
&lt;IPRD-ck&gt;. Specifies the name of the title the file was originally intended for, such as World Ruler ...
Definition: DLS.h:310
Sample(File *pFile, RIFF::List *waveList, unsigned long WavePoolOffset)
Constructor.
Definition: DLS.cpp:704
uint32_t WavePoolCount
Definition: DLS.h:528
String GetFileName()
File name of this DLS file.
Definition: DLS.cpp:1657
String Medium
&lt;IMED-ck&gt;. Describes the original subject of the file, such as, record, CD, and so forth...
Definition: DLS.h:318
String Subject
&lt;ISBJ-ck&gt;. Describes the contents of the file.
Definition: DLS.h:322
void LoadArticulations()
Definition: DLS.cpp:187
RIFF::List * pWaveList
Definition: DLS.h:415
virtual void LoadRegions()
Definition: DLS.cpp:1244
Will be thrown whenever an error occurs while handling a RIFF file.
Definition: RIFF.h:383
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:759
conn_block_t ToConnBlock()
Definition: DLS.cpp:89
virtual ~Sampler()
Definition: DLS.cpp:574
Resource * GetParent()
Definition: DLS.h:349
void DeleteRegion(Region *pRegion)
Definition: DLS.cpp:1279
Abstract base class for classes that provide articulation information (thus for Instrument and Region...
Definition: DLS.h:286
Connection * pConnections
Points to the beginning of a Connection array.
Definition: DLS.h:274
Sample * pSample
Definition: DLS.h:448
uint32_t Connections
Reflects the number of Connections.
Definition: DLS.h:275
conn_trn_t ControlTransform
Definition: DLS.h:250
range_t KeyRange
Definition: DLS.h:430
const Resource * GetParent() const
Definition: DLS.h:350
Provides access to the defined connections used for the synthesis model.
Definition: DLS.h:272
dlsid_t * pDLSID
Points to a dlsid_t structure if the file provided a DLS ID else is NULL.
Definition: DLS.h:347
uint32_t Instruments
Reflects the number of available Instrument objects.
Definition: DLS.h:498
String Genre
&lt;IGNR-ck&gt;. Descirbes the original work, such as, Jazz, Classic, Rock, Techno, Rave, etc.
Definition: DLS.h:313
Provides all neccessary information for the synthesis of a DLS Instrument.
Definition: DLS.h:458
int32_t Gain
Definition: DLS.h:367
Quadtuple version number (&quot;major.minor.release.build&quot;).
Definition: DLS.h:109
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:534
String Copyright
&lt;ICOP-ck&gt;. Records the copyright information for the file.
Definition: DLS.h:311
Sample * AddSample()
Add a new sample.
Definition: DLS.cpp:1543
void CopyAssignCore(const Instrument *orig)
Definition: DLS.cpp:1341
Info * pInfo
Points (in any case) to an Info object, providing additional, optional infos and comments.
Definition: DLS.h:346
String libraryVersion()
Returns version of this C++ library.
Definition: DLS.cpp:1907
virtual void UpdateChunks()
Apply all sample player options to the respective RIFF chunk.
Definition: DLS.cpp:586
Defines a connection within the synthesis model.
Definition: DLS.h:243
uint16_t FormatOptionFlags
Definition: DLS.h:449
bool UseFixedLengthStrings
Definition: DLS.h:323
uint32_t * pWavePoolTableHi
Definition: DLS.h:530
String Comments
&lt;ICMT-ck&gt;. Provides general comments about the file or the subject of the file. Sentences might end w...
Definition: DLS.h:309
Articulator(RIFF::List *ParentList)
Definition: DLS.cpp:169
Defines Region information of an Instrument.
Definition: DLS.h:428
std::list< RIFF::File * > ExtensionFiles
Definition: DLS.h:522
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:460
std::list< Region * > RegionList
Definition: DLS.h:474
void * LoadSampleData()
Load sample data into RAM.
Definition: DLS.cpp:825
void AddSampleLoop(sample_loop_t *pLoopDef)
Adds a new sample loop with the provided loop definition.
Definition: DLS.cpp:623
virtual void UpdateFileOffsets()
Updates all file offsets stored all over the file.
Definition: DLS.cpp:1774
Resource(Resource *Parent, RIFF::List *lstResource)
Constructor.
Definition: DLS.cpp:438