libgig  3.3.0.svn4
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-2013 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 
210  struct sample_loop_t {
211  uint32_t Size;
212  uint32_t LoopType;
213  uint32_t LoopStart;
214  uint32_t LoopLength;
215  };
216 
217  // just symbol prototyping
218  class File;
219  class Instrument;
220  class Region;
221  class Sample;
222 
224  class Connection {
225  public:
236  uint32_t Scale;
237  protected:
238  struct conn_block_t {
239  uint16_t source;
240  uint16_t control;
241  uint16_t destination;
242  uint16_t transform;
243  uint32_t scale;
244  };
246  void Init(conn_block_t* Header);
247  conn_block_t ToConnBlock();
248  virtual ~Connection() {}
249  friend class Articulation;
250  };
251 
253  class Articulation {
254  public:
256  uint32_t Connections;
257 
258  Articulation(RIFF::Chunk* artl);
259  virtual ~Articulation();
260  virtual void UpdateChunks();
261  protected:
263  uint32_t HeaderSize;
264  };
265 
267  class Articulator {
268  public:
269  Articulator(RIFF::List* ParentList);
272  virtual void UpdateChunks();
273  virtual void CopyAssign(const Articulator* orig);
274  protected:
275  typedef std::list<Articulation*> ArticulationList;
278  ArticulationList::iterator ArticulationsIterator;
279 
280  void LoadArticulations();
281  virtual ~Articulator();
282  };
283 
285  class Info {
286  public:
305 
307  uint32_t chunkId;
308  int length;
309  };
310 
311  Info(RIFF::List* list);
312  void SetFixedStringLengths(const string_length_t* lengths);
313  virtual ~Info();
314  virtual void UpdateChunks();
315  virtual void CopyAssign(const Info* orig);
316  private:
317  RIFF::List* pResourceListChunk;
318  const string_length_t* pFixedStringLengths;
319 
320  static void LoadString(uint32_t ChunkID, RIFF::List* lstINFO, String& s);
321  void SaveString(uint32_t ChunkID, RIFF::List* lstINFO, const String& s, const String& sDefault);
322  };
323 
325  class Resource {
326  public:
329 
330  Resource* GetParent() { return pParent; }
331  virtual void UpdateChunks();
332  void GenerateDLSID();
333  virtual void CopyAssign(const Resource* orig);
334  protected:
337 
338  Resource(Resource* Parent, RIFF::List* lstResource);
339  virtual ~Resource();
340  };
341 
343  class Sampler {
344  public:
345  uint8_t UnityNote;
346  int16_t FineTune;
347  int32_t Gain;
350  uint32_t SampleLoops;
352 
353  void AddSampleLoop(sample_loop_t* pLoopDef);
354  void DeleteSampleLoop(sample_loop_t* pLoopDef);
355  virtual void SetGain(int32_t gain);
356  virtual void UpdateChunks();
357  virtual void CopyAssign(const Sampler* orig);
358  protected:
360  uint32_t uiHeaderSize;
361  uint32_t SamplerOptions;
362  Sampler(RIFF::List* ParentList);
363  virtual ~Sampler();
364  };
365 
374  class Sample : public Resource {
375  public:
376  uint16_t FormatTag;
377  uint16_t Channels;
378  uint32_t SamplesPerSecond;
380  uint16_t BlockAlign;
381  uint16_t BitDepth;
382  unsigned long SamplesTotal;
383  uint FrameSize;
384 
385  void* LoadSampleData();
386  void ReleaseSampleData();
387  unsigned long GetSize();
388  void Resize(int iNewSize);
389  unsigned long SetPos(unsigned long SampleCount, RIFF::stream_whence_t Whence = RIFF::stream_start);
390  unsigned long Read(void* pBuffer, unsigned long SampleCount);
391  unsigned long Write(void* pBuffer, unsigned long SampleCount);
392  virtual void UpdateChunks();
393  protected:
397  unsigned long ulWavePoolOffset; // needed for comparison with the wave pool link table, thus the link to instruments
398 
399  Sample(File* pFile, RIFF::List* waveList, unsigned long WavePoolOffset);
400  virtual ~Sample();
401  friend class File;
402  friend class Region; // Region has to compare the wave pool offset to get its sample
403  };
404 
406  class Region : public Resource, public Articulator, public Sampler {
407  public:
410  uint16_t KeyGroup;
411  uint16_t Layer;
414  uint16_t PhaseGroup;
416  uint32_t Channel;
417 
418  Sample* GetSample();
419  void SetSample(Sample* pSample);
420  virtual void SetKeyRange(uint16_t Low, uint16_t High);
421  virtual void UpdateChunks();
422  virtual void CopyAssign(const Region* orig);
423  protected:
425  uint32_t WavePoolTableIndex; // index in the wave pool table to the sample wave this region is linked to
426  Sample* pSample; // every region refers to exactly one sample
429 
430  Region(Instrument* pInstrument, RIFF::List* rgnList);
431  virtual ~Region();
432  friend class Instrument;
433  };
434 
436  class Instrument : public Resource, public Articulator {
437  public:
438  bool IsDrum;
439  uint16_t MIDIBank;
440  uint8_t MIDIBankCoarse;
441  uint8_t MIDIBankFine;
442  uint32_t MIDIProgram;
443  uint32_t Regions;
444 
447  Region* AddRegion();
448  void DeleteRegion(Region* pRegion);
449  virtual void UpdateChunks();
450  virtual void CopyAssign(const Instrument* orig);
451  protected:
452  typedef std::list<Region*> RegionList;
453  struct midi_locale_t {
454  uint32_t bank;
455  uint32_t instrument;
456  };
457 
460  RegionList::iterator RegionsIterator;
461 
462  Instrument(File* pFile, RIFF::List* insList);
463  void CopyAssignCore(const Instrument* orig);
464  virtual void LoadRegions();
465  virtual ~Instrument();
466  friend class File;
467  friend class Region;
468  private:
469  void MoveRegion(Region* pSrc, Region* pDst);
470  };
471 
473  class File : public Resource {
474  public:
476  uint32_t Instruments;
477 
478  File();
482  Sample* GetNextSample();
483  Sample* AddSample();
484  void DeleteSample(Sample* pSample);
488  void DeleteInstrument(Instrument* pInstrument);
489  RIFF::File* GetExtensionFile(int index);
490  virtual void UpdateChunks();
491  virtual void Save(const String& Path);
492  virtual void Save();
493  virtual ~File();
494  protected:
495  typedef std::list<Sample*> SampleList;
496  typedef std::list<Instrument*> InstrumentList;
497 
499  std::list<RIFF::File*> ExtensionFiles;
501  SampleList::iterator SamplesIterator;
503  InstrumentList::iterator InstrumentsIterator;
505  uint32_t WavePoolCount;
506  uint32_t* pWavePoolTable;
507  uint32_t* pWavePoolTableHi;
509 
510  virtual void LoadSamples();
511  virtual void LoadInstruments();
513  friend class Region; // Region has to look in the wave pool table to get its sample
514  private:
515  void __UpdateWavePoolTableChunk();
516  void __UpdateWavePoolTable();
517  };
518 
526  class Exception : public RIFF::Exception {
527  public:
529  void PrintMessage();
530  };
531 
534 
535 } // namespace DLS
536 
537 #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:1305
ArticulationList * pArticulations
Definition: DLS.h:277
virtual ~Connection()
Definition: DLS.h:248
uint16_t BlockAlign
The block alignment (in bytes) of the waveform data. Playback software needs to process a multiple of...
Definition: DLS.h:380
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:351
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:443
range_t VelocityRange
Definition: DLS.h:409
virtual void UpdateChunks()
Update chunks with current Resource data.
Definition: DLS.cpp:468
bool SourceBipolar
Definition: DLS.h:229
virtual void UpdateChunks()
Apply Instrument with all its Regions to the respective RIFF chunks.
Definition: DLS.cpp:1236
Parses DLS Level 1 and 2 compliant files and provides abstract access to the data.
Definition: DLS.h:473
File()
Constructor.
Definition: DLS.cpp:1330
stream_whence_t
File stream position dependent to these relations.
Definition: RIFF.h:158
uint16_t Layer
Definition: DLS.h:411
Connection()
Definition: DLS.h:245
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:289
uint32_t LoopType
Defines how the waveform samples will be looped (appropriate loop types for the gig format are define...
Definition: DLS.h:212
virtual ~Articulation()
Definition: DLS.cpp:140
ArticulationList::iterator ArticulationsIterator
Definition: DLS.h:278
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:296
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:1014
void __ensureMandatoryChunksExist()
Checks if all (for DLS) mandatory chunks exist, if not they will be created.
Definition: DLS.cpp:1703
String Artists
&lt;IART-ck&gt;. Lists the artist of the original subject of the file.
Definition: DLS.h:293
Sample * GetFirstSample()
Returns a pointer to the first Sample object of the file, NULL otherwise.
Definition: DLS.cpp:1435
Instrument * GetNextInstrument()
Returns a pointer to the next Instrument object of the file, NULL otherwise.
Definition: DLS.cpp:1518
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:526
uint32_t HeaderSize
Definition: DLS.h:263
conn_trn_t SourceTransform
Definition: DLS.h:227
Optional information for DLS files, instruments, samples, etc.
Definition: DLS.h:285
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:1110
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:873
uint16_t KeyGroup
Definition: DLS.h:410
RIFF::File * GetExtensionFile(int index)
Returns extension file of given index.
Definition: DLS.cpp:1582
virtual ~Region()
Destructor.
Definition: DLS.cpp:980
Instrument * AddInstrument()
Add a new instrument definition.
Definition: DLS.cpp:1545
RIFF::List * pCkRegion
Definition: DLS.h:424
Instrument * GetFirstInstrument()
Returns a pointer to the first Instrument object of the file, NULL otherwise.
Definition: DLS.cpp:1511
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:295
std::list< Articulation * > ArticulationList
Definition: DLS.h:275
conn_src_t
Connection Sources.
Definition: DLS.h:125
unsigned long GetSize()
Returns sample size.
Definition: DLS.cpp:797
uint32_t * pWavePoolTable
Definition: DLS.h:506
uint32_t WavePoolTableIndex
Definition: DLS.h:425
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:377
virtual ~Info()
Definition: DLS.cpp:278
RIFF::List * pCkInstrument
Definition: DLS.h:458
uint32_t SamplerOptions
Definition: DLS.h:361
void GenerateDLSID()
Generates a new DLSID for the resource.
Definition: DLS.cpp:487
String SourceForm
&lt;ISRF-ck&gt;. Identifies the original form of the material that was digitized, such as record...
Definition: DLS.h:301
int16_t FineTune
Definition: DLS.h:346
bool ControlInvert
Definition: DLS.h:232
Sampler(RIFF::List *ParentList)
Definition: DLS.cpp:542
Defines Sample Loop Points.
Definition: DLS.h:210
virtual void UpdateChunks()
Apply articulation connections to the respective RIFF chunks.
Definition: DLS.cpp:148
Region * AddRegion()
Definition: DLS.cpp:1201
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:855
RIFF::List * pResourceList
Definition: DLS.h:336
virtual ~Sample()
Destructor.
Definition: DLS.cpp:743
void PrintMessage()
Definition: DLS.cpp:1806
virtual void LoadSamples()
Definition: DLS.cpp:1448
bool ControlBipolar
Definition: DLS.h:233
bool NoSampleCompression
Definition: DLS.h:349
uint16_t MIDIBank
Reflects combination of MIDIBankCoarse and MIDIBankFine (bank 1 - bank 16384). Do not change this val...
Definition: DLS.h:439
virtual void SetGain(int32_t gain)
Definition: DLS.cpp:578
RIFF::List * pParentList
Definition: DLS.h:359
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:276
std::list< Sample * > SampleList
Definition: DLS.h:495
virtual void UpdateChunks()
Apply all the DLS file&#39;s current instruments, samples and settings to the respective RIFF chunks...
Definition: DLS.cpp:1610
InstrumentList::iterator InstrumentsIterator
Definition: DLS.h:503
uint32_t uiHeaderSize
Definition: DLS.h:360
uint8_t MIDIBankCoarse
Reflects the MIDI Bank number for MIDI Control Change 0 (bank 1 - 128).
Definition: DLS.h:440
conn_dst_t Destination
Definition: DLS.h:234
uint FrameSize
Reflects the size (in bytes) of one single sample point (only if known sample data format is used...
Definition: DLS.h:383
RIFF::Chunk * pCkFormat
Definition: DLS.h:396
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:415
Lower and upper limit of a range.
Definition: DLS.h:204
uint16_t usData3
Definition: DLS.h:120
Region * GetFirstRegion()
Definition: DLS.cpp:1173
void DeleteSampleLoop(sample_loop_t *pLoopDef)
Deletes an existing sample loop.
Definition: DLS.cpp:645
virtual ~Instrument()
Destructor.
Definition: DLS.cpp:1268
uint16_t low
Low value of range.
Definition: DLS.h:205
bool b64BitWavePoolOffsets
Definition: DLS.h:508
RIFF List Chunk.
Definition: RIFF.h:273
RIFF::Chunk * pCkData
Definition: DLS.h:395
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:459
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:376
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:783
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:343
bool SelfNonExclusive
Definition: DLS.h:412
String libraryName()
Returns the name of this C++ library.
Definition: DLS.cpp:1819
Sample * GetSample()
Definition: DLS.cpp:985
Exception(String Message)
Definition: DLS.cpp:1803
conn_trn_t
Connection Transforms.
Definition: DLS.h:196
uint32_t SampleLoops
Reflects the number of sample loops.
Definition: DLS.h:350
conn_trn_t DestinationTransform
Definition: DLS.h:235
Resource * pParent
Definition: DLS.h:335
void Resize(int iNewSize)
Resize sample.
Definition: DLS.cpp:830
SampleList * pSamples
Definition: DLS.h:500
conn_dst_t
Connection Destinations.
Definition: DLS.h:151
bool NoSampleDepthTruncation
Definition: DLS.h:348
String Message
Definition: RIFF.h:370
virtual ~Articulator()
Definition: DLS.cpp:205
void DeleteSample(Sample *pSample)
Delete a sample.
Definition: DLS.cpp:1503
bool SourceInvert
Definition: DLS.h:228
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:1048
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:211
bool PhaseMaster
Definition: DLS.h:413
Info(RIFF::List *list)
Constructor.
Definition: DLS.cpp:251
std::list< Instrument * > InstrumentList
Definition: DLS.h:496
Region(Instrument *pInstrument, RIFF::List *rgnList)
Definition: DLS.cpp:932
unsigned long SamplesTotal
Reflects total number of sample points (only if known sample data format is used, 0 otherwise)...
Definition: DLS.h:382
String Source
&lt;ISRC-ck&gt;. Identifies the name of the person or organization who supplied the original subject of the...
Definition: DLS.h:300
uint16_t BitDepth
Size of each sample per channel (only if known sample data format is used, 0 otherwise).
Definition: DLS.h:381
Ordinary RIFF Chunk.
Definition: RIFF.h:177
uint32_t Scale
Definition: DLS.h:236
uint8_t UnityNote
Definition: DLS.h:345
virtual ~File()
Definition: DLS.cpp:1407
uint32_t MIDIProgram
Specifies the MIDI Program Change Number this Instrument should be assigned to.
Definition: DLS.h:442
String Commissioned
&lt;ICMS-ck&gt;. Lists the name of the person or organization that commissioned the subject of the file...
Definition: DLS.h:302
uint32_t LoopLength
Length of the looping area (in sample points).
Definition: DLS.h:214
void SetSample(Sample *pSample)
Assign another sample to this Region.
Definition: DLS.cpp:1002
uint32_t ulData1
Definition: DLS.h:118
SampleList::iterator SamplesIterator
Definition: DLS.h:501
Articulation * GetNextArticulation()
Definition: DLS.cpp:181
conn_src_t Control
Definition: DLS.h:230
uint16_t WaveLinkOptionFlags
Definition: DLS.h:428
void DeleteInstrument(Instrument *pInstrument)
Delete an instrument.
Definition: DLS.cpp:1562
unsigned long Write(void *pBuffer, unsigned long SampleCount)
Write sample wave data.
Definition: DLS.cpp:893
version_t * pVersion
Points to a version_t structure if the file provided a version number else is set to NULL...
Definition: DLS.h:475
String Technician
&lt;ITCH-ck&gt;. Identifies the technician who sampled the subject file.
Definition: DLS.h:297
uint32_t LoopStart
The start value specifies the offset (in sample points) in the waveform data of the first sample poin...
Definition: DLS.h:213
Instrument(File *pFile, RIFF::List *insList)
Constructor.
Definition: DLS.cpp:1150
uint16_t major
Definition: DLS.h:111
RegionList::iterator RegionsIterator
Definition: DLS.h:460
Region * GetNextRegion()
Definition: DLS.cpp:1180
RIFF::Chunk * pArticulationCk
Definition: DLS.h:262
uint32_t AverageBytesPerSecond
The average number of bytes per second at which the waveform data should be transferred (Playback sof...
Definition: DLS.h:379
conn_src_t Source
Definition: DLS.h:226
uint8_t MIDIBankFine
Reflects the MIDI Bank number for MIDI Control Change 32 (bank 1 - 128).
Definition: DLS.h:441
uint16_t PhaseGroup
Definition: DLS.h:414
uint32_t Channel
Definition: DLS.h:416
uint32_t WavePoolHeaderSize
Definition: DLS.h:504
RIFF::File * pRIFF
Definition: DLS.h:498
Abstract base class which encapsulates data structures which all DLS resources are able to provide...
Definition: DLS.h:325
RIFF File.
Definition: RIFF.h:320
void Init(conn_block_t *Header)
Definition: DLS.cpp:75
InstrumentList * pInstruments
Definition: DLS.h:502
uint16_t build
Definition: DLS.h:112
virtual void LoadInstruments()
Definition: DLS.cpp:1524
virtual void UpdateChunks()
Apply sample and its settings to the respective RIFF chunks.
Definition: DLS.cpp:906
String Software
&lt;ISFT-ck&gt;. Identifies the name of the sofware package used to create the file.
Definition: DLS.h:298
String ArchivalLocation
&lt;IARL-ck&gt;. Indicates where the subject of the file is stored.
Definition: DLS.h:288
unsigned long ulWavePoolOffset
Definition: DLS.h:397
virtual void Save()
Save changes to same file.
Definition: DLS.cpp:1692
uint16_t release
Definition: DLS.h:113
Encapsulates sample waves used for playback.
Definition: DLS.h:374
Sample * GetNextSample()
Returns a pointer to the next Sample object of the file, NULL otherwise.
Definition: DLS.cpp:1442
String Name
&lt;INAM-ck&gt;. Stores the title of the subject of the file, such as, Seattle From Above.
Definition: DLS.h:287
uint32_t SamplesPerSecond
Sampling rate at which each channel should be played (defaults to 44100 if Sample was created with In...
Definition: DLS.h:378
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:291
Sample(File *pFile, RIFF::List *waveList, unsigned long WavePoolOffset)
Constructor.
Definition: DLS.cpp:704
virtual ~Resource()
Definition: DLS.cpp:455
uint32_t WavePoolCount
Definition: DLS.h:505
String GetFileName()
File name of this DLS file.
Definition: DLS.cpp:1599
String Medium
&lt;IMED-ck&gt;. Describes the original subject of the file, such as, record, CD, and so forth...
Definition: DLS.h:299
String Subject
&lt;ISBJ-ck&gt;. Describes the contents of the file.
Definition: DLS.h:303
void LoadArticulations()
Definition: DLS.cpp:187
RIFF::List * pWaveList
Definition: DLS.h:394
virtual void LoadRegions()
Definition: DLS.cpp:1186
Will be thrown whenever an error occurs while handling a RIFF file.
Definition: RIFF.h:368
conn_block_t ToConnBlock()
Definition: DLS.cpp:89
virtual ~Sampler()
Definition: DLS.cpp:574
Resource * GetParent()
Definition: DLS.h:330
void DeleteRegion(Region *pRegion)
Definition: DLS.cpp:1221
Abstract base class for classes that provide articulation information (thus for Instrument and Region...
Definition: DLS.h:267
Connection * pConnections
Points to the beginning of a Connection array.
Definition: DLS.h:255
Sample * pSample
Definition: DLS.h:426
uint32_t Connections
Reflects the number of Connections.
Definition: DLS.h:256
conn_trn_t ControlTransform
Definition: DLS.h:231
range_t KeyRange
Definition: DLS.h:408
Provides access to the defined connections used for the synthesis model.
Definition: DLS.h:253
dlsid_t * pDLSID
Points to a dlsid_t structure if the file provided a DLS ID else is NULL.
Definition: DLS.h:328
uint32_t Instruments
Reflects the number of available Instrument objects.
Definition: DLS.h:476
String Genre
&lt;IGNR-ck&gt;. Descirbes the original work, such as, Jazz, Classic, Rock, Techno, Rave, etc.
Definition: DLS.h:294
Provides all neccessary information for the synthesis of a DLS Instrument.
Definition: DLS.h:436
int32_t Gain
Definition: DLS.h:347
Quadtuple version number (&quot;major.minor.release.build&quot;).
Definition: DLS.h:109
String Copyright
&lt;ICOP-ck&gt;. Records the copyright information for the file.
Definition: DLS.h:292
Sample * AddSample()
Add a new sample.
Definition: DLS.cpp:1485
void CopyAssignCore(const Instrument *orig)
Definition: DLS.cpp:1283
Info * pInfo
Points (in any case) to an Info object, providing additional, optional infos and comments.
Definition: DLS.h:327
String libraryVersion()
Returns version of this C++ library.
Definition: DLS.cpp:1827
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:224
uint16_t FormatOptionFlags
Definition: DLS.h:427
bool UseFixedLengthStrings
Definition: DLS.h:304
uint32_t * pWavePoolTableHi
Definition: DLS.h:507
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:290
Articulator(RIFF::List *ParentList)
Definition: DLS.cpp:169
Defines Region information of an Instrument.
Definition: DLS.h:406
std::list< RIFF::File * > ExtensionFiles
Definition: DLS.h:499
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:438
std::list< Region * > RegionList
Definition: DLS.h:452
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
void * LoadSampleData()
Load sample data into RAM.
Definition: DLS.cpp:774
void AddSampleLoop(sample_loop_t *pLoopDef)
Adds a new sample loop with the provided loop definition.
Definition: DLS.cpp:623
Resource(Resource *Parent, RIFF::List *lstResource)
Constructor.
Definition: DLS.cpp:438