libgig  3.3.0
gig.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-2009 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 __GIG_H__
25 #define __GIG_H__
26 
27 #include "DLS.h"
28 
29 #if WORDS_BIGENDIAN
30 # define LIST_TYPE_3PRG 0x33707267
31 # define LIST_TYPE_3EWL 0x3365776C
32 # define LIST_TYPE_3GRI 0x33677269
33 # define LIST_TYPE_3GNL 0x33676E6C
34 # define CHUNK_ID_SMPL 0x736D706C
35 # define CHUNK_ID_3GIX 0x33676978
36 # define CHUNK_ID_3EWA 0x33657761
37 # define CHUNK_ID_3LNK 0x336C6E6B
38 # define CHUNK_ID_3EWG 0x33657767
39 # define CHUNK_ID_EWAV 0x65776176
40 # define CHUNK_ID_3GNM 0x33676E6D
41 # define CHUNK_ID_EINF 0x65696E66
42 # define CHUNK_ID_3CRC 0x33637263
43 #else // little endian
44 # define LIST_TYPE_3PRG 0x67727033
45 # define LIST_TYPE_3EWL 0x6C776533
46 # define LIST_TYPE_3GRI 0x69726733
47 # define LIST_TYPE_3GNL 0x6C6E6733
48 # define CHUNK_ID_SMPL 0x6C706D73
49 # define CHUNK_ID_3GIX 0x78696733
50 # define CHUNK_ID_3EWA 0x61776533
51 # define CHUNK_ID_3LNK 0x6B6E6C33
52 # define CHUNK_ID_3EWG 0x67776533
53 # define CHUNK_ID_EWAV 0x76617765
54 # define CHUNK_ID_3GNM 0x6D6E6733
55 # define CHUNK_ID_EINF 0x666E6965
56 # define CHUNK_ID_3CRC 0x63726333
57 #endif // WORDS_BIGENDIAN
58 
60 namespace gig {
61 
62  typedef std::string String;
63 
65  struct range_t {
66  uint8_t low;
67  uint8_t high;
68  };
69 
71  struct buffer_t {
72  void* pStart;
73  unsigned long Size;
74  unsigned long NullExtensionSize;
76  pStart = NULL;
77  Size = 0;
79  }
80  };
81 
83  typedef enum {
84  loop_type_normal = 0x00000000,
85  loop_type_bidirectional = 0x00000001,
86  loop_type_backward = 0x00000002
87  } loop_type_t;
88 
90  typedef enum {
91  smpte_format_no_offset = 0x00000000,
92  smpte_format_24_frames = 0x00000018,
93  smpte_format_25_frames = 0x00000019,
95  smpte_format_30_frames = 0x0000001E
97 
99  typedef enum {
103  curve_type_unknown = 0xffffffff
104  } curve_type_t;
105 
107  typedef enum {
112 
114  typedef enum {
120  } lfo3_ctrl_t;
121 
123  typedef enum {
126  lfo2_ctrl_foot = 0x02,
129  } lfo2_ctrl_t;
130 
132  typedef enum {
138  } lfo1_ctrl_t;
139 
141  typedef enum {
155 
157  typedef enum {
158  vcf_res_ctrl_none = 0xffffffff,
163  } vcf_res_ctrl_t;
164 
174  typedef enum {
175  type_none = 0x00,
177  type_velocity = 0xff,
179  } type_t;
180 
183  };
184 
191 
198 
205 
213  typedef enum {
214  dimension_none = 0x00,
227  dimension_foot = 0x04,
248  } dimension_t;
249 
254  typedef enum {
257  } split_type_t;
258 
262  uint8_t bits;
263  uint8_t zones;
265  float zone_size;
266  };
267 
269  typedef enum {
275  } vcf_type_t;
276 
284  struct crossfade_t {
285  #if WORDS_BIGENDIAN
286  uint8_t out_end;
287  uint8_t out_start;
288  uint8_t in_end;
289  uint8_t in_start;
290  #else // little endian
291  uint8_t in_start;
292  uint8_t in_end;
293  uint8_t out_start;
294  uint8_t out_end;
295  #endif // WORDS_BIGENDIAN
296  };
297 
300  unsigned long position;
301  bool reverse;
302  unsigned long loop_cycles_left;
303  };
304 
317  struct progress_t {
318  void (*callback)(progress_t*);
319  float factor;
320  void* custom;
321  float __range_min;
322  float __range_max;
323  progress_t();
324  };
325 
326  // just symbol prototyping
327  class File;
328  class Instrument;
329  class Sample;
330  class Region;
331  class Group;
332 
345  class DimensionRegion : protected DLS::Sampler {
346  public:
349  // Sample Amplitude EG/LFO
350  uint16_t EG1PreAttack;
351  double EG1Attack;
352  double EG1Decay1;
353  double EG1Decay2;
355  uint16_t EG1Sustain;
356  double EG1Release;
357  bool EG1Hold;
363  double LFO1Frequency;
364  uint16_t LFO1InternalDepth;
365  uint16_t LFO1ControlDepth;
368  bool LFO1Sync;
369  // Filter Cutoff Frequency EG/LFO
370  uint16_t EG2PreAttack;
371  double EG2Attack;
372  double EG2Decay1;
373  double EG2Decay2;
375  uint16_t EG2Sustain;
376  double EG2Release;
382  double LFO2Frequency;
383  uint16_t LFO2InternalDepth;
384  uint16_t LFO2ControlDepth;
387  bool LFO2Sync;
388  // Sample Pitch EG/LFO
389  double EG3Attack;
390  int16_t EG3Depth;
391  double LFO3Frequency;
395  bool LFO3Sync;
396  // Filter
397  bool VCFEnabled;
401  uint8_t VCFCutoff;
405  uint8_t VCFResonance;
410  // Key Velocity Transformations
417  // Mix / Layer
419  bool PitchTrack;
421  int8_t Pan;
422  bool SelfMask;
426  uint8_t ChannelOffset;
428  bool MSDecode;
429  uint16_t SampleStartOffset;
431  uint8_t DimensionUpperLimits[8];
432 
433  // derived attributes from DLS::Sampler
439 
440  // own methods
441  double GetVelocityAttenuation(uint8_t MIDIKeyVelocity);
442  double GetVelocityRelease(uint8_t MIDIKeyVelocity);
443  double GetVelocityCutoff(uint8_t MIDIKeyVelocity);
445  void SetVelocityResponseDepth(uint8_t depth);
446  void SetVelocityResponseCurveScaling(uint8_t scaling);
448  void SetReleaseVelocityResponseDepth(uint8_t depth);
449  void SetVCFCutoffController(vcf_cutoff_ctrl_t controller);
450  void SetVCFVelocityCurve(curve_type_t curve);
451  void SetVCFVelocityDynamicRange(uint8_t range);
452  void SetVCFVelocityScale(uint8_t scaling);
453  Region* GetParent() const;
454  // derived methods
457  // overridden methods
458  virtual void SetGain(int32_t gain);
459  virtual void UpdateChunks();
460  protected:
461  uint8_t* VelocityTable;
462  DimensionRegion(Region* pParent, RIFF::List* _3ewl);
463  DimensionRegion(RIFF::List* _3ewl, const DimensionRegion& src);
465  friend class Region;
466  private:
467  typedef enum {
468  _lev_ctrl_none = 0x00,
469  _lev_ctrl_modwheel = 0x03,
470  _lev_ctrl_breath = 0x05,
471  _lev_ctrl_foot = 0x07,
472  _lev_ctrl_effect1 = 0x0d,
473  _lev_ctrl_effect2 = 0x0f,
474  _lev_ctrl_genpurpose1 = 0x11,
475  _lev_ctrl_genpurpose2 = 0x13,
476  _lev_ctrl_genpurpose3 = 0x15,
477  _lev_ctrl_genpurpose4 = 0x17,
478  _lev_ctrl_portamentotime = 0x0b,
479  _lev_ctrl_sustainpedal = 0x01,
480  _lev_ctrl_portamento = 0x19,
481  _lev_ctrl_sostenutopedal = 0x1b,
482  _lev_ctrl_softpedal = 0x09,
483  _lev_ctrl_genpurpose5 = 0x1d,
484  _lev_ctrl_genpurpose6 = 0x1f,
485  _lev_ctrl_genpurpose7 = 0x21,
486  _lev_ctrl_genpurpose8 = 0x23,
487  _lev_ctrl_effect1depth = 0x25,
488  _lev_ctrl_effect2depth = 0x27,
489  _lev_ctrl_effect3depth = 0x29,
490  _lev_ctrl_effect4depth = 0x2b,
491  _lev_ctrl_effect5depth = 0x2d,
492  _lev_ctrl_channelaftertouch = 0x2f,
493  _lev_ctrl_velocity = 0xff
494  } _lev_ctrl_t;
495  typedef std::map<uint32_t, double*> VelocityTableMap;
496 
497  static uint Instances;
498  static VelocityTableMap* pVelocityTables;
499  double* pVelocityAttenuationTable;
500  double* pVelocityReleaseTable;
501  double* pVelocityCutoffTable;
502  Region* pRegion;
503 
504  leverage_ctrl_t DecodeLeverageController(_lev_ctrl_t EncodedController);
505  _lev_ctrl_t EncodeLeverageController(leverage_ctrl_t DecodedController);
506  double* GetReleaseVelocityTable(curve_type_t releaseVelocityResponseCurve, uint8_t releaseVelocityResponseDepth);
507  double* GetCutoffVelocityTable(curve_type_t vcfVelocityCurve, uint8_t vcfVelocityDynamicRange, uint8_t vcfVelocityScale, vcf_cutoff_ctrl_t vcfCutoffController);
508  double* GetVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling);
509  double* CreateVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling);
510  };
511 
527  class Sample : public DLS::Sample {
528  public:
529  uint32_t Manufacturer;
530  uint32_t Product;
531  uint32_t SamplePeriod;
532  uint32_t MIDIUnityNote;
533  uint32_t FineTune;
535  uint32_t SMPTEOffset;
536  uint32_t Loops;
537  uint32_t LoopID;
539  uint32_t LoopStart;
540  uint32_t LoopEnd;
541  uint32_t LoopSize;
542  uint32_t LoopFraction;
543  uint32_t LoopPlayCount;
544  bool Compressed;
545  uint32_t TruncatedBits;
546  bool Dithered;
547 
548  // own methods
550  buffer_t LoadSampleData(unsigned long SampleCount);
551  buffer_t LoadSampleDataWithNullSamplesExtension(uint NullSamplesCount);
552  buffer_t LoadSampleDataWithNullSamplesExtension(unsigned long SampleCount, uint NullSamplesCount);
553  buffer_t GetCache();
554  // own static methods
555  static buffer_t CreateDecompressionBuffer(unsigned long MaxReadSize);
556  static void DestroyDecompressionBuffer(buffer_t& DecompressionBuffer);
557  // overridden methods
558  void ReleaseSampleData();
559  void Resize(int iNewSize);
560  unsigned long SetPos(unsigned long SampleCount, RIFF::stream_whence_t Whence = RIFF::stream_start);
561  unsigned long GetPos();
562  unsigned long Read(void* pBuffer, unsigned long SampleCount, buffer_t* pExternalDecompressionBuffer = NULL);
563  unsigned long ReadAndLoop(void* pBuffer, unsigned long SampleCount, playback_state_t* pPlaybackState, DimensionRegion* pDimRgn, buffer_t* pExternalDecompressionBuffer = NULL);
564  unsigned long Write(void* pBuffer, unsigned long SampleCount);
565  Group* GetGroup() const;
566  virtual void UpdateChunks();
567  protected:
568  static unsigned int Instances;
571  unsigned long FrameOffset;
572  unsigned long* FrameTable;
573  unsigned long SamplePos;
574  unsigned long SamplesInLastFrame;
575  unsigned long WorstCaseFrameSize;
576  unsigned long SamplesPerFrame;
578  unsigned long FileNo;
581  uint32_t crc;
582 
583  Sample(File* pFile, RIFF::List* waveList, unsigned long WavePoolOffset, unsigned long fileNo = 0);
584  ~Sample();
585 
586  // Guess size (in bytes) of a compressed sample
587  inline unsigned long GuessSize(unsigned long samples) {
588  // 16 bit: assume all frames are compressed - 1 byte
589  // per sample and 5 bytes header per 2048 samples
590 
591  // 24 bit: assume next best compression rate - 1.5
592  // bytes per sample and 13 bytes header per 256
593  // samples
594  const unsigned long size =
595  BitDepth == 24 ? samples + (samples >> 1) + (samples >> 8) * 13
596  : samples + (samples >> 10) * 5;
597  // Double for stereo and add one worst case sample
598  // frame
599  return (Channels == 2 ? size << 1 : size) + WorstCaseFrameSize;
600  }
601 
602  // Worst case amount of sample points that can be read with the
603  // given decompression buffer.
604  inline unsigned long WorstCaseMaxSamples(buffer_t* pDecompressionBuffer) {
605  return (unsigned long) ((float)pDecompressionBuffer->Size / (float)WorstCaseFrameSize * (float)SamplesPerFrame);
606  }
607  private:
608  void ScanCompressedSample();
609  friend class File;
610  friend class Region;
611  friend class Group; // allow to modify protected member pGroup
612  };
613 
614  // TODO: <3dnl> list not used yet - not important though (just contains optional descriptions for the dimensions)
616  class Region : public DLS::Region {
617  public:
618  unsigned int Dimensions;
620  uint32_t DimensionRegions;
622  unsigned int Layers;
623 
624  // own methods
625  DimensionRegion* GetDimensionRegionByValue(const uint DimValues[8]);
626  DimensionRegion* GetDimensionRegionByBit(const uint8_t DimBits[8]);
627  Sample* GetSample();
628  void AddDimension(dimension_def_t* pDimDef);
629  void DeleteDimension(dimension_def_t* pDimDef);
630  // overridden methods
631  virtual void SetKeyRange(uint16_t Low, uint16_t High);
632  virtual void UpdateChunks();
633  protected:
634  Region(Instrument* pInstrument, RIFF::List* rgnList);
635  void LoadDimensionRegions(RIFF::List* rgn);
636  void UpdateVelocityTable();
637  Sample* GetSampleFromWavePool(unsigned int WavePoolTableIndex, progress_t* pProgress = NULL);
638  ~Region();
639  friend class Instrument;
640  };
641 
643  class MidiRule {
644  public:
645  virtual ~MidiRule() { }
646  };
647 
649  class MidiRuleCtrlTrigger : public MidiRule {
650  public:
652  uint8_t Triggers;
653  struct trigger_t {
654  uint8_t TriggerPoint;
655  bool Descending;
656  uint8_t VelSensitivity;
657  uint8_t Key;
658  bool NoteOff;
659  uint8_t Velocity;
661  } pTriggers[32];
662 
663  protected:
665  friend class Instrument;
666  };
667 
669  class Instrument : protected DLS::Instrument {
670  public:
671  // derived attributes from DLS::Resource
674  // derived attributes from DLS::Instrument
681  // own attributes
682  int32_t Attenuation;
683  uint16_t EffectSend;
684  int16_t FineTune;
685  uint16_t PitchbendRange;
688 
689 
690  // derived methods from DLS::Resource
692  // overridden methods
695  Region* AddRegion();
696  void DeleteRegion(Region* pRegion);
697  virtual void UpdateChunks();
698  // own methods
699  Region* GetRegion(unsigned int Key);
700  MidiRule* GetMidiRule(int i);
701  protected:
703 
704  Instrument(File* pFile, RIFF::List* insList, progress_t* pProgress = NULL);
705  ~Instrument();
706  void UpdateRegionKeyTable();
707  friend class File;
708  friend class Region; // so Region can call UpdateRegionKeyTable()
709  private:
710  MidiRule** pMidiRules;
711  };
712 
728  class Group {
729  public:
731 
734  void AddSample(Sample* pSample);
735  protected:
736  Group(File* file, RIFF::Chunk* ck3gnm);
737  virtual ~Group();
738  virtual void UpdateChunks();
739  void MoveAll();
740  friend class File;
741  private:
742  File* pFile;
743  RIFF::Chunk* pNameChunk;
744  };
745 
747  class File : protected DLS::File {
748  public:
749  static const DLS::version_t VERSION_2;
750  static const DLS::version_t VERSION_3;
751 
752  // derived attributes from DLS::Resource
755  // derived attributes from DLS::File
758 
759  // derived methods from DLS::Resource
761  // derived methods from DLS::File
763  // overridden methods
764  File();
766  Sample* GetFirstSample(progress_t* pProgress = NULL);
767  Sample* GetNextSample();
768  Sample* AddSample();
769  void DeleteSample(Sample* pSample);
772  Instrument* GetInstrument(uint index, progress_t* pProgress = NULL);
774  void DeleteInstrument(Instrument* pInstrument);
775  Group* GetFirstGroup();
776  Group* GetNextGroup();
777  Group* GetGroup(uint index);
778  Group* AddGroup();
779  void DeleteGroup(Group* pGroup);
780  void DeleteGroupOnly(Group* pGroup);
781  void SetAutoLoad(bool b);
782  bool GetAutoLoad();
783  virtual ~File();
784  virtual void UpdateChunks();
785  protected:
786  // overridden protected methods from DLS::File
787  virtual void LoadSamples();
788  virtual void LoadInstruments();
789  virtual void LoadGroups();
790  // own protected methods
791  virtual void LoadSamples(progress_t* pProgress);
792  virtual void LoadInstruments(progress_t* pProgress);
793  void SetSampleChecksum(Sample* pSample, uint32_t crc);
794  friend class Region;
795  friend class Sample;
796  friend class Group; // so Group can access protected member pRIFF
797  private:
798  std::list<Group*>* pGroups;
799  std::list<Group*>::iterator GroupsIterator;
800  bool bAutoLoad;
801  };
802 
811  class Exception : public DLS::Exception {
812  public:
814  void PrintMessage();
815  };
816 
819 
820 } // namespace gig
821 
822 #endif // __GIG_H__
bool LFO2FlipPhase
Inverts phase of the filter cutoff LFO wave.
Definition: gig.h:386
void UpdateRegionKeyTable()
Definition: gig.cpp:3026
General Purpose Controller 4 (Slider, MIDI Controller 19)
Definition: gig.h:234
void MoveAll()
Move all members of this group to another group (preferably the 1st one except this).
Definition: gig.cpp:3274
dim_bypass_ctrl_t DimensionBypass
If defined, the MIDI controller can switch on/off the dimension in realtime.
Definition: gig.h:420
~Instrument()
Destructor.
Definition: gig.cpp:3038
Encapsulates articulation information of a dimension region.
Definition: gig.h:345
range_t DimensionKeyRange
0-127 (where 0 means C1 and 127 means G9)
Definition: gig.h:687
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:364
uint8_t VCFVelocityScale
(0-127) Amount velocity controls VCF cutoff frequency (only if no other VCF cutoff controller is defi...
Definition: gig.h:403
unsigned long FrameOffset
Current offset (sample points) in current sample frame (for decompression only).
Definition: gig.h:571
bool reverse
If playback direction is currently backwards (in case there is a pingpong or reverse loop defined)...
Definition: gig.h:301
Only controlled by aftertouch controller.
Definition: gig.h:117
25 frames per second
Definition: gig.h:93
uint32_t Regions
Reflects the number of Region defintions this Instrument has.
Definition: DLS.h:454
Region * GetRegion(unsigned int Key)
Returns the appropriate Region for a triggered note.
Definition: gig.cpp:3098
void AddSample(Sample *pSample)
Move Sample given by pSample from another Group to this Group.
Definition: gig.cpp:3264
virtual void UpdateChunks()
Apply dimension region settings to the respective RIFF chunks.
Definition: gig.cpp:1616
Effect Controller 2 (Coarse, MIDI Controller 13)
Definition: gig.h:146
Sample * AddSample()
Add a new sample.
Definition: gig.cpp:3380
bool VCFEnabled
If filter should be used.
Definition: gig.h:397
Controlled internally and by external modulation wheel.
Definition: gig.h:118
Controlled internally and by aftertouch controller.
Definition: gig.h:119
Parses DLS Level 1 and 2 compliant files and provides abstract access to the data.
Definition: DLS.h:482
no SMPTE offset
Definition: gig.h:91
void AddDimension(dimension_def_t *pDimDef)
Einstein would have dreamed of it - create a new dimension.
Definition: gig.cpp:2633
stream_whence_t
File stream position dependent to these relations.
Definition: RIFF.h:134
Soft Pedal (MIDI Controller 67)
Definition: gig.h:150
uint32_t FineTune
Specifies the fraction of a semitone up from the specified MIDI unity note field. A value of 0x800000...
Definition: gig.h:533
uint16_t LFO1ControlDepth
Controller depth influencing sample amplitude LFO pitch (0 - 1200 cents).
Definition: gig.h:365
lfo1_ctrl_t
Defines how LFO1 is controlled by.
Definition: gig.h:132
Group of Gigasampler objects.
Definition: gig.h:728
uint8_t VCFVelocityDynamicRange
0x04 = lowest, 0x00 = highest .
Definition: gig.h:404
String Name
Stores the name of this Group.
Definition: gig.h:730
DimensionRegion * GetDimensionRegionByBit(const uint8_t DimBits[8])
Returns the appropriate DimensionRegion for the given dimension bit numbers (zone index)...
Definition: gig.cpp:2890
Special dimension for triggering samples on releasing a key.
Definition: gig.h:219
uint16_t PitchbendRange
Number of semitones pitchbend controller can pitch (default is 2).
Definition: gig.h:685
virtual void UpdateChunks()
Apply all the gig file's current instruments, samples, groups and settings to the respective RIFF chu...
Definition: gig.cpp:3761
double EG1Release
Release time of the sample amplitude EG (0.000 - 60.000s).
Definition: gig.h:356
unsigned long ReadAndLoop(void *pBuffer, unsigned long SampleCount, playback_state_t *pPlaybackState, DimensionRegion *pDimRgn, buffer_t *pExternalDecompressionBuffer=NULL)
Reads SampleCount number of sample points from the position stored in pPlaybackState into the buffer ...
Definition: gig.cpp:850
virtual ~File()
Definition: gig.cpp:3348
Only internally controlled.
Definition: gig.h:115
uint8_t Triggers
Number of triggers.
Definition: gig.h:652
virtual void UpdateChunks()
Apply Instrument with all its Regions to the respective RIFF chunks.
Definition: gig.cpp:3054
vcf_type_t VCFType
Defines the general filter characteristic (lowpass, highpass, bandpass, etc.).
Definition: gig.h:398
Effect Controller 1 (Coarse, MIDI Controller 12)
Definition: gig.h:229
uint32_t LoopSize
Caution: Use the respective fields in the DimensionRegion instead of this one! (Intended purpose: Len...
Definition: gig.h:541
void(* callback)(progress_t *)
Callback function pointer which has to be assigned to a function for progress notification.
Definition: gig.h:318
Instrument * AddInstrument()
Add a new instrument definition.
Definition: gig.cpp:3548
Controlled internally and by external modulation wheel.
Definition: gig.h:127
loop_type_t LoopType
Caution: Use the respective field in the DimensionRegion instead of this one! (Intended purpose: The ...
Definition: gig.h:538
lfo1_ctrl_t LFO1Controller
MIDI Controller which controls sample amplitude LFO.
Definition: gig.h:366
Group * AddGroup()
Definition: gig.cpp:3671
Effect 2 Depth (MIDI Controller 92)
Definition: gig.h:244
Effect Controller 1 (Coarse, MIDI Controller 12)
Definition: gig.h:145
Only internally controlled.
Definition: gig.h:124
Sample * GetFirstSample()
Returns a pointer to the first Sample object of the file, NULL otherwise.
Definition: DLS.cpp:1298
uint8_t low
Low value of range.
Definition: gig.h:66
Modulation Wheel (MIDI Controller 1)
Definition: gig.h:225
Will be thrown whenever a DLS specific error occurs while trying to access a DLS File.
Definition: DLS.h:533
uint16_t SampleStartOffset
Number of samples the sample start should be moved (0 - 2000).
Definition: gig.h:429
MIDI rule for triggering notes by control change events.
Definition: gig.h:649
30 frames per second
Definition: gig.h:95
uint8_t Key
Key to trigger.
Definition: gig.h:657
unsigned long WorstCaseFrameSize
For compressed samples only: size (in bytes) of the largest possible sample frame.
Definition: gig.h:575
bool EG1Hold
If true, Decay1 stage should be postponed until the sample reached the sample loop start...
Definition: gig.h:357
RIFF::Chunk * pCk3gix
Definition: gig.h:579
dimension values are already the sought bit number
Definition: gig.h:256
uint8_t VelocityResponseCurveScaling
0 - 127 (usually you don't have to interpret this parameter, use GetVelocityAttenuation() instead)...
Definition: gig.h:413
bool Descending
If the change in CC value should be downwards.
Definition: gig.h:655
double GetVelocityCutoff(uint8_t MIDIKeyVelocity)
Definition: gig.cpp:2202
unsigned long Size
Size of the actual data in the buffer in bytes.
Definition: gig.h:73
Effect 1 Depth (MIDI Controller 91)
Definition: gig.h:243
Instrument * GetFirstInstrument()
Returns a pointer to the first Instrument object of the file, NULL otherwise.
Definition: gig.cpp:3491
Breath Controller (Coarse, MIDI Controller 2)
Definition: gig.h:147
Region * RegionKeyTable[128]
fast lookup for the corresponding Region of a MIDI key
Definition: gig.h:702
Sample(File *pFile, RIFF::List *waveList, unsigned long WavePoolOffset, unsigned long fileNo=0)
Constructor.
Definition: gig.cpp:369
For MIDI tools like legato and repetition mode.
Definition: gig.h:223
bool VCFKeyboardTracking
If true: VCF cutoff frequence will be dependend to the note key position relative to the defined brea...
Definition: gig.h:408
uint32_t WavePoolTableIndex
Definition: DLS.h:436
uint8_t Velocity
Velocity of the note to trigger. 255 means that velocity should depend on the speed of the controller...
Definition: gig.h:659
uint32_t crc
CRC-32 checksum of the raw sample data.
Definition: gig.h:581
Defines a controller that has a certain contrained influence on a particular synthesis parameter (use...
Definition: gig.h:173
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:389
void SetVCFVelocityScale(uint8_t scaling)
Updates the respective member variable and the lookup table / cache that depends on this value...
Definition: gig.cpp:2291
Defines Region information of an Instrument.
Definition: gig.h:616
Only controlled by external modulation wheel.
Definition: gig.h:125
unsigned long GetPos()
Returns the current position in the sample (in sample points).
Definition: gig.cpp:811
void UpdateVelocityTable()
Definition: gig.cpp:2548
unsigned long SamplesPerFrame
For compressed samples only: number of samples in a full sample frame.
Definition: gig.h:576
uint32_t LoopPlayCount
Number of times the loop should be played (a value of 0 = infinite).
Definition: gig.h:543
uint8_t ReleaseTriggerDecay
0 - 8
Definition: gig.h:416
lfo3_ctrl_t LFO3Controller
MIDI Controller which controls the sample pitch LFO.
Definition: gig.h:394
static unsigned int Instances
Number of instances of class Sample.
Definition: gig.h:568
uint32_t MIDIUnityNote
Specifies the musical note at which the sample will be played at it's original sample rate...
Definition: gig.h:532
int16_t FineTune
Definition: DLS.h:359
uint8_t ControllerNumber
MIDI controller number.
Definition: gig.h:651
Portamento (MIDI Controller 65)
Definition: gig.h:236
uint8_t ChannelOffset
Audio output where the audio signal of the dimension region should be routed to (0 - 9)...
Definition: gig.h:426
void Resize(int iNewSize)
Resize sample.
Definition: gig.cpp:751
General Purpose Controller 6 (Button, MIDI Controller 81)
Definition: gig.h:240
uint8_t VCFResonance
Firm internal filter resonance weight.
Definition: gig.h:405
bool VCFResonanceDynamic
If true: Increases the resonance Q according to changes of controllers that actually control the VCF ...
Definition: gig.h:406
unsigned int Dimensions
Number of defined dimensions, do not alter!
Definition: gig.h:618
Only controlled by external modulation wheel.
Definition: gig.h:116
vcf_cutoff_ctrl_t VCFCutoffController
Specifies which external controller has influence on the filter cutoff frequency. ...
Definition: gig.h:399
uint16_t MIDIBank
Reflects combination of MIDIBankCoarse and MIDIBankFine (bank 1 - bank 16384). Do not change this val...
Definition: DLS.h:450
Foot Pedal (Coarse, MIDI Controller 4)
Definition: gig.h:148
double EG1Decay1
Decay time of the sample amplitude EG (0.000 - 60.000s).
Definition: gig.h:352
float __range_min
Only for internal usage, do not modify!
Definition: gig.h:321
DimensionRegion * GetDimensionRegionByValue(const uint DimValues[8])
Use this method in your audio engine to get the appropriate dimension region with it's articulation d...
Definition: gig.cpp:2833
virtual void UpdateChunks()
Apply Region settings and all its DimensionRegions to the respective RIFF chunks. ...
Definition: gig.cpp:2460
lfo2_ctrl_t LFO2Controller
MIDI Controlle which controls the filter cutoff LFO.
Definition: gig.h:385
void LoadDimensionRegions(RIFF::List *rgn)
Definition: gig.cpp:2525
Different samples triggered each time a note is played, any key advances the counter.
Definition: gig.h:224
bool Dithered
For 24-bit compressed samples only: if dithering was used during compression with bit reduction...
Definition: gig.h:546
Region * GetFirstRegion()
Returns the first Region of the instrument.
Definition: gig.cpp:3116
String libraryVersion()
Returns version of this C++ library.
Definition: gig.cpp:3983
uint8_t VelocityUpperLimit
Defines the upper velocity value limit of a velocity split (only if an user defined limit was set...
Definition: gig.h:347
uint8_t ReleaseVelocityResponseDepth
Dynamic range of release velocity affecting envelope time (0 - 4).
Definition: gig.h:415
Will be thrown whenever a gig specific error occurs while trying to access a Gigasampler File...
Definition: gig.h:811
buffer_t LoadSampleDataWithNullSamplesExtension(uint NullSamplesCount)
Loads (and uncompresses if needed) the whole sample wave into RAM.
Definition: gig.cpp:640
Group * GetGroup() const
Returns pointer to the Group this Sample belongs to.
Definition: gig.cpp:1291
Instrument(File *pFile, RIFF::List *insList, progress_t *pProgress=NULL)
Definition: gig.cpp:2955
Used for indicating the progress of a certain task.
Definition: gig.h:317
uint8_t MIDIBankCoarse
Reflects the MIDI Bank number for MIDI Control Change 0 (bank 1 - 128).
Definition: DLS.h:451
uint8_t in_end
End position of fade in.
Definition: gig.h:292
void SetVCFCutoffController(vcf_cutoff_ctrl_t controller)
Updates the respective member variable and the lookup table / cache that depends on this value...
Definition: gig.cpp:2264
unsigned long WorstCaseMaxSamples(buffer_t *pDecompressionBuffer)
Definition: gig.h:604
static const DLS::version_t VERSION_2
Reflects Gigasampler file format version 2.0 (1998-06-28).
Definition: gig.h:749
Sample * pSample
Points to the Sample which is assigned to the dimension region.
Definition: gig.h:348
buffer_t LoadSampleData()
Loads (and uncompresses if needed) the whole sample wave into RAM.
Definition: gig.cpp:591
smpte_format_t
Society of Motion Pictures and Television E time format.
Definition: gig.h:90
uint32_t LoopStart
Caution: Use the respective field in the DimensionRegion instead of this one! (Intended purpose: The ...
Definition: gig.h:539
Group * GetNextGroup()
Returns a pointer to the next Group object of the file, NULL otherwise.
Definition: gig.cpp:3649
Loop forward (normal)
Definition: gig.h:84
void SetVCFVelocityCurve(curve_type_t curve)
Updates the respective member variable and the lookup table / cache that depends on this value...
Definition: gig.cpp:2273
double EG2Decay1
Decay time of the filter cutoff EG (0.000 - 60.000s).
Definition: gig.h:372
uint8_t EG1ControllerAttackInfluence
Amount EG1 Controller has influence on the EG1 Attack time (0 - 3, where 0 means off).
Definition: gig.h:360
unsigned long position
Current position within the sample.
Definition: gig.h:300
Only controlled by external foot controller.
Definition: gig.h:126
crossfade_t Crossfade
Definition: gig.h:418
void SetAutoLoad(bool b)
Enable / disable automatic loading.
Definition: gig.cpp:3942
MidiRule * GetMidiRule(int i)
Returns a MIDI rule of the instrument.
Definition: gig.cpp:3167
void DeleteSampleLoop(sample_loop_t *pLoopDef)
Deletes an existing sample loop.
Definition: DLS.cpp:598
smpte_format_t SMPTEFormat
Specifies the Society of Motion Pictures and Television E time format used in the following SMPTEOffs...
Definition: gig.h:534
double SampleAttenuation
Sample volume (calculated from DLS::Sampler::Gain)
Definition: gig.h:430
File()
Definition: gig.cpp:3326
lfo3_ctrl_t
Defines how LFO3 is controlled by.
Definition: gig.h:114
Channel Key Pressure.
Definition: gig.h:218
RIFF List Chunk.
Definition: RIFF.h:248
Sustain Pedal (MIDI Controller 64)
Definition: gig.h:149
double EG1Decay2
Only if EG1InfiniteSustain == false: 2nd decay stage time of the sample amplitude EG (0...
Definition: gig.h:353
bool PianoReleaseMode
Definition: gig.h:686
attenuation_ctrl_t AttenuationController
MIDI Controller which has influence on the volume level of the sample (or entire sample group)...
Definition: gig.h:423
float __range_max
Only for internal usage, do not modify!
Definition: gig.h:322
static buffer_t InternalDecompressionBuffer
Buffer used for decompression as well as for truncation of 24 Bit -> 16 Bit samples.
Definition: gig.h:569
static void DestroyDecompressionBuffer(buffer_t &DecompressionBuffer)
Free decompression buffer, previously created with CreateDecompressionBuffer().
Definition: gig.cpp:1274
Pointer address and size of a buffer.
Definition: gig.h:71
virtual void LoadSamples()
Definition: gig.cpp:3431
uint8_t in_start
Start position of fade in.
Definition: gig.h:291
unsigned long Read(void *pBuffer, unsigned long SampleCount, buffer_t *pExternalDecompressionBuffer=NULL)
Reads SampleCount number of sample points from the current position into the buffer pointed by pBuffe...
Definition: gig.cpp:1025
dimension_t dimension
Specifies which source (usually a MIDI controller) is associated with the dimension.
Definition: gig.h:261
Abstract base class which provides mandatory informations about sample players in general...
Definition: DLS.h:356
loop_type_t
Standard types of sample loops.
Definition: gig.h:83
Sustain Pedal (MIDI Controller 64)
Definition: gig.h:235
unsigned long SamplesInLastFrame
For compressed samples only: length of the last sample frame.
Definition: gig.h:574
bool EG2ControllerInvert
Invert values coming from defined EG2 controller.
Definition: gig.h:378
Group * GetFirstGroup()
Returns a pointer to the first Group object of the file, NULL otherwise.
Definition: gig.cpp:3642
Group * GetGroup(uint index)
Returns the group with the given index.
Definition: gig.cpp:3661
buffer_t()
Definition: gig.h:75
uint8_t VelSensitivity
How sensitive the velocity should be to the speed of the controller change.
Definition: gig.h:656
uint32_t DimensionRegions
Total number of DimensionRegions this Region contains, do not alter!
Definition: gig.h:620
std::string String
Definition: gig.h:62
bool MSDecode
Gigastudio flag: defines if Mid Side Recordings should be decoded.
Definition: gig.h:428
Key Velocity (this is the only dimension in gig2 where the ranges can exactly be defined).
Definition: gig.h:217
bool EG1InfiniteSustain
If true, instead of going into Decay2 phase, Decay1 level will be hold until note will be released...
Definition: gig.h:354
bool Compressed
If the sample wave is compressed (probably just interesting for instrument and sample editors...
Definition: gig.h:544
void ReleaseSampleData()
Frees the cached sample from RAM if loaded with LoadSampleData() previously.
Definition: gig.cpp:714
General Purpose Controller 3 (Slider, MIDI Controller 18)
Definition: gig.h:233
uint32_t SampleLoops
Reflects the number of sample loops.
Definition: DLS.h:363
More poles than normal lowpass.
Definition: gig.h:271
uint16_t LFO2InternalDepth
Firm pitch of the filter cutoff LFO (0 - 1200 cents).
Definition: gig.h:383
uint16_t LFO1InternalDepth
Firm pitch of the sample amplitude LFO (0 - 1200 cents).
Definition: gig.h:364
The difference between none and none2 is unknown.
Definition: gig.h:143
Controlled internally and by external breath controller.
Definition: gig.h:137
virtual void LoadInstruments()
Definition: gig.cpp:3586
float zone_size
Intended for internal usage: reflects the size of each zone (128/zones) for normal split types only...
Definition: gig.h:265
String Message
Definition: RIFF.h:344
Only controlled by external breath controller.
Definition: gig.h:135
bool PitchTrack
If true: sample will be pitched according to the key position (this will be disabled for drums for ex...
Definition: gig.h:419
double GetVelocityRelease(uint8_t MIDIKeyVelocity)
Definition: gig.cpp:2198
unsigned long Write(void *pBuffer, unsigned long SampleCount)
Write sample wave data.
Definition: gig.cpp:1214
unsigned int Layers
Amount of defined layers (1 - 32). A value of 1 actually means no layering, a value > 1 means there i...
Definition: gig.h:622
void * pStart
Points to the beginning of the buffer.
Definition: gig.h:72
bool EG2InfiniteSustain
If true, instead of going into Decay2 phase, Decay1 level will be hold until note will be released...
Definition: gig.h:374
Region * AddRegion()
Definition: gig.cpp:3136
General Purpose Controller 4 (Slider, MIDI Controller 19)
Definition: gig.h:160
unsigned long SamplePos
For compressed samples only: stores the current position (in sample points).
Definition: gig.h:573
Group * pGroup
pointer to the Group this sample belongs to (always not-NULL)
Definition: gig.h:570
virtual ~MidiRule()
Definition: gig.h:645
Effect 4 Depth (MIDI Controller 94)
Definition: gig.h:246
Breath Controller (Coarse, MIDI Controller 2)
Definition: gig.h:226
uint8_t EG2ControllerAttackInfluence
Amount EG2 Controller has influence on the EG2 Attack time (0 - 3, where 0 means off).
Definition: gig.h:379
Exception(String Message)
Definition: gig.cpp:3959
bool SelfMask
If true: high velocity notes will stop low velocity notes at the same note, with that you can save vo...
Definition: gig.h:422
int16_t LFO3ControlDepth
Controller depth of the sample pitch LFO (-1200 - +1200 cents).
Definition: gig.h:393
RIFF::Chunk * pCkSmpl
Definition: gig.h:580
Only controlled by external modulation wheel.
Definition: gig.h:134
double EG3Attack
Attack time of the sample pitch EG (0.000 - 10.000s).
Definition: gig.h:389
void DeleteDimension(dimension_def_t *pDimDef)
Delete an existing dimension.
Definition: gig.cpp:2733
Instrument * GetNextInstrument()
Returns a pointer to the next Instrument object of the file, NULL otherwise.
Definition: gig.cpp:3498
uint8_t out_end
End postition of fade out.
Definition: gig.h:294
void DeleteGroupOnly(Group *pGroup)
Delete a group.
Definition: gig.cpp:3713
double EG2Attack
Attack time of the filter cutoff EG (0.000 - 60.000s).
Definition: gig.h:371
uint16_t BitDepth
Size of each sample per channel (only if known sample data format is used, 0 otherwise).
Definition: DLS.h:393
bool InvertAttenuationController
Inverts the values coming from the defined Attenuation Controller.
Definition: gig.h:424
double LFO1Frequency
Frequency of the sample amplitude LFO (0.10 - 10.00 Hz).
Definition: gig.h:363
Ordinary RIFF Chunk.
Definition: RIFF.h:153
DimensionRegion(Region *pParent, RIFF::List *_3ewl)
Definition: gig.cpp:1314
uint32_t LoopID
Specifies the unique ID that corresponds to one of the defined cue points in the cue point list (only...
Definition: gig.h:537
uint16_t EffectSend
Definition: gig.h:683
virtual void UpdateChunks()
Update chunks with current group settings.
Definition: gig.cpp:3200
bool LFO1FlipPhase
Inverts phase of the sample amplitude LFO wave.
Definition: gig.h:367
void DeleteSample(Sample *pSample)
Delete a sample.
Definition: gig.cpp:3405
int16_t FineTune
in cents
Definition: gig.h:684
Region(Instrument *pInstrument, RIFF::List *rgnList)
Definition: gig.cpp:2367
uint8_t UnityNote
Definition: DLS.h:358
Effect 5 Depth (MIDI Controller 95)
Definition: gig.h:247
static buffer_t CreateDecompressionBuffer(unsigned long MaxReadSize)
Allocates a decompression buffer for streaming (compressed) samples with Sample::Read().
Definition: gig.cpp:1257
bool LFO3Sync
If set to true only one LFO should be used for all voices.
Definition: gig.h:395
uint32_t MIDIProgram
Specifies the MIDI Program Change Number this Instrument should be assigned to.
Definition: DLS.h:453
double LFO3Frequency
Frequency of the sample pitch LFO (0.10 - 10.00 Hz).
Definition: gig.h:391
static const DLS::version_t VERSION_3
Reflects Gigasampler file format version 3.0 (2003-03-31).
Definition: gig.h:750
void DeleteRegion(Region *pRegion)
Definition: gig.cpp:3150
Soft Pedal (MIDI Controller 67)
Definition: gig.h:238
DimensionRegion * pDimensionRegions[256]
Pointer array to the 32 (gig2) or 256 (gig3) possible dimension regions (reflects NULL for dimension ...
Definition: gig.h:621
uint32_t Product
Specifies the MIDI model ID defined by the manufacturer corresponding to the Manufacturer field...
Definition: gig.h:530
bool LFO1Sync
If set to true only one LFO should be used for all voices.
Definition: gig.h:368
split_type_t
Intended for internal usage: will be used to convert a dimension value into the corresponding dimensi...
Definition: gig.h:254
Alternating loop (forward/backward, also known as Ping Pong)
Definition: gig.h:85
unsigned long loop_cycles_left
How many times the loop has still to be passed, this value will be decremented with each loop cycle...
Definition: gig.h:302
~Sample()
Destructor.
Definition: gig.cpp:1295
void SetSampleChecksum(Sample *pSample, uint32_t crc)
Updates the 3crc chunk with the checksum of a sample.
Definition: gig.cpp:3619
Sample * GetNextSample()
Returns the next Sample of the Group.
Definition: gig.cpp:3253
leverage_ctrl_t eg2_ctrl_t
Defines controller influencing envelope generator 2.
Definition: gig.h:204
uint8_t EG2ControllerReleaseInfluence
Amount EG2 Controller has influence on the EG2 Release time (0 - 3, where 0 means off)...
Definition: gig.h:381
uint16_t EG2PreAttack
Preattack value of the filter cutoff EG (0 - 1000 permille).
Definition: gig.h:370
leverage_ctrl_t attenuation_ctrl_t
Defines controller influencing attenuation.
Definition: gig.h:190
uint32_t Loops
Caution: Use the respective field in the DimensionRegion instead of this one! (Intended purpose: Numb...
Definition: gig.h:536
bool LFO2Sync
If set to true only one LFO should be used for all voices.
Definition: gig.h:387
uint32_t SMPTEOffset
The SMPTE Offset value specifies the time offset to be used for the synchronization / calibration to ...
Definition: gig.h:535
unsigned long FileNo
File number (> 0 when sample is stored in an extension file, 0 when it's in the gig) ...
Definition: gig.h:578
bool EG1ControllerInvert
Invert values coming from defined EG1 controller.
Definition: gig.h:359
Ordinary MIDI control change controller, see field 'controller_number'.
Definition: gig.h:178
30 frames per second with frame dropping (30 drop)
Definition: gig.h:94
vcf_res_ctrl_t
Defines how the filter resonance is controlled by.
Definition: gig.h:157
vcf_type_t
Defines which frequencies are filtered by the VCF.
Definition: gig.h:269
General Purpose Controller 5 (Button, MIDI Controller 80)
Definition: gig.h:239
version_t * pVersion
Points to a version_t structure if the file provided a version number else is set to NULL...
Definition: DLS.h:484
void DeleteInstrument(Instrument *pInstrument)
Delete an instrument.
Definition: gig.cpp:3578
uint16_t LFO2ControlDepth
Controller depth influencing filter cutoff LFO pitch (0 - 1200).
Definition: gig.h:384
Loop backward (reverse)
Definition: gig.h:86
int16_t EG3Depth
Depth of the sample pitch EG (-1200 - +1200).
Definition: gig.h:390
bool GetAutoLoad()
Returns whether automatic loading is enabled.
Definition: gig.cpp:3950
uint8_t VCFKeyboardTrackingBreakpoint
See VCFKeyboardTracking (0 - 127).
Definition: gig.h:409
eg2_ctrl_t EG2Controller
MIDI Controller which has influence on filter cutoff EG parameters (attack, decay, release).
Definition: gig.h:377
For layering of up to 8 instruments (and eventually crossfading of 2 or 4 layers).
Definition: gig.h:216
bool VCFCutoffControllerInvert
Inverts values coming from the defined cutoff controller.
Definition: gig.h:400
General Purpose Controller 7 (Button, MIDI Controller 82)
Definition: gig.h:151
Controlled internally and by external foot controller.
Definition: gig.h:128
Different samples triggered each time a note is played, random order.
Definition: gig.h:222
void * custom
This pointer can be used for arbitrary data.
Definition: gig.h:320
double EG2Release
Release time of the filter cutoff EG (0.000 - 60.000s).
Definition: gig.h:376
uint8_t EG1ControllerReleaseInfluence
Amount EG1 Controller has influence on the EG1 Release time (0 - 3, where 0 means off)...
Definition: gig.h:362
float factor
Reflects current progress as value between 0.0 and 1.0.
Definition: gig.h:319
uint8_t EG2ControllerDecayInfluence
Amount EG2 Controller has influence on the EG2 Decay time (0 - 3, where 0 means off).
Definition: gig.h:380
~Region()
Destructor.
Definition: gig.cpp:2809
Abstract base class for all MIDI rules.
Definition: gig.h:643
void SetVelocityResponseCurveScaling(uint8_t scaling)
Updates the respective member variable and the lookup table / cache that depends on this value...
Definition: gig.cpp:2234
General Purpose Controller 2 (Slider, MIDI Controller 17)
Definition: gig.h:232
dimension_t
Defines the type of dimension, that is how the dimension zones (and thus how the dimension regions ar...
Definition: gig.h:213
uint32_t LoopEnd
Caution: Use the respective field in the DimensionRegion instead of this one! (Intended purpose: The ...
Definition: gig.h:540
Defines the envelope of a crossfade.
Definition: gig.h:284
uint8_t MIDIBankFine
Reflects the MIDI Bank number for MIDI Control Change 32 (bank 1 - 128).
Definition: DLS.h:452
curve_type_t ReleaseVelocityResponseCurve
Defines a transformation curve to the incoming release veloctiy values affecting envelope times...
Definition: gig.h:414
Different samples triggered each time a note is played, dimension regions selected in sequence...
Definition: gig.h:221
dimension_def_t pDimensionDefinitions[8]
Defines the five (gig2) or eight (gig3) possible dimensions (the dimension's controller and number of...
Definition: gig.h:619
uint8_t zones
Number of zones the dimension has.
Definition: gig.h:263
Effect 5 Depth (MIDI Controller 95)
Definition: gig.h:110
General Purpose Controller 3 (Slider, MIDI Controller 18)
Definition: gig.h:159
General Purpose Controller 8 (Button, MIDI Controller 83)
Definition: gig.h:152
uint8_t AttenuationControllerThreshold
0-127
Definition: gig.h:425
RIFF::File * pRIFF
Definition: DLS.h:505
buffer_t GetCache()
Returns current cached sample points.
Definition: gig.cpp:699
void SetVCFVelocityDynamicRange(uint8_t range)
Updates the respective member variable and the lookup table / cache that depends on this value...
Definition: gig.cpp:2282
vcf_cutoff_ctrl_t
Defines how the filter cutoff frequency is controlled by.
Definition: gig.h:141
No controller defined.
Definition: gig.h:175
Encapsulates sample waves used for playback.
Definition: gig.h:527
virtual void SetGain(int32_t gain)
Updates the respective member variable and updates SampleAttenuation which depends on this value...
Definition: gig.cpp:1604
RIFF File.
Definition: RIFF.h:295
Group(File *file, RIFF::Chunk *ck3gnm)
Constructor.
Definition: gig.cpp:3181
General Purpose Controller 8 (Button, MIDI Controller 83)
Definition: gig.h:242
unsigned long GuessSize(unsigned long samples)
Definition: gig.h:587
dimension value between 0-127
Definition: gig.h:255
24 frames per second
Definition: gig.h:92
Modulation Wheel (MIDI Controller 1)
Definition: gig.h:144
int16_t LFO3InternalDepth
Firm depth of the sample pitch LFO (-1200 - +1200 cents).
Definition: gig.h:392
General Purpose Controller 5 (Button, MIDI Controller 80)
Definition: gig.h:161
Lower and upper limit of a range.
Definition: gig.h:65
Sample * GetNextSample()
Returns a pointer to the next Sample object of the file, NULL otherwise.
Definition: gig.cpp:3367
virtual void Save()
Save changes to same file.
Definition: DLS.cpp:1522
General Purpose Controller 1 (Slider, MIDI Controller 16)
Definition: gig.h:231
double EG2Decay2
Only if EG2InfiniteSustain == false: 2nd stage decay time of the filter cutoff EG (0...
Definition: gig.h:373
Portamento Time (Coarse, MIDI Controller 5)
Definition: gig.h:228
int32_t Attenuation
in dB
Definition: gig.h:682
Encapsulates sample waves used for playback.
Definition: DLS.h:386
type_t type
Controller type.
Definition: gig.h:181
uint controller_number
MIDI controller number if this controller is a control change controller, 0 otherwise.
Definition: gig.h:182
uint8_t * VelocityTable
For velocity dimensions with custom defined zone ranges only: used for fast converting from velocity ...
Definition: gig.h:461
curve_type_t VelocityResponseCurve
Defines a transformation curve to the incoming velocity values affecting amplitude (usually you don't...
Definition: gig.h:411
Effect Controller 2 (Coarse, MIDI Controller 13)
Definition: gig.h:230
Foot Pedal (Coarse, MIDI Controller 4)
Definition: gig.h:227
void PrintMessage()
Definition: gig.cpp:3962
uint16_t EG1Sustain
Sustain value of the sample amplitude EG (0 - 1000 permille).
Definition: gig.h:355
unsigned long NullExtensionSize
The buffer might be bigger than the actual data, if that's the case that unused space at the end of t...
Definition: gig.h:74
void SetVelocityResponseDepth(uint8_t depth)
Updates the respective member variable and the lookup table / cache that depends on this value...
Definition: gig.cpp:2222
Sample * GetSampleFromWavePool(unsigned int WavePoolTableIndex, progress_t *pProgress=NULL)
Definition: gig.cpp:2914
General Purpose Controller 6 (Button, MIDI Controller 81)
Definition: gig.h:162
uint8_t DimensionUpperLimits[8]
gig3: defines the upper limit of the dimension values for this dimension region
Definition: gig.h:431
uint8_t TriggerPoint
The CC value to pass for the note to be triggered.
Definition: gig.h:654
uint8_t VelocityResponseDepth
Dynamic range of velocity affecting amplitude (0 - 4) (usually you don't have to interpret this param...
Definition: gig.h:412
uint32_t LoopFraction
The fractional value specifies a fraction of a sample at which to loop. This allows a loop to be fine...
Definition: gig.h:542
uint32_t TruncatedBits
For 24-bit compressed samples only: number of bits truncated during compression (0, 4 or 6)
Definition: gig.h:545
Instrument * GetInstrument(uint index, progress_t *pProgress=NULL)
Returns the instrument with the given index.
Definition: gig.cpp:3511
Resource * GetParent()
Definition: DLS.h:344
virtual void UpdateChunks()
Apply sample and its settings to the respective RIFF chunks.
Definition: gig.cpp:467
int8_t Pan
Panorama / Balance (-64..0..63 <-> left..middle..right)
Definition: gig.h:421
Parses Gigasampler files and provides abstract access to the data.
Definition: gig.h:747
Only internally controlled.
Definition: gig.h:133
lfo2_ctrl_t
Defines how LFO2 is controlled by.
Definition: gig.h:123
Effect 3 Depth (MIDI Controller 93)
Definition: gig.h:245
Dimension for keyswitching.
Definition: gig.h:220
virtual ~Group()
Definition: gig.cpp:3187
void SetReleaseVelocityResponseDepth(uint8_t depth)
Updates the respective member variable and the lookup table / cache that depends on this value...
Definition: gig.cpp:2255
Sample * GetFirstSample()
Returns the first Sample of this Group.
Definition: gig.cpp:3235
struct gig::MidiRuleCtrlTrigger::trigger_t pTriggers[32]
leverage_ctrl_t eg1_ctrl_t
Defines controller influencing envelope generator 1.
Definition: gig.h:197
uint16_t EG2Sustain
Sustain value of the filter cutoff EG (0 - 1000 permille).
Definition: gig.h:375
dlsid_t * pDLSID
Points to a dlsid_t structure if the file provided a DLS ID else is NULL.
Definition: DLS.h:342
uint32_t Instruments
Reflects the number of available Instrument objects.
Definition: DLS.h:485
Provides all neccessary information for the synthesis of a DLS Instrument.
Definition: DLS.h:447
Provides all neccessary information for the synthesis of an Instrument.
Definition: gig.h:669
void DeleteGroup(Group *pGroup)
Delete a group and its samples.
Definition: gig.cpp:3689
bool SustainDefeat
If true: Sustain pedal will not hold a note.
Definition: gig.h:427
buffer_t RAMCache
Buffers samples (already uncompressed) in RAM.
Definition: gig.h:577
bool NoteOff
If a note off should be triggered instead of a note on.
Definition: gig.h:658
String libraryName()
Returns the name of this C++ library.
Definition: gig.cpp:3975
int32_t Gain
Definition: DLS.h:360
Controlled internally and by external modulation wheel.
Definition: gig.h:136
virtual void LoadGroups()
Definition: gig.cpp:3724
Quadtuple version number ("major.minor.release.build").
Definition: DLS.h:125
double LFO2Frequency
Frequency of the filter cutoff LFO (0.10 - 10.00 Hz).
Definition: gig.h:382
uint32_t SamplePeriod
Specifies the duration of time that passes during the playback of one sample in nanoseconds (normally...
Definition: gig.h:531
uint16_t EG1PreAttack
Preattack value of the sample amplitude EG (0 - 1000 permille).
Definition: gig.h:350
Dimension not in use.
Definition: gig.h:214
unsigned long * FrameTable
For positioning within compressed samples only: stores the offset values for each frame...
Definition: gig.h:572
curve_type_t
Defines the shape of a function graph.
Definition: gig.h:99
uint8_t bits
Number of "bits" (1 bit = 2 splits/zones, 2 bit = 4 splits/zones, 3 bit = 8 splits/zones,...).
Definition: gig.h:262
uint8_t out_start
Start position of fade out.
Definition: gig.h:293
uint8_t VCFCutoff
Max. cutoff frequency.
Definition: gig.h:401
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: gig.cpp:2541
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: gig.cpp:777
Info * pInfo
Points (in any case) to an Info object, providing additional, optional infos and comments.
Definition: DLS.h:341
uint32_t Manufacturer
Specifies the MIDI Manufacturer's Association (MMA) Manufacturer code for the sampler intended to rec...
Definition: gig.h:529
uint8_t high
High value of range.
Definition: gig.h:67
bool OverridePedal
If a note off should be triggered even if the sustain pedal is down.
Definition: gig.h:660
Reflects the current playback state for a sample.
Definition: gig.h:299
Region * GetParent() const
Definition: gig.cpp:1949
General dimension definition.
Definition: gig.h:260
eg1_ctrl_t EG1Controller
MIDI Controller which has influence on sample amplitude EG parameters (attack, decay, release).
Definition: gig.h:358
Sostenuto Pedal (MIDI Controller 66)
Definition: gig.h:237
split_type_t split_type
Intended for internal usage: will be used to convert a dimension value into the corresponding dimensi...
Definition: gig.h:264
If used sample has more than one channel (thus is not mono).
Definition: gig.h:215
void SetReleaseVelocityResponseCurve(curve_type_t curve)
Updates the respective member variable and the lookup table / cache that depends on this value...
Definition: gig.cpp:2246
dim_bypass_ctrl_t
Dimensions allow to bypass one of the following controllers.
Definition: gig.h:107
vcf_res_ctrl_t VCFResonanceController
Specifies which external controller has influence on the filter resonance Q.
Definition: gig.h:407
curve_type_t VCFVelocityCurve
Defines a transformation curve for the incoming velocity values, affecting the VCF.
Definition: gig.h:402
uint8_t EG1ControllerDecayInfluence
Amount EG1 Controller has influence on the EG1 Decay time (0 - 3, where 0 means off).
Definition: gig.h:361
Defines Region information of an Instrument.
Definition: DLS.h:418
Effect 4 Depth (MIDI Controller 94)
Definition: gig.h:109
General Purpose Controller 7 (Button, MIDI Controller 82)
Definition: gig.h:241
double GetVelocityAttenuation(uint8_t MIDIKeyVelocity)
Returns the correct amplitude factor for the given MIDIKeyVelocity.
Definition: gig.cpp:2194
Sample * GetSample()
Returns pointer address to the Sample referenced with this region.
Definition: gig.cpp:2909
void SetVelocityResponseCurve(curve_type_t curve)
Updates the respective member variable and the lookup table / cache that depends on this value...
Definition: gig.cpp:2210
double EG1Attack
Attack time of the sample amplitude EG (0.000 - 60.000s).
Definition: gig.h:351
bool IsDrum
Indicates if the Instrument is a drum type, as they differ in the synthesis model of DLS from melodic...
Definition: DLS.h:449
MidiRuleCtrlTrigger(RIFF::Chunk *_3ewg)
Definition: gig.cpp:2933
Region * GetNextRegion()
Returns the next Region of the instrument.
Definition: gig.cpp:3130
void AddSampleLoop(sample_loop_t *pLoopDef)
Adds a new sample loop with the provided loop definition.
Definition: DLS.cpp:576