31 # define __has_feature(x) 0 34 # if __GXX_RTTI || __has_feature(cxx_rtti) || _CPPRTTI 43 # warning No RTTI available! 47 # define LIST_TYPE_3PRG 0x33707267 48 # define LIST_TYPE_3EWL 0x3365776C 49 # define LIST_TYPE_3GRI 0x33677269 50 # define LIST_TYPE_3GNL 0x33676E6C 51 # define LIST_TYPE_3LS 0x334c5320 // own gig format extension 52 # define LIST_TYPE_RTIS 0x52544953 // own gig format extension 53 # define CHUNK_ID_3GIX 0x33676978 54 # define CHUNK_ID_3EWA 0x33657761 55 # define CHUNK_ID_3LNK 0x336C6E6B 56 # define CHUNK_ID_3EWG 0x33657767 57 # define CHUNK_ID_EWAV 0x65776176 58 # define CHUNK_ID_3GNM 0x33676E6D 59 # define CHUNK_ID_EINF 0x65696E66 60 # define CHUNK_ID_3CRC 0x33637263 61 # define CHUNK_ID_SCRI 0x53637269 // own gig format extension 62 # define CHUNK_ID_LSNM 0x4c534e4d // own gig format extension 63 # define CHUNK_ID_SCSL 0x5343534c // own gig format extension 64 # define CHUNK_ID_LSDE 0x4c534445 // own gig format extension 65 #else // little endian 66 # define LIST_TYPE_3PRG 0x67727033 67 # define LIST_TYPE_3EWL 0x6C776533 68 # define LIST_TYPE_3GRI 0x69726733 69 # define LIST_TYPE_3GNL 0x6C6E6733 70 # define LIST_TYPE_3LS 0x20534c33 // own gig format extension 71 # define LIST_TYPE_RTIS 0x53495452 // own gig format extension 72 # define CHUNK_ID_3GIX 0x78696733 73 # define CHUNK_ID_3EWA 0x61776533 74 # define CHUNK_ID_3LNK 0x6B6E6C33 75 # define CHUNK_ID_3EWG 0x67776533 76 # define CHUNK_ID_EWAV 0x76617765 77 # define CHUNK_ID_3GNM 0x6D6E6733 78 # define CHUNK_ID_EINF 0x666E6965 79 # define CHUNK_ID_3CRC 0x63726333 80 # define CHUNK_ID_SCRI 0x69726353 // own gig format extension 81 # define CHUNK_ID_LSNM 0x4d4e534c // own gig format extension 82 # define CHUNK_ID_SCSL 0x4c534353 // own gig format extension 83 # define CHUNK_ID_LSDE 0x4544534c // own gig format extension 84 #endif // WORDS_BIGENDIAN 86 #ifndef GIG_DECLARE_ENUM 87 # define GIG_DECLARE_ENUM(type, ...) enum type { __VA_ARGS__ } 96 typedef std::string String;
122 GIG_DECLARE_ENUM(loop_type_t,
124 loop_type_bidirectional = 0x00000001,
125 loop_type_backward = 0x00000002
132 GIG_DECLARE_ENUM(smpte_format_t,
134 smpte_format_24_frames = 0x00000018,
135 smpte_format_25_frames = 0x00000019,
136 smpte_format_30_frames_dropping = 0x0000001D,
137 smpte_format_30_frames = 0x0000001E
144 GIG_DECLARE_ENUM(curve_type_t,
146 curve_type_linear = 1,
147 curve_type_special = 2,
148 curve_type_unknown = 0xffffffff
156 dim_bypass_ctrl_none,
165 GIG_DECLARE_ENUM(lfo3_ctrl_t,
167 lfo3_ctrl_modwheel = 0x01,
168 lfo3_ctrl_aftertouch = 0x02,
169 lfo3_ctrl_internal_modwheel = 0x03,
170 lfo3_ctrl_internal_aftertouch = 0x04
177 GIG_DECLARE_ENUM(lfo2_ctrl_t,
179 lfo2_ctrl_modwheel = 0x01,
180 lfo2_ctrl_foot = 0x02,
181 lfo2_ctrl_internal_modwheel = 0x03,
182 lfo2_ctrl_internal_foot = 0x04
189 GIG_DECLARE_ENUM(lfo1_ctrl_t,
191 lfo1_ctrl_modwheel = 0x01,
192 lfo1_ctrl_breath = 0x02,
193 lfo1_ctrl_internal_modwheel = 0x03,
194 lfo1_ctrl_internal_breath = 0x04
201 GIG_DECLARE_ENUM(vcf_cutoff_ctrl_t,
203 vcf_cutoff_ctrl_none2 = 0x01,
204 vcf_cutoff_ctrl_modwheel = 0x81,
205 vcf_cutoff_ctrl_effect1 = 0x8c,
206 vcf_cutoff_ctrl_effect2 = 0x8d,
207 vcf_cutoff_ctrl_breath = 0x82,
208 vcf_cutoff_ctrl_foot = 0x84,
209 vcf_cutoff_ctrl_sustainpedal = 0xc0,
210 vcf_cutoff_ctrl_softpedal = 0xc3,
211 vcf_cutoff_ctrl_genpurpose7 = 0xd2,
212 vcf_cutoff_ctrl_genpurpose8 = 0xd3,
213 vcf_cutoff_ctrl_aftertouch = 0x80
220 GIG_DECLARE_ENUM(vcf_res_ctrl_t,
222 vcf_res_ctrl_genpurpose3 = 0,
223 vcf_res_ctrl_genpurpose4 = 1,
224 vcf_res_ctrl_genpurpose5 = 2,
225 vcf_res_ctrl_genpurpose6 = 3
241 GIG_DECLARE_ENUM(type_t,
243 type_channelaftertouch = 0x2f,
244 type_velocity = 0xff,
245 type_controlchange = 0xfe
284 GIG_DECLARE_ENUM(dimension_t,
286 dimension_samplechannel = 0x80,
287 dimension_layer = 0x81,
288 dimension_velocity = 0x82,
289 dimension_channelaftertouch = 0x83,
290 dimension_releasetrigger = 0x84,
291 dimension_keyboard = 0x85,
292 dimension_roundrobin = 0x86,
293 dimension_random = 0x87,
294 dimension_smartmidi = 0x88,
295 dimension_roundrobinkeyboard = 0x89,
296 dimension_modwheel = 0x01,
297 dimension_breath = 0x02,
298 dimension_foot = 0x04,
299 dimension_portamentotime = 0x05,
300 dimension_effect1 = 0x0c,
301 dimension_effect2 = 0x0d,
302 dimension_genpurpose1 = 0x10,
303 dimension_genpurpose2 = 0x11,
304 dimension_genpurpose3 = 0x12,
305 dimension_genpurpose4 = 0x13,
306 dimension_sustainpedal = 0x40,
307 dimension_portamento = 0x41,
308 dimension_sostenutopedal = 0x42,
309 dimension_softpedal = 0x43,
310 dimension_genpurpose5 = 0x30,
311 dimension_genpurpose6 = 0x31,
312 dimension_genpurpose7 = 0x32,
313 dimension_genpurpose8 = 0x33,
314 dimension_effect1depth = 0x5b,
315 dimension_effect2depth = 0x5c,
316 dimension_effect3depth = 0x5d,
317 dimension_effect4depth = 0x5e,
318 dimension_effect5depth = 0x5f
345 GIG_DECLARE_ENUM(vcf_type_t,
347 vcf_type_lowpassturbo = 0xff,
348 vcf_type_bandpass = 0x01,
349 vcf_type_highpass = 0x02,
350 vcf_type_bandreject = 0x03
366 #else // little endian 371 #endif // WORDS_BIGENDIAN 559 using DLS::Sampler::UnityNote;
560 using DLS::Sampler::FineTune;
567 double GetVelocityRelease(uint8_t MIDIKeyVelocity);
568 double GetVelocityCutoff(uint8_t MIDIKeyVelocity);
578 Region* GetParent()
const;
583 virtual void SetGain(int32_t gain);
598 _lev_ctrl_none = 0x00,
599 _lev_ctrl_modwheel = 0x03,
600 _lev_ctrl_breath = 0x05,
601 _lev_ctrl_foot = 0x07,
602 _lev_ctrl_effect1 = 0x0d,
603 _lev_ctrl_effect2 = 0x0f,
604 _lev_ctrl_genpurpose1 = 0x11,
605 _lev_ctrl_genpurpose2 = 0x13,
606 _lev_ctrl_genpurpose3 = 0x15,
607 _lev_ctrl_genpurpose4 = 0x17,
608 _lev_ctrl_portamentotime = 0x0b,
609 _lev_ctrl_sustainpedal = 0x01,
610 _lev_ctrl_portamento = 0x19,
611 _lev_ctrl_sostenutopedal = 0x1b,
612 _lev_ctrl_softpedal = 0x09,
613 _lev_ctrl_genpurpose5 = 0x1d,
614 _lev_ctrl_genpurpose6 = 0x1f,
615 _lev_ctrl_genpurpose7 = 0x21,
616 _lev_ctrl_genpurpose8 = 0x23,
617 _lev_ctrl_effect1depth = 0x25,
618 _lev_ctrl_effect2depth = 0x27,
619 _lev_ctrl_effect3depth = 0x29,
620 _lev_ctrl_effect4depth = 0x2b,
621 _lev_ctrl_effect5depth = 0x2d,
622 _lev_ctrl_channelaftertouch = 0x2f,
623 _lev_ctrl_velocity = 0xff,
627 _lev_ctrl_CC3_EXT = 0x83,
629 _lev_ctrl_CC6_EXT = 0x86,
630 _lev_ctrl_CC7_EXT = 0x87,
631 _lev_ctrl_CC8_EXT = 0x88,
632 _lev_ctrl_CC9_EXT = 0x89,
633 _lev_ctrl_CC10_EXT = 0x8a,
634 _lev_ctrl_CC11_EXT = 0x8b,
636 _lev_ctrl_CC14_EXT = 0x8e,
637 _lev_ctrl_CC15_EXT = 0x8f,
639 _lev_ctrl_CC20_EXT = 0x94,
640 _lev_ctrl_CC21_EXT = 0x95,
641 _lev_ctrl_CC22_EXT = 0x96,
642 _lev_ctrl_CC23_EXT = 0x97,
643 _lev_ctrl_CC24_EXT = 0x98,
644 _lev_ctrl_CC25_EXT = 0x99,
645 _lev_ctrl_CC26_EXT = 0x9a,
646 _lev_ctrl_CC27_EXT = 0x9b,
647 _lev_ctrl_CC28_EXT = 0x9c,
648 _lev_ctrl_CC29_EXT = 0x9d,
649 _lev_ctrl_CC30_EXT = 0x9e,
650 _lev_ctrl_CC31_EXT = 0x9f,
652 _lev_ctrl_CC68_EXT = 0xc4,
653 _lev_ctrl_CC69_EXT = 0xc5,
654 _lev_ctrl_CC70_EXT = 0xc6,
655 _lev_ctrl_CC71_EXT = 0xc7,
656 _lev_ctrl_CC72_EXT = 0xc8,
657 _lev_ctrl_CC73_EXT = 0xc9,
658 _lev_ctrl_CC74_EXT = 0xca,
659 _lev_ctrl_CC75_EXT = 0xcb,
660 _lev_ctrl_CC76_EXT = 0xcc,
661 _lev_ctrl_CC77_EXT = 0xcd,
662 _lev_ctrl_CC78_EXT = 0xce,
663 _lev_ctrl_CC79_EXT = 0xcf,
665 _lev_ctrl_CC84_EXT = 0xd4,
666 _lev_ctrl_CC85_EXT = 0xd5,
667 _lev_ctrl_CC86_EXT = 0xd6,
668 _lev_ctrl_CC87_EXT = 0xd7,
670 _lev_ctrl_CC89_EXT = 0xd9,
671 _lev_ctrl_CC90_EXT = 0xda,
673 _lev_ctrl_CC96_EXT = 0xe0,
674 _lev_ctrl_CC97_EXT = 0xe1,
676 _lev_ctrl_CC102_EXT = 0xe6,
677 _lev_ctrl_CC103_EXT = 0xe7,
678 _lev_ctrl_CC104_EXT = 0xe8,
679 _lev_ctrl_CC105_EXT = 0xe9,
680 _lev_ctrl_CC106_EXT = 0xea,
681 _lev_ctrl_CC107_EXT = 0xeb,
682 _lev_ctrl_CC108_EXT = 0xec,
683 _lev_ctrl_CC109_EXT = 0xed,
684 _lev_ctrl_CC110_EXT = 0xee,
685 _lev_ctrl_CC111_EXT = 0xef,
686 _lev_ctrl_CC112_EXT = 0xf0,
687 _lev_ctrl_CC113_EXT = 0xf1,
688 _lev_ctrl_CC114_EXT = 0xf2,
689 _lev_ctrl_CC115_EXT = 0xf3,
690 _lev_ctrl_CC116_EXT = 0xf4,
691 _lev_ctrl_CC117_EXT = 0xf5,
692 _lev_ctrl_CC118_EXT = 0xf6,
693 _lev_ctrl_CC119_EXT = 0xf7
695 typedef std::map<uint32_t, double*> VelocityTableMap;
697 static size_t Instances;
698 static VelocityTableMap* pVelocityTables;
699 double* pVelocityAttenuationTable;
700 double* pVelocityReleaseTable;
701 double* pVelocityCutoffTable;
704 leverage_ctrl_t DecodeLeverageController(_lev_ctrl_t EncodedController);
705 _lev_ctrl_t EncodeLeverageController(
leverage_ctrl_t DecodedController);
706 double* GetReleaseVelocityTable(curve_type_t releaseVelocityResponseCurve, uint8_t releaseVelocityResponseDepth);
707 double* GetCutoffVelocityTable(curve_type_t vcfVelocityCurve, uint8_t vcfVelocityDynamicRange, uint8_t vcfVelocityScale, vcf_cutoff_ctrl_t vcfCutoffController);
708 double* GetVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling);
709 double* CreateVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling);
769 void Resize(file_offset_t NewSize);
771 file_offset_t
GetPos()
const;
772 file_offset_t
Read(
void* pBuffer, file_offset_t SampleCount,
buffer_t* pExternalDecompressionBuffer = NULL);
774 file_offset_t
Write(
void* pBuffer, file_offset_t SampleCount);
797 Sample(
File* pFile,
RIFF::List* waveList, file_offset_t WavePoolOffset,
unsigned long fileNo = 0,
int index = -1);
799 uint32_t CalculateWaveDataChecksum();
802 inline file_offset_t GuessSize(file_offset_t samples) {
809 const file_offset_t size =
810 BitDepth == 24 ? samples + (samples >> 1) + (samples >> 8) * 13
811 : samples + (samples >> 10) * 5;
819 inline file_offset_t WorstCaseMaxSamples(
buffer_t* pDecompressionBuffer) {
823 void ScanCompressedSample();
861 int GetDimensionRegionIndexByValue(
const uint DimValues[8]);
870 virtual void SetKeyRange(uint16_t Low, uint16_t High);
876 void UpdateVelocityTable();
877 Sample* GetSampleFromWavePool(
unsigned int WavePoolTableIndex,
progress_t* pProgress = NULL);
878 void CopyAssign(
const Region* orig,
const std::map<Sample*,Sample*>* mSamples);
930 virtual void UpdateChunks(uint8_t* pData)
const = 0;
952 uint8_t TriggerPoint;
954 uint8_t VelSensitivity;
964 void UpdateChunks(uint8_t* pData)
const;
1004 void UpdateChunks(uint8_t* pData)
const;
1031 const uint8_t& operator[](
int i)
const {
1034 uint8_t& operator[](
int i) {
1043 selector_key_switch,
1056 void UpdateChunks(uint8_t* pData)
const;
1076 void UpdateChunks(uint8_t* pData)
const { }
1127 void RemoveAllScriptReferences();
1133 std::vector<uint8_t> data;
1165 std::list<Script*>* pScripts;
1197 uint16_t EffectSend;
1200 bool PianoReleaseMode;
1205 using DLS::Resource::GetParent;
1210 void DeleteRegion(
Region* pRegion);
1236 void UpdateRegionKeyTable();
1238 void UpdateScriptFileOffsets();
1242 struct _ScriptPooolEntry {
1243 uint32_t fileOffset;
1246 struct _ScriptPooolRef {
1250 MidiRule** pMidiRules;
1251 std::vector<_ScriptPooolEntry> scriptPoolFileOffsets;
1252 std::vector<_ScriptPooolRef>* pScriptRefs;
1333 using DLS::Resource::GetParent;
1370 virtual void LoadSamples();
1371 virtual void LoadInstruments();
1372 virtual void LoadGroups();
1375 virtual void LoadSamples(
progress_t* pProgress);
1376 virtual void LoadInstruments(
progress_t* pProgress);
1377 virtual void LoadScriptGroups();
1379 uint32_t GetSampleChecksum(
Sample* pSample);
1380 uint32_t GetSampleChecksumByIndex(
int index);
1390 std::list<Group*>* pGroups;
1391 std::list<Group*>::iterator GroupsIterator;
1393 std::list<ScriptGroup*>* pScriptGroups;
1408 void PrintMessage();
1414 size_t enumCount(
const std::type_info& type);
1415 const char*
enumKey(
const std::type_info& type,
size_t value);
1416 bool enumKey(
const std::type_info& type, String key);
1417 const char**
enumKeys(
const std::type_info& type);
1420 const char*
enumKey(String typeName,
size_t value);
1421 bool enumKey(String typeName, String key);
1422 const char**
enumKeys(String typeName);
range_t KeySwitchRange
Key range for key switch selector.
lfo3_ctrl_internal
Defines how LFO3 is controlled by.
bool LFO2FlipPhase
Inverts phase of the filter cutoff LFO wave.
void SetScriptAsText(const String &text)
Replaces the current script with the new script source code text given by text.
void AddContentOf(File *pFile)
Add content of another existing file.
void MoveAll()
Move all members of this group to another group (preferably the 1st one except this).
dim_bypass_ctrl_t DimensionBypass
If defined, the MIDI controller can switch on/off the dimension in realtime.
file_offset_t position
Current position within the sample.
Encapsulates articulation informations of a dimension region.
dimension_none
Defines the type of dimension, that is how the dimension zones (and thus how the dimension regions ar...
range_t DimensionKeyRange
0-127 (where 0 means C1 and 127 means G9)
sample_loop_t * pSampleLoops
Points to the beginning of a sample loop array, or is NULL if there are no loops defined.
uint8_t VCFVelocityScale
(0-127) Amount velocity controls VCF cutoff frequency (only if no other VCF cutoff controller is defi...
void SetDimensionType(dimension_t oldType, dimension_t newType)
Change type of an existing dimension.
bool reverse
If playback direction is currently backwards (in case there is a pingpong or reverse loop defined).
uint8_t AltSustain2Key
Key triggering a second set of alternate sustain samples.
Destination container for serialization, and source container for deserialization.
file_offset_t FrameOffset
Current offset (sample points) in current sample frame (for decompression only).
uint32_t Regions
Reflects the number of Region defintions this Instrument has.
Region * GetRegion(unsigned int Key)
Returns the appropriate Region for a triggered note.
void AddSample(Sample *pSample)
Move Sample given by pSample from another Group to this Group.
String GetScriptAsText()
Returns the current script (i.e.
file_offset_t SamplePos
For compressed samples only: stores the current position (in sample points).
MidiRuleAlternator * AddMidiRuleAlternator()
Adds the alternator MIDI rule to the instrument.
split_type_normal split_type_t
Intended for internal usage: will be used to convert a dimension value into the corresponding dimensi...
vcf_res_ctrl_none
Defines how the filter resonance is controlled by.
Sample * AddSample()
Add a new sample.
file_offset_t SetPos(file_offset_t SampleCount, RIFF::stream_whence_t Whence=RIFF::stream_start)
Sets the position within the sample (in sample points, not in bytes).
bool VCFEnabled
If filter should be used.
Parses DLS Level 1 and 2 compliant files and provides abstract access to the data.
void AddDimension(dimension_def_t *pDimDef)
Einstein would have dreamed of it - create a new dimension.
stream_whence_t
File stream position dependent to these relations.
uint32_t FineTune
Specifies the fraction of a semitone up from the specified MIDI unity note field. A value of 0x800000...
uint8_t BypassKey
Key to be used to bypass the sustain note.
uint16_t LFO1ControlDepth
Controller depth influencing sample amplitude LFO pitch (0 - 1200 cents).
file_offset_t SamplesPerFrame
For compressed samples only: number of samples in a full sample frame.
Group of Gigasampler samples.
uint8_t VCFVelocityDynamicRange
0x04 = lowest, 0x00 = highest .
String Name
Stores the name of this Group.
DimensionRegion * GetDimensionRegionByBit(const uint8_t DimBits[8])
Returns the appropriate DimensionRegion for the given dimension bit numbers (zone index).
uint16_t PitchbendRange
Number of semitones pitchbend controller can pitch (default is 2).
double EG1Release
Release time of the sample amplitude EG (0.000 - 60.000s).
uint8_t Triggers
Number of triggers.
Defines behavior options for envelope generators (gig format extension).
vcf_type_t VCFType
Defines the general filter characteristic (lowpass, highpass, bandpass, etc.).
Script * AddScript()
Add new instrument script.
uint32_t LoopSize
Caution: Use the respective fields in the DimensionRegion instead of this one! (Intended purpose: Len...
Instrument * AddInstrument()
Add a new instrument definition.
Script * GetScript(uint index)
Get instrument script.
loop_type_t LoopType
Caution: Use the respective field in the DimensionRegion instead of this one! (Intended purpose: The ...
lfo1_ctrl_t LFO1Controller
MIDI Controller which controls sample amplitude LFO.
Sample * GetFirstSample()
Returns a pointer to the first Sample object of the file, NULL otherwise.
uint8_t low
Low value of range.
void UpdateChunks(progress_t *pProgress)
Apply this script group to the respective RIFF chunks.
Will be thrown whenever a DLS specific error occurs while trying to access a DLS File.
uint16_t SampleStartOffset
Number of samples the sample start should be moved (0 - 2000).
MIDI rule for triggering notes by control change events.
NKSP stands for "Is Not KSP" (default). Refer to the NKSP Reference Manual for details about this scr...
curve_type_nonlinear
Defines the shape of a function graph.
file_offset_t WorstCaseFrameSize
For compressed samples only: size (in bytes) of the largest possible sample frame.
file_offset_t Size
Size of the actual data in the buffer in bytes.
void AddScriptSlot(Script *pScript, bool bypass=false)
Add new instrument script slot (gig format extension).
bool EG1Hold
If true, Decay1 stage should be postponed until the sample reached the sample loop start.
range_t PlayRange
Key range of the playable keys in the instrument.
uint16_t ThresholdTime
Maximum time (ms) between two notes that should be played legato.
static size_t Instances
Number of instances of class Sample.
uint8_t VelocityResponseCurveScaling
0 - 127 (usually you don't have to interpret this parameter, use GetVelocityAttenuation() instead).
Group * GetGroup() const
Returns pointer to the Group this Sample belongs to.
Instrument * GetFirstInstrument()
Returns a pointer to the first Instrument object of the file, NULL otherwise.
Region * RegionKeyTable[128]
fast lookup for the corresponding Region of a MIDI key
uint8_t ReleaseTriggerKey
Key triggering release samples.
bool VCFKeyboardTracking
If true: VCF cutoff frequence will be dependend to the note key position relative to the defined brea...
void CopyAssignWave(const Sample *orig)
Should be called after CopyAssignMeta() and File::Save() sequence.
lfo2_ctrl_internal
Defines how LFO2 is controlled by.
uint32_t crc
Reflects CRC-32 checksum of the raw sample data at the last time when the sample's raw wave form data...
Defines a controller that has a certain contrained influence on a particular synthesis parameter (use...
uint16_t Channels
Number of channels represented in the waveform data, e.g. 1 for mono, 2 for stereo (defaults to 1=mon...
uint8_t Controller
CC number for controller selector.
void SetVCFVelocityScale(uint8_t scaling)
Updates the respective member variable and the lookup table / cache that depends on this value.
Defines Region information of a Gigasampler/GigaStudio instrument.
uint32_t LoopPlayCount
Number of times the loop should be played (a value of 0 = infinite).
uint8_t ReleaseTriggerDecay
0 - 8
lfo3_ctrl_t LFO3Controller
MIDI Controller which controls the sample pitch LFO.
lfo1_ctrl_internal
Defines how LFO1 is controlled by.
bool Chained
If all patterns should be chained together.
uint32_t MIDIUnityNote
Specifies the musical note at which the sample will be played at it's original sample rate.
uint8_t ControllerNumber
MIDI controller number.
uint8_t ChannelOffset
Audio output where the audio signal of the dimension region should be routed to (0 - 9).
uint8_t VCFResonance
Firm internal filter resonance weight.
Standard 8 bit US ASCII character encoding (default).
bool VCFResonanceDynamic
If true: Increases the resonance Q according to changes of controllers that actually control the VCF ...
Language_t Language
Programming language and dialect the script is written in.
void DeleteMidiRule(int i)
Deletes a MIDI rule from the instrument.
unsigned int Dimensions
Number of defined dimensions, do not alter!
vcf_cutoff_ctrl_t VCFCutoffController
Specifies which external controller has influence on the filter cutoff frequency.
file_offset_t loop_cycles_left
How many times the loop has still to be passed, this value will be decremented with each loop cycle.
bool VerifySampleChecksumTable()
Checks whether the file's "3CRC" chunk was damaged.
uint16_t MIDIBank
Reflects combination of MIDIBankCoarse and MIDIBankFine (bank 1 - bank 16384). Do not change this val...
MidiRuleCtrlTrigger * AddMidiRuleCtrlTrigger()
Adds the "controller trigger" MIDI rule to the instrument.
double EG1Decay1
Decay time of the sample amplitude EG (0.000 - 60.000s).
DimensionRegion * GetDimensionRegionByValue(const uint DimValues[8])
Use this method in your audio engine to get the appropriate dimension region with it's articulation d...
lfo2_ctrl_t LFO2Controller
MIDI Controlle which controls the filter cutoff LFO.
Compression_t Compression
Whether the script was/should be compressed, and if so, which compression algorithm shall be used.
bool Dithered
For 24-bit compressed samples only: if dithering was used during compression with bit reduction.
Region * GetFirstRegion()
Returns the first Region of the instrument.
String libraryVersion()
Returns version of this C++ library.
uint8_t VelocityUpperLimit
Defines the upper velocity value limit of a velocity split (only if an user defined limit was set,...
uint8_t ReleaseVelocityResponseDepth
Dynamic range of release velocity affecting envelope time (0 - 4).
const char * enumKey(const std::type_info &type, size_t value)
Enum constant name of numeric value.
Will be thrown whenever a gig specific error occurs while trying to access a Gigasampler File.
buffer_t LoadSampleDataWithNullSamplesExtension(uint NullSamplesCount)
Loads (and uncompresses if needed) the whole sample wave into RAM.
void UpdateChunks(progress_t *pProgress)
Apply this script to the respective RIFF chunks.
uint8_t MIDIBankCoarse
Reflects the MIDI Bank number for MIDI Control Change 0 (bank 1 - 128).
uint8_t in_end
End position of fade in.
void SetVCFCutoffController(vcf_cutoff_ctrl_t controller)
Updates the respective member variable and the lookup table / cache that depends on this value.
static const DLS::version_t VERSION_2
Reflects Gigasampler file format version 2.0 (1998-06-28).
Sample * pSample
Points to the Sample which is assigned to the dimension region.
size_t enumValue(String key)
Numeric value of enum constant.
buffer_t LoadSampleData()
Loads (and uncompresses if needed) the whole sample wave into RAM.
uint16_t ReleaseTime
Release time.
uint32_t LoopStart
Caution: Use the respective field in the DimensionRegion instead of this one! (Intended purpose: The ...
Group * GetNextGroup()
Returns a pointer to the next Group object of the file, NULL otherwise.
void SetVCFVelocityCurve(curve_type_t curve)
Updates the respective member variable and the lookup table / cache that depends on this value.
double EG2Decay1
Decay time of the filter cutoff EG (0.000 - 60.000s).
uint8_t EG1ControllerAttackInfluence
Amount EG1 Controller has influence on the EG1 Attack time (0 - 3, where 0 means off).
String pArticulations[32]
Names of the articulations.
void SetAutoLoad(bool b)
Enable / disable automatic loading.
MidiRule * GetMidiRule(int i)
Returns a MIDI rule of the instrument.
void DeleteSampleLoop(sample_loop_t *pLoopDef)
Deletes an existing sample loop.
smpte_format_t SMPTEFormat
Specifies the Society of Motion Pictures and Television E time format used in the following SMPTEOffs...
double SampleAttenuation
Sample volume (calculated from DLS::Sampler::Gain)
bool ReleaseCancel
Whether the "release" stage is cancelled when receiving a note-on (default: true).
double EG1Decay2
Only if EG1InfiniteSustain == false: 2nd decay stage time of the sample amplitude EG (0....
void RemoveScript(Script *pScript)
Remove reference to given Script (gig format extension).
uint8_t BypassController
Controller to be used to bypass the sustain note.
attenuation_ctrl_t AttenuationController
MIDI Controller which has influence on the volume level of the sample (or entire sample group).
static buffer_t InternalDecompressionBuffer
Buffer used for decompression as well as for truncation of 24 Bit -> 16 Bit samples.
static void DestroyDecompressionBuffer(buffer_t &DecompressionBuffer)
Free decompression buffer, previously created with CreateDecompressionBuffer().
Pointer address and size of a buffer.
bool Decay1Cancel
Whether the "decay 1" stage is cancelled when receiving a note-off (default: true).
uint8_t in_start
Start position of fade in.
uint8_t Patterns
Number of alternator patterns.
dimension_t dimension
Specifies which source (usually a MIDI controller) is associated with the dimension.
bool Bypass
Global bypass: if enabled, this script shall not be executed by the sampler for any instrument.
Abstract base class which provides mandatory informations about sample players in general.
range_t KeyRange
Key range for legato notes.
bool EG2ControllerInvert
Invert values coming from defined EG2 controller.
uint8_t Articulations
Number of articulations in the instrument.
Group * GetFirstGroup()
Returns a pointer to the first Group object of the file, NULL otherwise.
eg_opt_t EG2Options
[gig extension]: Behavior options which should be used for envelope generator 2 (filter cutoff EG).
Group * GetGroup(uint index)
Returns the group with the given index.
String Name
Arbitrary name of the script, which may be displayed i.e. in an instrument editor.
uint32_t DimensionRegions
Total number of DimensionRegions this Region contains, do not alter!
Instrument * AddDuplicateInstrument(const Instrument *orig)
Add a duplicate of an existing instrument.
uint ScriptSlotCount() const
Instrument's amount of script slots.
bool MSDecode
Gigastudio flag: defines if Mid Side Recordings should be decoded.
bool EG1InfiniteSustain
If true, instead of going into Decay2 phase, Decay1 level will be hold until note will be released.
bool Compressed
If the sample wave is compressed (probably just interesting for instrument and sample editors,...
void ReleaseSampleData()
Frees the cached sample from RAM if loaded with LoadSampleData() previously.
void SetFileName(const String &name)
You may call this method store a future file name, so you don't have to to pass it to the Save() call...
uint32_t SampleLoops
Reflects the number of sample loops.
virtual void Save(const String &Path, progress_t *pProgress=NULL)
Save changes to another file.
uint16_t LFO2InternalDepth
Firm pitch of the filter cutoff LFO (0 - 1200 cents).
void DeleteDimensionZone(dimension_t type, int zone)
Delete one split zone of a dimension (decrement zone amount).
uint16_t LFO1InternalDepth
Firm pitch of the sample amplitude LFO (0 - 1200 cents).
static buffer_t CreateDecompressionBuffer(file_offset_t MaxReadSize)
Allocates a decompression buffer for streaming (compressed) samples with Sample::Read().
float zone_size
Intended for internal usage: reflects the size of each zone (128/zones) for normal split types only,...
virtual void UpdateFileOffsets()
Updates all file offsets stored all over the file.
void Resize(file_offset_t NewSize)
Resize sample.
bool PitchTrack
If true: sample will be pitched according to the key position (this will be disabled for drums for ex...
uint64_t file_offset_t
Type used by libgig for handling file positioning during file I/O tasks.
bool BypassUseController
If a controller should be used to bypass the sustain note.
unsigned int Layers
Amount of defined layers (1 - 32). A value of 1 actually means no layering, a value > 1 means there i...
void * pStart
Points to the beginning of the buffer.
bool EG2InfiniteSustain
If true, instead of going into Decay2 phase, Decay1 level will be hold until note will be released.
Group * pGroup
pointer to the Group this sample belongs to (always not-NULL)
struct gig::MidiRuleAlternator::pattern_t pPatterns[32]
A pattern is a sequence of articulation numbers.
file_offset_t GetPos() const
Returns the current position in the sample (in sample points).
MidiRuleLegato * AddMidiRuleLegato()
Adds the legato MIDI rule to the instrument.
uint8_t EG2ControllerAttackInfluence
Amount EG2 Controller has influence on the EG2 Attack time (0 - 3, where 0 means off).
bool SelfMask
If true: high velocity notes will stop low velocity notes at the same note, with that you can save vo...
int16_t LFO3ControlDepth
Controller depth of the sample pitch LFO (-1200 - +1200 cents).
void RemoveScriptSlot(uint index)
Remove script slot.
double EG3Attack
Attack time of the sample pitch EG (0.000 - 10.000s).
void DeleteDimension(dimension_def_t *pDimDef)
Delete an existing dimension.
Instrument * GetNextInstrument()
Returns a pointer to the next Instrument object of the file, NULL otherwise.
uint8_t LegatoSamples
Number of legato samples per key in each direction (always 12)
uint8_t out_end
End postition of fade out.
void DeleteGroupOnly(Group *pGroup)
Delete a group.
double EG2Attack
Attack time of the filter cutoff EG (0.000 - 60.000s).
uint16_t BitDepth
Size of each sample per channel (only if known sample data format is used, 0 otherwise).
bool InvertAttenuationController
Inverts the values coming from the defined Attenuation Controller.
vcf_cutoff_ctrl_none
Defines how the filter cutoff frequency is controlled by.
double LFO1Frequency
Frequency of the sample amplitude LFO (0.10 - 10.00 Hz).
uint32_t LoopID
Specifies the unique ID that corresponds to one of the defined cue points in the cue point list (only...
type_none
Defines possible controllers.
bool LFO1FlipPhase
Inverts phase of the sample amplitude LFO wave.
uint8_t AltSustain1Key
Key triggering alternate sustain samples.
void DeleteSample(Sample *pSample)
Delete a sample.
bool LFO3Sync
If set to true only one LFO should be used for all voices.
uint32_t MIDIProgram
Specifies the MIDI Program Change Number this Instrument should be assigned to.
bool IsScriptSlotBypassed(uint index)
Whether script execution shall be skipped.
loop_type_normal
Standard types of sample loops.
double LFO3Frequency
Frequency of the sample pitch LFO (0.10 - 10.00 Hz).
static const DLS::version_t VERSION_3
Reflects Gigasampler file format version 3.0 (2003-03-31).
ScriptGroup * AddScriptGroup()
Add new instrument script group.
DimensionRegion * pDimensionRegions[256]
Pointer array to the 32 (gig2) or 256 (gig3) possible dimension regions (reflects NULL for dimension ...
uint32_t Product
Specifies the MIDI model ID defined by the manufacturer corresponding to the Manufacturer field....
bool LFO1Sync
If set to true only one LFO should be used for all voices.
ScriptGroup * GetScriptGroup(uint index)
Get instrument script group (by index).
bool RebuildSampleChecksumTable()
Recalculates CRC32 checksums for all samples and rebuilds this gig file's checksum table with those n...
void SetSampleChecksum(Sample *pSample, uint32_t crc)
Updates the 3crc chunk with the checksum of a sample.
Sample * GetNextSample()
Returns the next Sample of the Group.
leverage_ctrl_t eg2_ctrl_t
Defines controller influencing envelope generator 2.
uint8_t EG2ControllerReleaseInfluence
Amount EG2 Controller has influence on the EG2 Release time (0 - 3, where 0 means off).
size_t enumCount(const std::type_info &type)
Amount of elements in given enum type.
Used for indicating the progress of a certain task.
file_offset_t ReadAndLoop(void *pBuffer, file_offset_t 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 ...
uint16_t EG2PreAttack
Preattack value of the filter cutoff EG (0 - 1000 permille).
leverage_ctrl_t attenuation_ctrl_t
Defines controller influencing attenuation.
uint32_t Loops
Caution: Use the respective field in the DimensionRegion instead of this one! (Intended purpose: Numb...
bool LFO2Sync
If set to true only one LFO should be used for all voices.
uint32_t SMPTEOffset
The SMPTE Offset value specifies the time offset to be used for the synchronization / calibration to ...
uint32_t GetWaveDataCRC32Checksum()
Returns the CRC-32 checksum of the sample's raw wave form data at the time when this sample's wave fo...
unsigned long FileNo
File number (> 0 when sample is stored in an extension file, 0 when it's in the gig)
void SplitDimensionZone(dimension_t type, int zone)
Divide split zone of a dimension in two (increment zone amount).
bool EG1ControllerInvert
Invert values coming from defined EG1 controller.
dim_bypass_ctrl_none dim_bypass_ctrl_t
Dimensions allow to bypass one of the following controllers.
Sample(File *pFile, RIFF::List *waveList, file_offset_t WavePoolOffset, unsigned long fileNo=0, int index=-1)
Constructor.
version_t * pVersion
Points to a version_t structure if the file provided a version number else is set to NULL.
void DeleteInstrument(Instrument *pInstrument)
Delete an instrument.
uint16_t LFO2ControlDepth
Controller depth influencing filter cutoff LFO pitch (0 - 1200).
virtual void UpdateChunks(progress_t *pProgress)
Update chunks with current group settings.
bool AttackHoldCancel
Whether the "attack hold" stage is cancelled when receiving a note-off (default: true).
String Name
Name of this script group. For example to be displayed in an instrument editor.
file_offset_t * FrameTable
For positioning within compressed samples only: stores the offset values for each frame.
file_offset_t Write(void *pBuffer, file_offset_t SampleCount)
Write sample wave data.
int16_t EG3Depth
Depth of the sample pitch EG (-1200 - +1200).
bool GetAutoLoad()
Returns whether automatic loading is enabled.
uint8_t VCFKeyboardTrackingBreakpoint
See VCFKeyboardTracking (0 - 127).
eg2_ctrl_t EG2Controller
MIDI Controller which has influence on filter cutoff EG parameters (attack, decay,...
bool VCFCutoffControllerInvert
Inverts values coming from the defined cutoff controller.
file_offset_t NullExtensionSize
The buffer might be bigger than the actual data, if that's the case that unused space at the end of t...
virtual void CopyAssign(const Region *orig)
Make a (semi) deep copy of the Region object given by orig and assign it to this object.
void SwapScriptSlots(uint index1, uint index2)
Flip two script slots with each other (gig format extension).
double EG2Release
Release time of the filter cutoff EG (0.000 - 60.000s).
uint8_t EG1ControllerReleaseInfluence
Amount EG1 Controller has influence on the EG1 Release time (0 - 3, where 0 means off).
uint8_t EG2ControllerDecayInfluence
Amount EG2 Controller has influence on the EG2 Decay time (0 - 3, where 0 means off).
bool Polyphonic
If alternator should step forward only when all notes are off.
Abstract base class for all MIDI rules.
ScriptGroup * GetGroup() const
Returns the script group this script currently belongs to.
void SetVelocityResponseCurveScaling(uint8_t scaling)
Updates the respective member variable and the lookup table / cache that depends on this value.
virtual void UpdateChunks(progress_t *pProgress)
Apply all the gig file's current instruments, samples, groups and settings to the respective RIFF chu...
file_offset_t SamplesInLastFrame
For compressed samples only: length of the last sample frame.
uint32_t LoopEnd
Caution: Use the respective field in the DimensionRegion instead of this one! (Intended purpose: The ...
bool AttackCancel
Whether the "attack" stage is cancelled when receiving a note-off (default: true).
Defines the envelope of a crossfade.
uint8_t MIDIBankFine
Reflects the MIDI Bank number for MIDI Control Change 32 (bank 1 - 128).
curve_type_t ReleaseVelocityResponseCurve
Defines a transformation curve to the incoming release veloctiy values affecting envelope times.
dimension_def_t pDimensionDefinitions[8]
Defines the five (gig2) or eight (gig3) possible dimensions (the dimension's controller and number of...
uint8_t zones
Number of zones the dimension has.
vcf_type_lowpass
Defines which frequencies are filtered by the VCF.
uint8_t AttenuationControllerThreshold
0-127
buffer_t GetCache()
Returns current cached sample points.
void SetVCFVelocityDynamicRange(uint8_t range)
Updates the respective member variable and the lookup table / cache that depends on this value.
Encapsulates sample waves of Gigasampler/GigaStudio files used for playback.
virtual void SetGain(int32_t gain)
Updates the respective member variable and updates SampleAttenuation which depends on this value.
Group(File *file, RIFF::Chunk *ck3gnm)
Constructor.
file_offset_t Read(void *pBuffer, file_offset_t SampleCount, buffer_t *pExternalDecompressionBuffer=NULL)
Reads SampleCount number of sample points from the current position into the buffer pointed by pBuffe...
int16_t LFO3InternalDepth
Firm depth of the sample pitch LFO (-1200 - +1200 cents).
virtual void UpdateChunks(progress_t *pProgress)
Apply dimension region settings to the respective RIFF chunks.
Lower and upper limit of a range.
Sample * GetNextSample()
Returns a pointer to the next Sample object of the file, NULL otherwise.
double EG2Decay2
Only if EG2InfiniteSustain == false: 2nd stage decay time of the filter cutoff EG (0....
virtual void UpdateChunks(progress_t *pProgress)
Apply Instrument with all its Regions to the respective RIFF chunks.
Encapsulates sample waves used for playback.
type_t type
Controller type.
uint controller_number
MIDI controller number if this controller is a control change controller, 0 otherwise.
uint8_t * VelocityTable
For velocity dimensions with custom defined zone ranges only: used for fast converting from velocity ...
curve_type_t VelocityResponseCurve
Defines a transformation curve to the incoming velocity values affecting amplitude (usually you don't...
A MIDI rule not yet implemented by libgig.
uint16_t EG1Sustain
Sustain value of the sample amplitude EG (0 - 1000 permille).
Sample * GetSample(uint index)
Returns Sample object of index.
String GetFileName()
File name of this DLS file.
Real-time instrument script (gig format extension).
void SetVelocityResponseDepth(uint8_t depth)
Updates the respective member variable and the lookup table / cache that depends on this value.
smpte_format_no_offset
Society of Motion Pictures and Television E time format.
Gigasampler/GigaStudio specific classes and definitions.
uint8_t DimensionUpperLimits[8]
gig3: defines the upper limit of the dimension values for this dimension region. In case you wondered...
virtual void CopyAssign(const DimensionRegion *orig)
Make a (semi) deep copy of the DimensionRegion object given by orig and assign it to this object.
virtual void UpdateChunks(progress_t *pProgress)
Apply Region settings and all its DimensionRegions to the respective RIFF chunks.
uint8_t VelocityResponseDepth
Dynamic range of velocity affecting amplitude (0 - 4) (usually you don't have to interpret this param...
uint32_t LoopFraction
The fractional value specifies a fraction of a sample at which to loop. This allows a loop to be fine...
uint32_t TruncatedBits
For 24-bit compressed samples only: number of bits truncated during compression (0,...
Instrument * GetInstrument(uint index, progress_t *pProgress=NULL)
Returns the instrument with the given index.
const char ** enumKeys(const std::type_info &type)
All element names of enum type.
Group of instrument scripts (gig format extension).
int8_t Pan
Panorama / Balance (-64..0..63 <-> left..middle..right)
Provides convenient access to Gigasampler/GigaStudio .gig files.
void SetGroup(ScriptGroup *pGroup)
Move this script from its current ScriptGroup to another ScriptGroup given by pGroup.
MIDI rule for instruments with legato samples.
void SetReleaseVelocityResponseDepth(uint8_t depth)
Updates the respective member variable and the lookup table / cache that depends on this value.
Sample * GetFirstSample()
Returns the first Sample of this Group.
dimension_def_t * GetDimensionDefinition(dimension_t type)
Searches in the current Region for a dimension of the given dimension type and returns the precise co...
bool VerifyWaveData(uint32_t *pActually=NULL)
Checks the integrity of this sample's raw audio wave data.
leverage_ctrl_t eg1_ctrl_t
Defines controller influencing envelope generator 1.
uint16_t EG2Sustain
Sustain value of the filter cutoff EG (0 - 1000 permille).
dlsid_t * pDLSID
Points to a dlsid_t structure if the file provided a DLS ID else is NULL.
uint32_t Instruments
Reflects the number of available Instrument objects.
Provides all neccessary information for the synthesis of a DLS Instrument.
Provides access to a Gigasampler/GigaStudio instrument.
void SetScriptSlotBypassed(uint index, bool bBypass)
Defines whether execution shall be skipped.
void DeleteGroup(Group *pGroup)
Delete a group and its samples.
bool SustainDefeat
If true: Sustain pedal will not hold a note.
Encoding_t Encoding
Format the script's source code text is encoded with.
buffer_t RAMCache
Buffers samples (already uncompressed) in RAM.
virtual void CopyAssign(const Instrument *orig)
Make a (semi) deep copy of the Instrument object given by orig and assign it to this object.
String libraryName()
Returns the name of this C++ library.
Quadtuple version number ("major.minor.release.build").
Serialization / deserialization framework.
bool Decay2Cancel
Whether the "decay 2" stage is cancelled when receiving a note-off (default: true).
void MoveTo(Instrument *dst)
Move this instrument at the position before.
double LFO2Frequency
Frequency of the filter cutoff LFO (0.10 - 10.00 Hz).
uint32_t SamplePeriod
Specifies the duration of time that passes during the playback of one sample in nanoseconds (normally...
uint16_t EG1PreAttack
Preattack value of the sample amplitude EG (0 - 1000 permille).
Script * GetScriptOfSlot(uint index)
Get instrument script (gig format extension).
void CopyAssign(const Script *orig)
Make a (semi) deep copy of the Script object given by orig and assign it to this object.
uint8_t bits
Number of "bits" (1 bit = 2 splits/zones, 2 bit = 4 splits/zones, 3 bit = 8 splits/zones,...
selector_t Selector
Method by which pattern is chosen.
uint8_t out_start
Start position of fade out.
uint8_t VCFCutoff
Max. cutoff frequency.
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.
eg_opt_t EG1Options
[gig extension]: Behavior options which should be used for envelope generator 1 (volume amplitude EG)...
Info * pInfo
Points (in any case) to an Info object, providing additional, optional infos and comments.
uint32_t Manufacturer
Specifies the MIDI Manufacturer's Association (MMA) Manufacturer code for the sampler intended to rec...
uint8_t high
High value of range.
MIDI rule to automatically cycle through specified sequences of different articulations.
Reflects the current playback state for a sample.
General dimension definition.
void CopyAssignMeta(const Sample *orig)
Make a (semi) deep copy of the Sample object given by orig (without the actual waveform data) and ass...
eg1_ctrl_t EG1Controller
MIDI Controller which has influence on sample amplitude EG parameters (attack, decay,...
split_type_t split_type
Intended for internal usage: will be used to convert a dimension value into the corresponding dimensi...
void DeleteScript(Script *pScript)
Delete an instrument script.
virtual void UpdateChunks(progress_t *pProgress)
Apply sample and its settings to the respective RIFF chunks.
void SetReleaseVelocityResponseCurve(curve_type_t curve)
Updates the respective member variable and the lookup table / cache that depends on this value.
vcf_res_ctrl_t VCFResonanceController
Specifies which external controller has influence on the filter resonance Q.
Is not compressed at all (default).
curve_type_t VCFVelocityCurve
Defines a transformation curve for the incoming velocity values, affecting the VCF.
uint8_t EG1ControllerDecayInfluence
Amount EG1 Controller has influence on the EG1 Decay time (0 - 3, where 0 means off).
Defines Region information of an Instrument.
double GetVelocityAttenuation(uint8_t MIDIKeyVelocity)
Returns the correct amplitude factor for the given MIDIKeyVelocity.
Sample * GetSample()
Returns pointer address to the Sample referenced with this region.
void SetVelocityResponseCurve(curve_type_t curve)
Updates the respective member variable and the lookup table / cache that depends on this value.
double EG1Attack
Attack time of the sample amplitude EG (0.000 - 60.000s).
bool IsDrum
Indicates if the Instrument is a drum type, as they differ in the synthesis model of DLS from melodic...
void DeleteScriptGroup(ScriptGroup *pGroup)
Delete an instrument script group.
Region * GetNextRegion()
Returns the next Region of the instrument.
void AddSampleLoop(sample_loop_t *pLoopDef)
Adds a new sample loop with the provided loop definition.