libgig
4.4.1
|
Encapsulates articulation informations of a dimension region. More...
#include <gig.h>
Public Member Functions | |
double | GetVelocityAttenuation (uint8_t MIDIKeyVelocity) |
Returns the correct amplitude factor for the given MIDIKeyVelocity. More... | |
double | GetVelocityRelease (uint8_t MIDIKeyVelocity) |
double | GetVelocityCutoff (uint8_t MIDIKeyVelocity) |
void | SetVelocityResponseCurve (curve_type_t curve) |
Updates the respective member variable and the lookup table / cache that depends on this value. | |
void | SetVelocityResponseDepth (uint8_t depth) |
Updates the respective member variable and the lookup table / cache that depends on this value. | |
void | SetVelocityResponseCurveScaling (uint8_t scaling) |
Updates the respective member variable and the lookup table / cache that depends on this value. | |
void | SetReleaseVelocityResponseCurve (curve_type_t curve) |
Updates the respective member variable and the lookup table / cache that depends on this value. | |
void | SetReleaseVelocityResponseDepth (uint8_t depth) |
Updates the respective member variable and the lookup table / cache that depends on this value. | |
void | SetVCFCutoffController (vcf_cutoff_ctrl_t controller) |
Updates the respective member variable and the lookup table / cache that depends on this value. | |
void | SetVCFVelocityCurve (curve_type_t curve) |
Updates the respective member variable and the lookup table / cache that depends on this value. | |
void | SetVCFVelocityDynamicRange (uint8_t range) |
Updates the respective member variable and the lookup table / cache that depends on this value. | |
void | SetVCFVelocityScale (uint8_t scaling) |
Updates the respective member variable and the lookup table / cache that depends on this value. | |
Region * | GetParent () const |
virtual void | SetGain (int32_t gain) |
Updates the respective member variable and updates SampleAttenuation which depends on this value. | |
virtual void | UpdateChunks (progress_t *pProgress) |
Apply dimension region settings to the respective RIFF chunks. More... | |
virtual void | CopyAssign (const DimensionRegion *orig) |
Make a (semi) deep copy of the DimensionRegion object given by orig and assign it to this object. More... | |
Public Attributes | |
uint8_t | VelocityUpperLimit |
Defines the upper velocity value limit of a velocity split (only if an user defined limit was set, thus a value not equal to 128/NumberOfSplits, else this value is 0). Only for gig2, for gig3 and above the DimensionUpperLimits are used instead. | |
Sample * | pSample |
Points to the Sample which is assigned to the dimension region. | |
uint16_t | EG1PreAttack |
Preattack value of the sample amplitude EG (0 - 1000 permille). | |
double | EG1Attack |
Attack time of the sample amplitude EG (0.000 - 60.000s). | |
double | EG1Decay1 |
Decay time of the sample amplitude EG (0.000 - 60.000s). | |
double | EG1Decay2 |
Only if EG1InfiniteSustain == false: 2nd decay stage time of the sample amplitude EG (0.000 - 60.000s). | |
bool | EG1InfiniteSustain |
If true, instead of going into Decay2 phase, Decay1 level will be hold until note will be released. | |
uint16_t | EG1Sustain |
Sustain value of the sample amplitude EG (0 - 1000 permille). | |
double | EG1Release |
Release time of the sample amplitude EG (0.000 - 60.000s). | |
bool | EG1Hold |
If true, Decay1 stage should be postponed until the sample reached the sample loop start. | |
eg1_ctrl_t | EG1Controller |
MIDI Controller which has influence on sample amplitude EG parameters (attack, decay, release). | |
bool | EG1ControllerInvert |
Invert values coming from defined EG1 controller. | |
uint8_t | EG1ControllerAttackInfluence |
Amount EG1 Controller has influence on the EG1 Attack time (0 - 3, where 0 means off). | |
uint8_t | EG1ControllerDecayInfluence |
Amount EG1 Controller has influence on the EG1 Decay time (0 - 3, where 0 means off). | |
uint8_t | EG1ControllerReleaseInfluence |
Amount EG1 Controller has influence on the EG1 Release time (0 - 3, where 0 means off). | |
lfo_wave_t | LFO1WaveForm |
[gig extension]: The fundamental wave form to be used by the amplitude LFO, e.g. sine, triangle, saw, square (default: sine). | |
double | LFO1Frequency |
Frequency of the sample amplitude LFO (0.10 - 10.00 Hz). | |
double | LFO1Phase |
[gig extension]: Phase displacement of the amplitude LFO's wave form (0.0° - 360.0°). | |
uint16_t | LFO1InternalDepth |
Firm pitch of the sample amplitude LFO (0 - 1200 cents). | |
uint16_t | LFO1ControlDepth |
Controller depth influencing sample amplitude LFO pitch (0 - 1200 cents). | |
lfo1_ctrl_t | LFO1Controller |
MIDI Controller which controls sample amplitude LFO. | |
bool | LFO1FlipPhase |
Inverts the polarity of the sample amplitude LFO wave, so it flips the wave form vertically. | |
bool | LFO1Sync |
If set to true only one LFO should be used for all voices. | |
uint16_t | EG2PreAttack |
Preattack value of the filter cutoff EG (0 - 1000 permille). | |
double | EG2Attack |
Attack time of the filter cutoff EG (0.000 - 60.000s). | |
double | EG2Decay1 |
Decay time of the filter cutoff EG (0.000 - 60.000s). | |
double | EG2Decay2 |
Only if EG2InfiniteSustain == false: 2nd stage decay time of the filter cutoff EG (0.000 - 60.000s). | |
bool | EG2InfiniteSustain |
If true, instead of going into Decay2 phase, Decay1 level will be hold until note will be released. | |
uint16_t | EG2Sustain |
Sustain value of the filter cutoff EG (0 - 1000 permille). | |
double | EG2Release |
Release time of the filter cutoff EG (0.000 - 60.000s). | |
eg2_ctrl_t | EG2Controller |
MIDI Controller which has influence on filter cutoff EG parameters (attack, decay, release). | |
bool | EG2ControllerInvert |
Invert values coming from defined EG2 controller. | |
uint8_t | EG2ControllerAttackInfluence |
Amount EG2 Controller has influence on the EG2 Attack 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). | |
uint8_t | EG2ControllerReleaseInfluence |
Amount EG2 Controller has influence on the EG2 Release time (0 - 3, where 0 means off). | |
lfo_wave_t | LFO2WaveForm |
[gig extension]: The fundamental wave form to be used by the filter cutoff LFO, e.g. sine, triangle, saw, square (default: sine). | |
double | LFO2Frequency |
Frequency of the filter cutoff LFO (0.10 - 10.00 Hz). | |
double | LFO2Phase |
[gig extension]: Phase displacement of the filter cutoff LFO's wave form (0.0° - 360.0°). | |
uint16_t | LFO2InternalDepth |
Firm pitch of the filter cutoff LFO (0 - 1200 cents). | |
uint16_t | LFO2ControlDepth |
Controller depth influencing filter cutoff LFO pitch (0 - 1200). | |
lfo2_ctrl_t | LFO2Controller |
MIDI Controlle which controls the filter cutoff LFO. | |
bool | LFO2FlipPhase |
Inverts the polarity of the filter cutoff LFO wave, so it flips the wave form vertically. | |
bool | LFO2Sync |
If set to true only one LFO should be used for all voices. | |
double | EG3Attack |
Attack time of the sample pitch EG (0.000 - 10.000s). | |
int16_t | EG3Depth |
Depth of the sample pitch EG (-1200 - +1200). | |
lfo_wave_t | LFO3WaveForm |
[gig extension]: The fundamental wave form to be used by the pitch LFO, e.g. sine, triangle, saw, square (default: sine). | |
double | LFO3Frequency |
Frequency of the sample pitch LFO (0.10 - 10.00 Hz). | |
double | LFO3Phase |
[gig extension]: Phase displacement of the pitch LFO's wave form (0.0° - 360.0°). | |
int16_t | LFO3InternalDepth |
Firm depth of the sample pitch LFO (-1200 - +1200 cents). | |
int16_t | LFO3ControlDepth |
Controller depth of the sample pitch LFO (-1200 - +1200 cents). | |
lfo3_ctrl_t | LFO3Controller |
MIDI Controller which controls the sample pitch LFO. | |
bool | LFO3FlipPhase |
[gig extension]: Inverts the polarity of the pitch LFO wave, so it flips the wave form vertically (NOTE: this setting for LFO3 is a gig format extension; flipping the polarity was only available for LFO1 and LFO2 in the original Gigasampler/GigaStudio software). | |
bool | LFO3Sync |
If set to true only one LFO should be used for all voices. | |
bool | VCFEnabled |
If filter should be used. | |
vcf_type_t | VCFType |
Defines the general filter characteristic (lowpass, highpass, bandpass, etc.). | |
vcf_cutoff_ctrl_t | VCFCutoffController |
Specifies which external controller has influence on the filter cutoff frequency. More... | |
bool | VCFCutoffControllerInvert |
Inverts values coming from the defined cutoff controller. | |
uint8_t | VCFCutoff |
Max. cutoff frequency. | |
curve_type_t | VCFVelocityCurve |
Defines a transformation curve for the incoming velocity values, affecting the VCF. More... | |
uint8_t | VCFVelocityScale |
(0-127) Amount velocity controls VCF cutoff frequency (only if no other VCF cutoff controller is defined, otherwise this is the minimum cutoff). More... | |
uint8_t | VCFVelocityDynamicRange |
0x04 = lowest, 0x00 = highest . More... | |
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 cutoff frequency (EG2, ext. VCF MIDI controller). | |
vcf_res_ctrl_t | VCFResonanceController |
Specifies which external controller has influence on the filter resonance Q. | |
bool | VCFKeyboardTracking |
If true: VCF cutoff frequence will be dependend to the note key position relative to the defined breakpoint value. | |
uint8_t | VCFKeyboardTrackingBreakpoint |
See VCFKeyboardTracking (0 - 127). | |
curve_type_t | VelocityResponseCurve |
Defines a transformation curve to the incoming velocity values affecting amplitude (usually you don't have to interpret this parameter, use GetVelocityAttenuation() instead). More... | |
uint8_t | VelocityResponseDepth |
Dynamic range of velocity affecting amplitude (0 - 4) (usually you don't have to interpret this parameter, use GetVelocityAttenuation() instead). More... | |
uint8_t | VelocityResponseCurveScaling |
0 - 127 (usually you don't have to interpret this parameter, use GetVelocityAttenuation() instead). More... | |
curve_type_t | ReleaseVelocityResponseCurve |
Defines a transformation curve to the incoming release veloctiy values affecting envelope times. More... | |
uint8_t | ReleaseVelocityResponseDepth |
Dynamic range of release velocity affecting envelope time (0 - 4). More... | |
uint8_t | ReleaseTriggerDecay |
0 - 8 | |
crossfade_t | Crossfade |
bool | PitchTrack |
If true: sample will be pitched according to the key position (this will be disabled for drums for example). | |
dim_bypass_ctrl_t | DimensionBypass |
If defined, the MIDI controller can switch on/off the dimension in realtime. | |
int8_t | Pan |
Panorama / Balance (-64..0..63 <-> left..middle..right) | |
bool | SelfMask |
If true: high velocity notes will stop low velocity notes at the same note, with that you can save voices that wouldn't be audible anyway. | |
attenuation_ctrl_t | AttenuationController |
MIDI Controller which has influence on the volume level of the sample (or entire sample group). | |
bool | InvertAttenuationController |
Inverts the values coming from the defined Attenuation Controller. | |
uint8_t | AttenuationControllerThreshold |
0-127 | |
uint8_t | ChannelOffset |
Audio output where the audio signal of the dimension region should be routed to (0 - 9). | |
bool | SustainDefeat |
If true: Sustain pedal will not hold a note. | |
bool | MSDecode |
Gigastudio flag: defines if Mid Side Recordings should be decoded. | |
uint16_t | SampleStartOffset |
Number of samples the sample start should be moved (0 - 2000). | |
double | SampleAttenuation |
Sample volume (calculated from DLS::Sampler::Gain) | |
uint8_t | DimensionUpperLimits [8] |
gig3: defines the upper limit of the dimension values for this dimension region. In case you wondered why this is defined on DimensionRegion level and not on Region level: the zone sizes (upper limits) of the velocity dimension can indeed differ in the individual dimension regions, depending on which zones of the other dimension types are currently selected. So this is exceptional for the velocity dimension only. All other dimension types have the same dimension zone sizes for every single DimensionRegion (of the sample Region). | |
eg_opt_t | EG1Options |
[gig extension]: Behavior options which should be used for envelope generator 1 (volume amplitude EG). | |
eg_opt_t | EG2Options |
[gig extension]: Behavior options which should be used for envelope generator 2 (filter cutoff EG). | |
sust_rel_trg_t | SustainReleaseTrigger |
[gig extension]: Whether a sustain pedal up event shall play release trigger sample. | |
bool | NoNoteOffReleaseTrigger |
[gig extension]: If true then don't play a release trigger sample on MIDI note-off events. | |
Protected Member Functions | |
DimensionRegion (Region *pParent, RIFF::List *_3ewl) | |
DimensionRegion (RIFF::List *_3ewl, const DimensionRegion &src) | |
void | CopyAssign (const DimensionRegion *orig, const std::map< Sample *, Sample *> *mSamples) |
Make a (semi) deep copy of the DimensionRegion object given by orig and assign it to this object. More... | |
void | serialize (Serialization::Archive *archive) |
void | AddSampleLoop (sample_loop_t *pLoopDef) |
Adds a new sample loop with the provided loop definition. More... | |
void | DeleteSampleLoop (sample_loop_t *pLoopDef) |
Deletes an existing sample loop. More... | |
virtual void | DeleteChunks () |
Remove all RIFF chunks associated with this Sampler object. More... | |
virtual void | CopyAssign (const Sampler *orig) |
Make a deep copy of the Sampler object given by orig and assign it to this object. More... | |
Protected Attributes | |
uint8_t * | VelocityTable |
For velocity dimensions with custom defined zone ranges only: used for fast converting from velocity MIDI value to dimension bit number. | |
uint8_t | UnityNote |
int16_t | FineTune |
int32_t | Gain |
bool | NoSampleDepthTruncation |
bool | NoSampleCompression |
uint32_t | SampleLoops |
Reflects the number of sample loops. | |
sample_loop_t * | pSampleLoops |
Points to the beginning of a sample loop array, or is NULL if there are no loops defined. | |
RIFF::List * | pParentList |
uint32_t | uiHeaderSize |
uint32_t | SamplerOptions |
Encapsulates articulation informations of a dimension region.
This is the most important data object of the Gigasampler / GigaStudio format. A DimensionRegion provides the link to the sample to be played and all required articulation informations to be interpreted for playing back the sample and processing it appropriately by the sampler software. Every Region of a Gigasampler Instrument has at least one dimension region (exactly then when the Region has no dimension defined). Many Regions though provide more than one DimensionRegion, which reflect different playing "cases". For example a different sample might be played if a certain pedal is pressed down, or if the note was triggered with different velocity.
One instance of a DimensionRegion reflects exactly one particular case while playing an instrument (for instance "note between C3 and E3 was triggered AND note on velocity was between 20 and 42 AND modulation wheel controller is between 80 and 127). The DimensionRegion defines what to do under that one particular case, that is which sample to play back and how to play that sample back exactly and how to process it. So a DimensionRegion object is always linked to exactly one sample. It may however also link to no sample at all, for defining a "silence" case where nothing shall be played (for example when note on velocity was below 6).
Note that a DimensionRegion object only defines "what to do", but it does not define "when to do it". To actually resolve which DimensionRegion to pick under which situation, you need to refer to the DimensionRegions' parent Region object. The Region object contains the necessary "Dimension" definitions, which in turn define which DimensionRegion is associated with which playing case exactly.
The Gigasampler/GigaStudio format defines 3 Envelope Generators and 3 Low Frequency Oscillators:
Since the gig format was designed as extension to the DLS file format, this class is derived from the DLS::Sampler class. So also refer to DLS::Sampler for additional informations, class attributes and methods.
|
inherited |
Adds a new sample loop with the provided loop definition.
pLoopDef | - points to a loop definition that is to be copied |
Definition at line 742 of file DLS.cpp.
References DLS::sample_loop_t::Size.
|
virtualinherited |
Make a deep copy of the Sampler object given by orig and assign it to this object.
orig | - original Sampler object to be copied from |
Definition at line 788 of file DLS.cpp.
References DLS::Sampler::Gain, DLS::Sampler::pSampleLoops, and DLS::Sampler::SampleLoops.
Referenced by DLS::Region::CopyAssign().
|
virtual |
Make a (semi) deep copy of the DimensionRegion object given by orig and assign it to this object.
Note that all sample pointers referenced by orig are simply copied as memory address. Thus the respective samples are shared, not duplicated!
orig | - original DimensionRegion object to be copied from |
Definition at line 1842 of file gig.cpp.
References DLS::Sample::CopyAssign().
Referenced by gig::Region::DeleteDimensionZone(), and gig::Region::SplitDimensionZone().
|
protected |
Make a (semi) deep copy of the DimensionRegion object given by orig and assign it to this object.
orig | - original DimensionRegion object to be copied from |
mSamples | - crosslink map between the foreign file's samples and this file's samples |
Definition at line 1854 of file gig.cpp.
References gig::Sample::FineTune, pSample, DLS::Sampler::pSampleLoops, DLS::Sampler::SampleLoops, and VelocityTable.
|
virtualinherited |
Remove all RIFF chunks associated with this Sampler object.
At the moment Sampler::DeleteChunks() does nothing. It is recommended to call this method explicitly though from deriving classes's own overridden implementation of this method to avoid potential future compatiblity issues.
See Storage::DeleteChunks() for details.
Implements DLS::Storage.
Reimplemented in DLS::Region.
Definition at line 734 of file DLS.cpp.
Referenced by DLS::Region::DeleteChunks().
|
inherited |
double gig::DimensionRegion::GetVelocityAttenuation | ( | uint8_t | MIDIKeyVelocity | ) |
Returns the correct amplitude factor for the given MIDIKeyVelocity.
All involved parameters (VelocityResponseCurve, VelocityResponseDepth and VelocityResponseCurveScaling) involved are taken into account to calculate the amplitude factor. Use this method when a key was triggered to get the volume with which the sample should be played back.
MIDIKeyVelocity | MIDI velocity value of the triggered key (between 0 and 127) |
|
virtual |
Apply dimension region settings to the respective RIFF chunks.
You have to call File::Save() to make changes persistent.
Usually there is absolutely no need to call this method explicitly. It will be called automatically when File::Save() was called.
pProgress | - callback function for progress notification |
Reimplemented from DLS::Sampler.
Definition at line 2014 of file gig.cpp.
References gig::eg_opt_t::AttackCancel, gig::leverage_ctrl_t::controller_number, gig::curve_type_linear, gig::curve_type_nonlinear, gig::curve_type_special, gig::curve_type_unknown, gig::dim_bypass_ctrl_94, gig::dim_bypass_ctrl_95, gig::dim_bypass_ctrl_none, RIFF::Chunk::GetNewSize(), gig::Sample::Instances, RIFF::Chunk::LoadChunkData(), DLS::File::pVersion, RIFF::Chunk::Resize(), gig::leverage_ctrl_t::type, gig::leverage_ctrl_t::type_channelaftertouch, gig::leverage_ctrl_t::type_controlchange, gig::leverage_ctrl_t::type_none, gig::leverage_ctrl_t::type_velocity, DLS::Sampler::UpdateChunks(), gig::vcf_cutoff_ctrl_none2, gig::vcf_res_ctrl_none, gig::vcf_type_lowpass, and gig::vcf_type_lowpassturbo.
|
inherited |
Definition at line 429 of file DLS.h.
Referenced by DLS::Sampler::CopyAssign().
curve_type_t gig::DimensionRegion::ReleaseVelocityResponseCurve |
Defines a transformation curve to the incoming release veloctiy values affecting envelope times.
uint8_t gig::DimensionRegion::ReleaseVelocityResponseDepth |
Dynamic range of release velocity affecting envelope time (0 - 4).
vcf_cutoff_ctrl_t gig::DimensionRegion::VCFCutoffController |
Specifies which external controller has influence on the filter cutoff frequency.
curve_type_t gig::DimensionRegion::VCFVelocityCurve |
Defines a transformation curve for the incoming velocity values, affecting the VCF.
uint8_t gig::DimensionRegion::VCFVelocityDynamicRange |
0x04 = lowest, 0x00 = highest .
uint8_t gig::DimensionRegion::VCFVelocityScale |
(0-127) Amount velocity controls VCF cutoff frequency (only if no other VCF cutoff controller is defined, otherwise this is the minimum cutoff).
curve_type_t gig::DimensionRegion::VelocityResponseCurve |
Defines a transformation curve to the incoming velocity values affecting amplitude (usually you don't have to interpret this parameter, use GetVelocityAttenuation() instead).
uint8_t gig::DimensionRegion::VelocityResponseCurveScaling |
0 - 127 (usually you don't have to interpret this parameter, use GetVelocityAttenuation() instead).
uint8_t gig::DimensionRegion::VelocityResponseDepth |
Dynamic range of velocity affecting amplitude (0 - 4) (usually you don't have to interpret this parameter, use GetVelocityAttenuation() instead).