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
78 NullExtensionSize = 0;
290 #else // little endian
295 #endif // WORDS_BIGENDIAN
458 virtual void SetGain(int32_t gain);
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
495 typedef std::map<uint32_t, double*> VelocityTableMap;
497 static uint Instances;
498 static VelocityTableMap* pVelocityTables;
499 double* pVelocityAttenuationTable;
500 double* pVelocityReleaseTable;
501 double* pVelocityCutoffTable;
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);
559 void Resize(
int iNewSize);
562 unsigned long Read(
void* pBuffer,
unsigned long SampleCount,
buffer_t* pExternalDecompressionBuffer = NULL);
564 unsigned long Write(
void* pBuffer,
unsigned long SampleCount);
583 Sample(
File* pFile,
RIFF::List* waveList,
unsigned long WavePoolOffset,
unsigned long fileNo = 0);
594 const unsigned long size =
595 BitDepth == 24 ? samples + (samples >> 1) + (samples >> 8) * 13
596 : samples + (samples >> 10) * 5;
605 return (
unsigned long) ((float)pDecompressionBuffer->
Size / (
float)WorstCaseFrameSize * (float)SamplesPerFrame);
608 void ScanCompressedSample();
631 virtual void SetKeyRange(uint16_t Low, uint16_t High);
798 std::list<Group*>* pGroups;
799 std::list<Group*>::iterator GroupsIterator;
bool LFO2FlipPhase
Inverts phase of the filter cutoff LFO wave.
void UpdateRegionKeyTable()
General Purpose Controller 4 (Slider, MIDI Controller 19)
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.
Encapsulates articulation information of a dimension region.
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...
unsigned long FrameOffset
Current offset (sample points) in current sample frame (for decompression only).
bool reverse
If playback direction is currently backwards (in case there is a pingpong or reverse loop defined)...
Only controlled by aftertouch controller.
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.
virtual void UpdateChunks()
Apply dimension region settings to the respective RIFF chunks.
Effect Controller 2 (Coarse, MIDI Controller 13)
Sample * AddSample()
Add a new sample.
bool VCFEnabled
If filter should be used.
Controlled internally and by external modulation wheel.
Controlled internally and by aftertouch controller.
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.
Soft Pedal (MIDI Controller 67)
uint32_t FineTune
Specifies the fraction of a semitone up from the specified MIDI unity note field. A value of 0x800000...
uint16_t LFO1ControlDepth
Controller depth influencing sample amplitude LFO pitch (0 - 1200 cents).
lfo1_ctrl_t
Defines how LFO1 is controlled by.
Group of Gigasampler objects.
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)...
Special dimension for triggering samples on releasing a key.
uint16_t PitchbendRange
Number of semitones pitchbend controller can pitch (default is 2).
virtual void UpdateChunks()
Apply all the gig file's current instruments, samples, groups and settings to the respective RIFF chu...
double EG1Release
Release time of the sample amplitude EG (0.000 - 60.000s).
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 ...
Only internally controlled.
uint8_t Triggers
Number of triggers.
virtual void UpdateChunks()
Apply Instrument with all its Regions to the respective RIFF chunks.
vcf_type_t VCFType
Defines the general filter characteristic (lowpass, highpass, bandpass, etc.).
Effect Controller 1 (Coarse, MIDI Controller 12)
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.
Controlled internally and by external modulation wheel.
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.
Effect 2 Depth (MIDI Controller 92)
Effect Controller 1 (Coarse, MIDI Controller 12)
Only internally controlled.
Sample * GetFirstSample()
Returns a pointer to the first Sample object of the file, NULL otherwise.
uint8_t low
Low value of range.
Modulation Wheel (MIDI Controller 1)
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.
uint8_t Key
Key to trigger.
unsigned long WorstCaseFrameSize
For compressed samples only: size (in bytes) of the largest possible sample frame.
bool EG1Hold
If true, Decay1 stage should be postponed until the sample reached the sample loop start...
dimension values are already the sought bit number
uint8_t VelocityResponseCurveScaling
0 - 127 (usually you don't have to interpret this parameter, use GetVelocityAttenuation() instead)...
bool Descending
If the change in CC value should be downwards.
double GetVelocityCutoff(uint8_t MIDIKeyVelocity)
unsigned long Size
Size of the actual data in the buffer in bytes.
Effect 1 Depth (MIDI Controller 91)
Instrument * GetFirstInstrument()
Returns a pointer to the first Instrument object of the file, NULL otherwise.
Breath Controller (Coarse, MIDI Controller 2)
Region * RegionKeyTable[128]
fast lookup for the corresponding Region of a MIDI key
Sample(File *pFile, RIFF::List *waveList, unsigned long WavePoolOffset, unsigned long fileNo=0)
Constructor.
For MIDI tools like legato and repetition mode.
bool VCFKeyboardTracking
If true: VCF cutoff frequence will be dependend to the note key position relative to the defined brea...
uint32_t WavePoolTableIndex
uint8_t Velocity
Velocity of the note to trigger. 255 means that velocity should depend on the speed of the controller...
uint32_t crc
CRC-32 checksum of the raw sample 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...
void SetVCFVelocityScale(uint8_t scaling)
Updates the respective member variable and the lookup table / cache that depends on this value...
Defines Region information of an Instrument.
Only controlled by external modulation wheel.
unsigned long GetPos()
Returns the current position in the sample (in sample points).
void UpdateVelocityTable()
unsigned long SamplesPerFrame
For compressed samples only: number of samples in a full sample frame.
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.
static unsigned int Instances
Number of instances of class Sample.
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.
Portamento (MIDI Controller 65)
uint8_t ChannelOffset
Audio output where the audio signal of the dimension region should be routed to (0 - 9)...
void Resize(int iNewSize)
Resize sample.
General Purpose Controller 6 (Button, MIDI Controller 81)
uint8_t VCFResonance
Firm internal filter resonance weight.
bool VCFResonanceDynamic
If true: Increases the resonance Q according to changes of controllers that actually control the VCF ...
unsigned int Dimensions
Number of defined dimensions, do not alter!
Only controlled by external modulation wheel.
vcf_cutoff_ctrl_t VCFCutoffController
Specifies which external controller has influence on the filter cutoff frequency. ...
uint16_t MIDIBank
Reflects combination of MIDIBankCoarse and MIDIBankFine (bank 1 - bank 16384). Do not change this val...
Foot Pedal (Coarse, MIDI Controller 4)
double EG1Decay1
Decay time of the sample amplitude EG (0.000 - 60.000s).
float __range_min
Only for internal usage, do not modify!
DimensionRegion * GetDimensionRegionByValue(const uint DimValues[8])
Use this method in your audio engine to get the appropriate dimension region with it's articulation d...
virtual void UpdateChunks()
Apply Region settings and all its DimensionRegions to the respective RIFF chunks. ...
lfo2_ctrl_t LFO2Controller
MIDI Controlle which controls the filter cutoff LFO.
void LoadDimensionRegions(RIFF::List *rgn)
Different samples triggered each time a note is played, any key advances the counter.
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).
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.
Group * GetGroup() const
Returns pointer to the Group this Sample belongs to.
Instrument(File *pFile, RIFF::List *insList, progress_t *pProgress=NULL)
Used for indicating the progress of a certain task.
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...
unsigned long WorstCaseMaxSamples(buffer_t *pDecompressionBuffer)
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.
buffer_t LoadSampleData()
Loads (and uncompresses if needed) the whole sample wave into RAM.
smpte_format_t
Society of Motion Pictures and Television E time format.
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).
unsigned long position
Current position within the sample.
Only controlled by external foot controller.
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)
lfo3_ctrl_t
Defines how LFO3 is controlled by.
Sustain Pedal (MIDI Controller 64)
double EG1Decay2
Only if EG1InfiniteSustain == false: 2nd decay stage time of the sample amplitude EG (0...
attenuation_ctrl_t AttenuationController
MIDI Controller which has influence on the volume level of the sample (or entire sample group)...
float __range_max
Only for internal usage, do not modify!
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.
virtual void LoadSamples()
uint8_t in_start
Start position of fade in.
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...
dimension_t dimension
Specifies which source (usually a MIDI controller) is associated with the dimension.
Abstract base class which provides mandatory informations about sample players in general...
loop_type_t
Standard types of sample loops.
Sustain Pedal (MIDI Controller 64)
unsigned long SamplesInLastFrame
For compressed samples only: length of the last sample frame.
bool EG2ControllerInvert
Invert values coming from defined EG2 controller.
Group * GetFirstGroup()
Returns a pointer to the first Group object of the file, NULL otherwise.
Group * GetGroup(uint index)
Returns the group with the given index.
uint8_t VelSensitivity
How sensitive the velocity should be to the speed of the controller change.
uint32_t DimensionRegions
Total number of DimensionRegions this Region contains, do not alter!
bool MSDecode
Gigastudio flag: defines if Mid Side Recordings should be decoded.
Key Velocity (this is the only dimension in gig2 where the ranges can exactly be defined).
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.
General Purpose Controller 3 (Slider, MIDI Controller 18)
uint32_t SampleLoops
Reflects the number of sample loops.
More poles than normal lowpass.
uint16_t LFO2InternalDepth
Firm pitch of the filter cutoff LFO (0 - 1200 cents).
uint16_t LFO1InternalDepth
Firm pitch of the sample amplitude LFO (0 - 1200 cents).
The difference between none and none2 is unknown.
Controlled internally and by external breath controller.
virtual void LoadInstruments()
float zone_size
Intended for internal usage: reflects the size of each zone (128/zones) for normal split types only...
Only controlled by external breath controller.
bool PitchTrack
If true: sample will be pitched according to the key position (this will be disabled for drums for ex...
double GetVelocityRelease(uint8_t MIDIKeyVelocity)
unsigned long Write(void *pBuffer, unsigned long SampleCount)
Write sample wave data.
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...
General Purpose Controller 4 (Slider, MIDI Controller 19)
unsigned long SamplePos
For compressed samples only: stores the current position (in sample points).
Group * pGroup
pointer to the Group this sample belongs to (always not-NULL)
Effect 4 Depth (MIDI Controller 94)
Breath Controller (Coarse, MIDI Controller 2)
uint8_t EG2ControllerAttackInfluence
Amount EG2 Controller has influence on the EG2 Attack time (0 - 3, where 0 means off).
Exception(String Message)
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).
Only controlled by external modulation wheel.
double EG3Attack
Attack time of the sample pitch EG (0.000 - 10.000s).
void DeleteDimension(dimension_def_t *pDimDef)
Delete an existing dimension.
void(* callback)(progress_t *)
Callback function pointer which has to be assigned to a function for progress notification.
Instrument * GetNextInstrument()
Returns a pointer to the next Instrument object of the file, NULL otherwise.
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.
double LFO1Frequency
Frequency of the sample amplitude LFO (0.10 - 10.00 Hz).
DimensionRegion(Region *pParent, RIFF::List *_3ewl)
uint32_t LoopID
Specifies the unique ID that corresponds to one of the defined cue points in the cue point list (only...
virtual void UpdateChunks()
Update chunks with current group settings.
bool LFO1FlipPhase
Inverts phase of the sample amplitude LFO wave.
void DeleteSample(Sample *pSample)
Delete a sample.
Region(Instrument *pInstrument, RIFF::List *rgnList)
Effect 5 Depth (MIDI Controller 95)
static buffer_t CreateDecompressionBuffer(unsigned long MaxReadSize)
Allocates a decompression buffer for streaming (compressed) samples with Sample::Read().
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.
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).
void DeleteRegion(Region *pRegion)
Soft Pedal (MIDI Controller 67)
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.
split_type_t
Intended for internal usage: will be used to convert a dimension value into the corresponding dimensi...
Alternating loop (forward/backward, also known as Ping Pong)
unsigned long loop_cycles_left
How many times the loop has still to be passed, this value will be decremented with each loop cycle...
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)...
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 ...
unsigned long FileNo
File number (> 0 when sample is stored in an extension file, 0 when it's in the gig) ...
bool EG1ControllerInvert
Invert values coming from defined EG1 controller.
Ordinary MIDI control change controller, see field 'controller_number'.
30 frames per second with frame dropping (30 drop)
vcf_res_ctrl_t
Defines how the filter resonance is controlled by.
vcf_type_t
Defines which frequencies are filtered by the VCF.
General Purpose Controller 5 (Button, MIDI Controller 80)
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).
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, release).
For layering of up to 8 instruments (and eventually crossfading of 2 or 4 layers).
bool VCFCutoffControllerInvert
Inverts values coming from the defined cutoff controller.
General Purpose Controller 7 (Button, MIDI Controller 82)
Controlled internally and by external foot controller.
Different samples triggered each time a note is played, random order.
void * custom
This pointer can be used for arbitrary data.
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)...
float factor
Reflects current progress as value between 0.0 and 1.0.
uint8_t EG2ControllerDecayInfluence
Amount EG2 Controller has influence on the EG2 Decay time (0 - 3, where 0 means off).
Abstract base class for all MIDI rules.
void SetVelocityResponseCurveScaling(uint8_t scaling)
Updates the respective member variable and the lookup table / cache that depends on this value...
General Purpose Controller 2 (Slider, MIDI Controller 17)
dimension_t
Defines the type of dimension, that is how the dimension zones (and thus how the dimension regions ar...
uint32_t LoopEnd
Caution: Use the respective field in the DimensionRegion instead of this one! (Intended purpose: The ...
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...
Different samples triggered each time a note is played, dimension regions selected in sequence...
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.
Effect 5 Depth (MIDI Controller 95)
General Purpose Controller 3 (Slider, MIDI Controller 18)
General Purpose Controller 8 (Button, MIDI Controller 83)
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...
vcf_cutoff_ctrl_t
Defines how the filter cutoff frequency is controlled by.
Encapsulates sample waves 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.
General Purpose Controller 8 (Button, MIDI Controller 83)
unsigned long GuessSize(unsigned long samples)
dimension value between 0-127
Modulation Wheel (MIDI Controller 1)
int16_t LFO3InternalDepth
Firm depth of the sample pitch LFO (-1200 - +1200 cents).
General Purpose Controller 5 (Button, MIDI Controller 80)
Lower and upper limit of a range.
Sample * GetNextSample()
Returns a pointer to the next Sample object of the file, NULL otherwise.
virtual void Save()
Save changes to same file.
General Purpose Controller 1 (Slider, MIDI Controller 16)
double EG2Decay2
Only if EG2InfiniteSustain == false: 2nd stage decay time of the filter cutoff EG (0...
Portamento Time (Coarse, MIDI Controller 5)
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...
Effect Controller 2 (Coarse, MIDI Controller 13)
Foot Pedal (Coarse, MIDI Controller 4)
uint16_t EG1Sustain
Sustain value of the sample amplitude EG (0 - 1000 permille).
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...
void SetVelocityResponseDepth(uint8_t depth)
Updates the respective member variable and the lookup table / cache that depends on this value...
Sample * GetSampleFromWavePool(unsigned int WavePoolTableIndex, progress_t *pProgress=NULL)
General Purpose Controller 6 (Button, MIDI Controller 81)
Gigasampler specific classes and definitions.
uint8_t DimensionUpperLimits[8]
gig3: defines the upper limit of the dimension values for this dimension region
uint8_t TriggerPoint
The CC value to pass for the note to be triggered.
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, 4 or 6)
Instrument * GetInstrument(uint index, progress_t *pProgress=NULL)
Returns the instrument with the given index.
virtual void UpdateChunks()
Apply sample and its settings to the respective RIFF chunks.
int8_t Pan
Panorama / Balance (-64..0..63 <-> left..middle..right)
Parses Gigasampler files and provides abstract access to the data.
Only internally controlled.
lfo2_ctrl_t
Defines how LFO2 is controlled by.
Effect 3 Depth (MIDI Controller 93)
Dimension for keyswitching.
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.
struct gig::MidiRuleCtrlTrigger::trigger_t pTriggers[32]
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 all neccessary information for the synthesis of an Instrument.
void DeleteGroup(Group *pGroup)
Delete a group and its samples.
bool SustainDefeat
If true: Sustain pedal will not hold a note.
buffer_t RAMCache
Buffers samples (already uncompressed) in RAM.
bool NoteOff
If a note off should be triggered instead of a note on.
String libraryName()
Returns the name of this C++ library.
Controlled internally and by external modulation wheel.
virtual void LoadGroups()
Quadtuple version number ("major.minor.release.build").
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).
unsigned long * FrameTable
For positioning within compressed samples only: stores the offset values for each frame...
curve_type_t
Defines the shape of a function graph.
uint8_t bits
Number of "bits" (1 bit = 2 splits/zones, 2 bit = 4 splits/zones, 3 bit = 8 splits/zones,...).
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...
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).
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.
bool OverridePedal
If a note off should be triggered even if the sustain pedal is down.
Reflects the current playback state for a sample.
Region * GetParent() const
General dimension definition.
eg1_ctrl_t EG1Controller
MIDI Controller which has influence on sample amplitude EG parameters (attack, decay, release).
Sostenuto Pedal (MIDI Controller 66)
split_type_t split_type
Intended for internal usage: will be used to convert a dimension value into the corresponding dimensi...
If used sample has more than one channel (thus is not mono).
void SetReleaseVelocityResponseCurve(curve_type_t curve)
Updates the respective member variable and the lookup table / cache that depends on this value...
dim_bypass_ctrl_t
Dimensions allow to bypass one of the following controllers.
vcf_res_ctrl_t VCFResonanceController
Specifies which external controller has influence on the filter resonance Q.
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.
Effect 4 Depth (MIDI Controller 94)
General Purpose Controller 7 (Button, MIDI Controller 82)
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...
MidiRuleCtrlTrigger(RIFF::Chunk *_3ewg)
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.