32 # define __has_feature(x) 0
35 # if __GXX_RTTI || __has_feature(cxx_rtti) || _CPPRTTI
44 # warning No RTTI available!
48 # define LIST_TYPE_3PRG 0x33707267
49 # define LIST_TYPE_3EWL 0x3365776C
50 # define LIST_TYPE_3GRI 0x33677269
51 # define LIST_TYPE_3GNL 0x33676E6C
52 # define LIST_TYPE_3LS 0x334c5320
53 # define LIST_TYPE_RTIS 0x52544953
54 # define LIST_TYPE_3DNM 0x33646e6d
55 # define CHUNK_ID_3GIX 0x33676978
56 # define CHUNK_ID_3EWA 0x33657761
57 # define CHUNK_ID_3LNK 0x336C6E6B
58 # define CHUNK_ID_3EWG 0x33657767
59 # define CHUNK_ID_EWAV 0x65776176
60 # define CHUNK_ID_3GNM 0x33676E6D
61 # define CHUNK_ID_EINF 0x65696E66
62 # define CHUNK_ID_3CRC 0x33637263
63 # define CHUNK_ID_SCRI 0x53637269
64 # define CHUNK_ID_LSNM 0x4c534e4d
65 # define CHUNK_ID_SCSL 0x5343534c
66 # define CHUNK_ID_SCPV 0x53435056
67 # define CHUNK_ID_LSDE 0x4c534445
68 # define CHUNK_ID_3DDP 0x33646470
70 # define LIST_TYPE_3PRG 0x67727033
71 # define LIST_TYPE_3EWL 0x6C776533
72 # define LIST_TYPE_3GRI 0x69726733
73 # define LIST_TYPE_3GNL 0x6C6E6733
74 # define LIST_TYPE_3LS 0x20534c33
75 # define LIST_TYPE_RTIS 0x53495452
76 # define LIST_TYPE_3DNM 0x6d6e6433
77 # define CHUNK_ID_3GIX 0x78696733
78 # define CHUNK_ID_3EWA 0x61776533
79 # define CHUNK_ID_3LNK 0x6B6E6C33
80 # define CHUNK_ID_3EWG 0x67776533
81 # define CHUNK_ID_EWAV 0x76617765
82 # define CHUNK_ID_3GNM 0x6D6E6733
83 # define CHUNK_ID_EINF 0x666E6965
84 # define CHUNK_ID_3CRC 0x63726333
85 # define CHUNK_ID_SCRI 0x69726353
86 # define CHUNK_ID_LSNM 0x4d4e534c
87 # define CHUNK_ID_SCSL 0x4c534353
88 # define CHUNK_ID_SCPV 0x56504353
89 # define CHUNK_ID_LSDE 0x4544534c
90 # define CHUNK_ID_3DDP 0x70646433
93 #ifndef GIG_DECLARE_ENUM
94 # define GIG_DECLARE_ENUM(type, ...) enum type { __VA_ARGS__ }
103 typedef std::string String;
635 using DLS::Sampler::UnityNote;
636 using DLS::Sampler::FineTune;
643 double GetVelocityRelease(uint8_t MIDIKeyVelocity);
644 double GetVelocityCutoff(uint8_t MIDIKeyVelocity);
654 Region* GetParent()
const;
659 virtual void SetGain(int32_t gain) OVERRIDE;
674 _lev_ctrl_none = 0x00,
675 _lev_ctrl_modwheel = 0x03,
676 _lev_ctrl_breath = 0x05,
677 _lev_ctrl_foot = 0x07,
678 _lev_ctrl_effect1 = 0x0d,
679 _lev_ctrl_effect2 = 0x0f,
680 _lev_ctrl_genpurpose1 = 0x11,
681 _lev_ctrl_genpurpose2 = 0x13,
682 _lev_ctrl_genpurpose3 = 0x15,
683 _lev_ctrl_genpurpose4 = 0x17,
684 _lev_ctrl_portamentotime = 0x0b,
685 _lev_ctrl_sustainpedal = 0x01,
686 _lev_ctrl_portamento = 0x19,
687 _lev_ctrl_sostenutopedal = 0x1b,
688 _lev_ctrl_softpedal = 0x09,
689 _lev_ctrl_genpurpose5 = 0x1d,
690 _lev_ctrl_genpurpose6 = 0x1f,
691 _lev_ctrl_genpurpose7 = 0x21,
692 _lev_ctrl_genpurpose8 = 0x23,
693 _lev_ctrl_effect1depth = 0x25,
694 _lev_ctrl_effect2depth = 0x27,
695 _lev_ctrl_effect3depth = 0x29,
696 _lev_ctrl_effect4depth = 0x2b,
697 _lev_ctrl_effect5depth = 0x2d,
698 _lev_ctrl_channelaftertouch = 0x2f,
699 _lev_ctrl_velocity = 0xff,
703 _lev_ctrl_CC3_EXT = 0x83,
705 _lev_ctrl_CC6_EXT = 0x86,
706 _lev_ctrl_CC7_EXT = 0x87,
707 _lev_ctrl_CC8_EXT = 0x88,
708 _lev_ctrl_CC9_EXT = 0x89,
709 _lev_ctrl_CC10_EXT = 0x8a,
710 _lev_ctrl_CC11_EXT = 0x8b,
712 _lev_ctrl_CC14_EXT = 0x8e,
713 _lev_ctrl_CC15_EXT = 0x8f,
715 _lev_ctrl_CC20_EXT = 0x94,
716 _lev_ctrl_CC21_EXT = 0x95,
717 _lev_ctrl_CC22_EXT = 0x96,
718 _lev_ctrl_CC23_EXT = 0x97,
719 _lev_ctrl_CC24_EXT = 0x98,
720 _lev_ctrl_CC25_EXT = 0x99,
721 _lev_ctrl_CC26_EXT = 0x9a,
722 _lev_ctrl_CC27_EXT = 0x9b,
723 _lev_ctrl_CC28_EXT = 0x9c,
724 _lev_ctrl_CC29_EXT = 0x9d,
725 _lev_ctrl_CC30_EXT = 0x9e,
726 _lev_ctrl_CC31_EXT = 0x9f,
728 _lev_ctrl_CC68_EXT = 0xc4,
729 _lev_ctrl_CC69_EXT = 0xc5,
730 _lev_ctrl_CC70_EXT = 0xc6,
731 _lev_ctrl_CC71_EXT = 0xc7,
732 _lev_ctrl_CC72_EXT = 0xc8,
733 _lev_ctrl_CC73_EXT = 0xc9,
734 _lev_ctrl_CC74_EXT = 0xca,
735 _lev_ctrl_CC75_EXT = 0xcb,
736 _lev_ctrl_CC76_EXT = 0xcc,
737 _lev_ctrl_CC77_EXT = 0xcd,
738 _lev_ctrl_CC78_EXT = 0xce,
739 _lev_ctrl_CC79_EXT = 0xcf,
741 _lev_ctrl_CC84_EXT = 0xd4,
742 _lev_ctrl_CC85_EXT = 0xd5,
743 _lev_ctrl_CC86_EXT = 0xd6,
744 _lev_ctrl_CC87_EXT = 0xd7,
746 _lev_ctrl_CC89_EXT = 0xd9,
747 _lev_ctrl_CC90_EXT = 0xda,
749 _lev_ctrl_CC96_EXT = 0xe0,
750 _lev_ctrl_CC97_EXT = 0xe1,
752 _lev_ctrl_CC102_EXT = 0xe6,
753 _lev_ctrl_CC103_EXT = 0xe7,
754 _lev_ctrl_CC104_EXT = 0xe8,
755 _lev_ctrl_CC105_EXT = 0xe9,
756 _lev_ctrl_CC106_EXT = 0xea,
757 _lev_ctrl_CC107_EXT = 0xeb,
758 _lev_ctrl_CC108_EXT = 0xec,
759 _lev_ctrl_CC109_EXT = 0xed,
760 _lev_ctrl_CC110_EXT = 0xee,
761 _lev_ctrl_CC111_EXT = 0xef,
762 _lev_ctrl_CC112_EXT = 0xf0,
763 _lev_ctrl_CC113_EXT = 0xf1,
764 _lev_ctrl_CC114_EXT = 0xf2,
765 _lev_ctrl_CC115_EXT = 0xf3,
766 _lev_ctrl_CC116_EXT = 0xf4,
767 _lev_ctrl_CC117_EXT = 0xf5,
768 _lev_ctrl_CC118_EXT = 0xf6,
769 _lev_ctrl_CC119_EXT = 0xf7
771 typedef std::map<uint32_t, double*> VelocityTableMap;
773 static size_t Instances;
774 static VelocityTableMap* pVelocityTables;
775 double* pVelocityAttenuationTable;
776 double* pVelocityReleaseTable;
777 double* pVelocityCutoffTable;
780 leverage_ctrl_t DecodeLeverageController(_lev_ctrl_t EncodedController);
781 _lev_ctrl_t EncodeLeverageController(
leverage_ctrl_t DecodedController);
782 double* GetReleaseVelocityTable(
curve_type_t releaseVelocityResponseCurve, uint8_t releaseVelocityResponseDepth);
783 double* GetCutoffVelocityTable(
curve_type_t vcfVelocityCurve, uint8_t vcfVelocityDynamicRange, uint8_t vcfVelocityScale,
vcf_cutoff_ctrl_t vcfCutoffController);
784 double* GetVelocityTable(
curve_type_t curveType, uint8_t depth, uint8_t scaling);
785 double* CreateVelocityTable(
curve_type_t curveType, uint8_t depth, uint8_t scaling);
786 bool UsesAnyGigFormatExtension()
const;
846 void Resize(file_offset_t NewSize);
848 file_offset_t
GetPos()
const;
849 file_offset_t
Read(
void* pBuffer, file_offset_t SampleCount,
buffer_t* pExternalDecompressionBuffer = NULL);
851 file_offset_t
Write(
void* pBuffer, file_offset_t SampleCount);
874 Sample(
File* pFile,
RIFF::List* waveList, file_offset_t WavePoolOffset,
unsigned long fileNo = 0,
int index = -1);
876 uint32_t CalculateWaveDataChecksum();
879 inline file_offset_t GuessSize(file_offset_t samples) {
886 const file_offset_t size =
887 BitDepth == 24 ? samples + (samples >> 1) + (samples >> 8) * 13
888 : samples + (samples >> 10) * 5;
896 inline file_offset_t WorstCaseMaxSamples(
buffer_t* pDecompressionBuffer) {
900 void ScanCompressedSample();
938 int GetDimensionRegionIndexByValue(
const uint DimValues[8]);
947 virtual void SetKeyRange(uint16_t Low, uint16_t High) OVERRIDE;
953 void UpdateVelocityTable();
954 Sample* GetSampleFromWavePool(
unsigned int WavePoolTableIndex,
progress_t* pProgress = NULL);
955 void CopyAssign(
const Region* orig,
const std::map<Sample*,Sample*>* mSamples);
960 bool UsesAnyGigFormatExtension()
const;
1009 virtual void UpdateChunks(uint8_t* pData)
const = 0;
1031 uint8_t TriggerPoint;
1033 uint8_t VelSensitivity;
1043 void UpdateChunks(uint8_t* pData)
const OVERRIDE;
1083 void UpdateChunks(uint8_t* pData)
const OVERRIDE;
1110 const uint8_t& operator[](
int i)
const {
1113 uint8_t& operator[](
int i) {
1122 selector_key_switch,
1135 void UpdateChunks(uint8_t* pData)
const OVERRIDE;
1155 void UpdateChunks(uint8_t* pData)
const OVERRIDE { }
1208 void RemoveAllScriptReferences();
1214 RIFF::Chunk* pChunk;
1215 std::vector<uint8_t> data;
1234 Script* GetScript(uint index);
1236 void DeleteScript(
Script* pScript);
1248 std::list<
Script*>* pScripts;
1280 uint16_t EffectSend;
1283 bool PianoReleaseMode;
1288 using DLS::Resource::GetParent;
1290 Region* GetFirstRegion();
1293 void DeleteRegion(
Region* pRegion);
1298 Region* GetRegion(
unsigned int Key);
1303 void DeleteMidiRule(
int i);
1305 Script* GetScriptOfSlot(uint index);
1306 void AddScriptSlot(
Script* pScript,
bool bypass =
false);
1307 void SwapScriptSlots(uint index1, uint index2);
1308 void RemoveScriptSlot(uint index);
1309 void RemoveScript(
Script* pScript);
1310 uint ScriptSlotCount()
const;
1311 bool IsScriptSlotBypassed(uint index);
1312 void SetScriptSlotBypassed(uint index,
bool bBypass);
1313 bool IsScriptPatchVariableSet(
int slot, String variable);
1314 std::map<String,String> GetScriptPatchVariables(
int slot);
1315 String GetScriptPatchVariable(
int slot, String variable);
1316 void SetScriptPatchVariable(
int slot, String variable, String value);
1317 void UnsetScriptPatchVariable(
int slot = -1, String variable =
"");
1324 void UpdateRegionKeyTable();
1326 void UpdateScriptFileOffsets();
1330 struct _ScriptPooolEntry {
1331 uint32_t fileOffset;
1334 struct _ScriptPooolRef {
1338 typedef std::array<uint8_t,16> _UUID;
1339 typedef std::map<String,String> _PatchVars;
1340 typedef std::map<int,_PatchVars> _VarsBySlot;
1341 typedef std::map<_UUID,_VarsBySlot> _VarsByScript;
1342 MidiRule** pMidiRules;
1343 std::vector<_ScriptPooolEntry> scriptPoolFileOffsets;
1344 std::vector<_ScriptPooolRef>* pScriptRefs;
1345 _VarsByScript scriptVars;
1347 _VarsByScript stripScriptVars();
1348 bool ReferencesScriptWithUuid(
const _UUID& uuid);
1349 bool UsesAnyGigFormatExtension()
const;
1367 Sample* GetFirstSample();
1369 void AddSample(
Sample* pSample);
1379 RIFF::Chunk* pNameChunk;
1432 using DLS::Resource::GetParent;
1443 Sample* GetSample(uint index);
1445 size_t CountSamples();
1446 void DeleteSample(
Sample* pSample);
1452 size_t CountInstruments();
1453 void DeleteInstrument(
Instrument* pInstrument);
1454 Group* GetFirstGroup();
1455 Group* GetNextGroup();
1459 void DeleteGroup(
Group* pGroup);
1460 void DeleteGroupOnly(
Group* pGroup);
1461 void SetAutoLoad(
bool b);
1463 void AddContentOf(
File* pFile);
1472 virtual void LoadSamples() OVERRIDE;
1473 virtual
void LoadInstruments() OVERRIDE;
1474 virtual
void LoadGroups();
1475 virtual
void UpdateFileOffsets() OVERRIDE;
1477 virtual
void LoadSamples(
progress_t* pProgress);
1478 virtual
void LoadInstruments(
progress_t* pProgress);
1479 virtual
void LoadScriptGroups();
1480 void SetSampleChecksum(
Sample* pSample, uint32_t crc);
1481 uint32_t GetSampleChecksum(
Sample* pSample);
1482 uint32_t GetSampleChecksumByIndex(
int index);
1483 bool VerifySampleChecksumTable();
1484 bool RebuildSampleChecksumTable();
1485 int GetWaveTableIndexOf(
gig::
Sample* pSample);
1492 std::list<
Group*>* pGroups;
1493 std::list<
Group*>::iterator GroupsIterator;
1497 bool UsesAnyGigFormatExtension() const;
1512 void PrintMessage();
1518 size_t enumCount(
const std::type_info& type);
1519 const char*
enumKey(
const std::type_info& type,
size_t value);
1520 bool enumKey(
const std::type_info& type, String key);
1521 const char**
enumKeys(
const std::type_info& type);
1524 const char*
enumKey(String typeName,
size_t value);
1525 bool enumKey(String typeName, String key);
1526 const char**
enumKeys(String typeName);
version_t * pVersion
Points to a version_t structure if the file provided a version number else is set to NULL.
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 Instruments
Reflects the number of available Instrument objects.
virtual void Save(const String &Path, progress_t *pProgress=NULL)
Save changes to another file.
RIFF::File * GetRiffFile()
Returns the underlying RIFF::File used for persistency of this DLS::File object.
String GetFileName()
File name of this DLS file.
uint8_t MIDIBankFine
Reflects the MIDI Bank number for MIDI Control Change 32 (bank 1 - 128).
uint8_t MIDIBankCoarse
Reflects the MIDI Bank number for MIDI Control Change 0 (bank 1 - 128).
bool IsDrum
Indicates if the Instrument is a drum type, as they differ in the synthesis model of DLS from melodic...
uint32_t Regions
Reflects the number of Region defintions this Instrument has.
uint16_t MIDIBank
Reflects combination of MIDIBankCoarse and MIDIBankFine (bank 1 - bank 16384). Do not change this val...
uint32_t MIDIProgram
Specifies the MIDI Program Change Number this Instrument should be assigned to.
Defines Region information of an Instrument.
Info * pInfo
Points (in any case) to an Info object, providing additional, optional infos and comments.
dlsid_t * pDLSID
Points to a dlsid_t structure if the file provided a DLS ID else is NULL.
Encapsulates sample waves used for playback.
uint16_t BitDepth
Size of each sample per channel (only if known sample data format is used, 0 otherwise).
uint16_t Channels
Number of channels represented in the waveform data, e.g. 1 for mono, 2 for stereo (defaults to 1=mon...
Abstract base class which provides mandatory informations about sample players in general.
void AddSampleLoop(sample_loop_t *pLoopDef)
Adds a new sample loop with the provided loop definition.
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.
void DeleteSampleLoop(sample_loop_t *pLoopDef)
Deletes an existing sample loop.
Abstract base class for all classes using RIFF::Chunks for persistency.
Destination container for serialization, and source container for deserialization.
Encapsulates articulation informations of a dimension region.
uint8_t VelocityResponseCurveScaling
0 - 127 (usually you don't have to interpret this parameter, use GetVelocityAttenuation() instead).
vcf_cutoff_ctrl_t VCFCutoffController
Specifies which external controller has influence on the filter cutoff frequency.
void SetReleaseVelocityResponseDepth(uint8_t depth)
Updates the respective member variable and the lookup table / cache that depends on this value.
uint8_t VelocityResponseDepth
Dynamic range of velocity affecting amplitude (0 - 4) (usually you don't have to interpret this param...
bool EG2InfiniteSustain
If true, instead of going into Decay2 phase, Decay1 level will be hold until note will be released.
void SetVCFCutoffController(vcf_cutoff_ctrl_t controller)
Updates the respective member variable and the lookup table / cache that depends on this value.
eg2_ctrl_t EG2Controller
MIDI Controller which has influence on filter cutoff EG parameters (attack, decay,...
double EG2Release
Release time of the filter cutoff EG (0.000 - 60.000s).
eg1_ctrl_t EG1Controller
MIDI Controller which has influence on sample amplitude EG parameters (attack, decay,...
vcf_type_t VCFType
Defines the general filter characteristic (lowpass, highpass, bandpass, etc.).
double LFO3Phase
[gig extension]: Phase displacement of the pitch LFO's wave form (0.0° - 360.0°).
bool LFO3Sync
If set to true only one LFO should be used for all voices.
uint8_t VCFVelocityDynamicRange
0x04 = lowest, 0x00 = highest .
lfo3_ctrl_t LFO3Controller
MIDI Controller which controls the sample pitch LFO.
double EG1Decay1
Decay time of the sample amplitude EG (0.000 - 60.000s).
bool PitchTrack
If true: sample will be pitched according to the key position (this will be disabled for drums for ex...
double SampleAttenuation
Sample volume (calculated from DLS::Sampler::Gain)
uint8_t VCFVelocityScale
(0-127) Amount velocity controls VCF cutoff frequency (only if no other VCF cutoff controller is defi...
virtual void CopyAssign(const DimensionRegion *orig)
Make a (semi) deep copy of the DimensionRegion object given by orig and assign it to this object.
uint8_t EG1ControllerDecayInfluence
Amount EG1 Controller has influence on the EG1 Decay time (0 - 3, where 0 means off).
eg_opt_t EG1Options
[gig extension]: Behavior options which should be used for envelope generator 1 (volume amplitude EG)...
uint8_t EG2ControllerDecayInfluence
Amount EG2 Controller has influence on the EG2 Decay time (0 - 3, where 0 means off).
bool EG1InfiniteSustain
If true, instead of going into Decay2 phase, Decay1 level will be hold until note will be released.
double EG2Decay1
Decay time of the filter cutoff EG (0.000 - 60.000s).
bool LFO1FlipPhase
Inverts the polarity of the sample amplitude LFO wave, so it flips the wave form vertically.
int16_t EG3Depth
Depth of the sample pitch EG (-1200 - +1200).
uint8_t ChannelOffset
Audio output where the audio signal of the dimension region should be routed to (0 - 9).
Sample * pSample
Points to the Sample which is assigned to the dimension region.
lfo_wave_t LFO1WaveForm
[gig extension]: The fundamental wave form to be used by the amplitude LFO, e.g. sine,...
uint8_t EG2ControllerAttackInfluence
Amount EG2 Controller has influence on the EG2 Attack time (0 - 3, where 0 means off).
void SetVCFVelocityScale(uint8_t scaling)
Updates the respective member variable and the lookup table / cache that depends on this value.
lfo_wave_t LFO3WaveForm
[gig extension]: The fundamental wave form to be used by the pitch LFO, e.g. sine,...
int16_t LFO3ControlDepth
Controller depth of the sample pitch LFO (-1200 - +1200 cents).
uint8_t EG2ControllerReleaseInfluence
Amount EG2 Controller has influence on the EG2 Release time (0 - 3, where 0 means off).
uint8_t EG1ControllerAttackInfluence
Amount EG1 Controller has influence on the EG1 Attack time (0 - 3, where 0 means off).
void SetReleaseVelocityResponseCurve(curve_type_t curve)
Updates the respective member variable and the lookup table / cache that depends on this value.
lfo2_ctrl_t LFO2Controller
MIDI Controlle which controls the filter cutoff LFO.
uint8_t VCFKeyboardTrackingBreakpoint
See VCFKeyboardTracking (0 - 127).
bool VCFResonanceDynamic
If true: Increases the resonance Q according to changes of controllers that actually control the VCF ...
double LFO2Phase
[gig extension]: Phase displacement of the filter cutoff LFO's wave form (0.0° - 360....
uint8_t DimensionUpperLimits[8]
gig3: defines the upper limit of the dimension values for this dimension region. In case you wondered...
uint8_t EG1ControllerReleaseInfluence
Amount EG1 Controller has influence on the EG1 Release time (0 - 3, where 0 means off).
uint8_t VCFResonance
Firm internal filter resonance weight.
uint16_t EG1Sustain
Sustain value of the sample amplitude EG (0 - 1000 permille).
dim_bypass_ctrl_t DimensionBypass
If defined, the MIDI controller can switch on/off the dimension in realtime.
bool EG2ControllerInvert
Invert values coming from defined EG2 controller.
void SetVCFVelocityDynamicRange(uint8_t range)
Updates the respective member variable and the lookup table / cache that depends on this value.
uint8_t * VelocityTable
For velocity dimensions with custom defined zone ranges only: used for fast converting from velocity ...
bool LFO1Sync
If set to true only one LFO should be used for all voices.
double EG1Attack
Attack time of the sample amplitude EG (0.000 - 60.000s).
void SetVelocityResponseCurve(curve_type_t curve)
Updates the respective member variable and the lookup table / cache that depends on this value.
attenuation_ctrl_t AttenuationController
MIDI Controller which has influence on the volume level of the sample (or entire sample group).
double LFO1Phase
[gig extension]: Phase displacement of the amplitude LFO's wave form (0.0° - 360.0°).
virtual void UpdateChunks(progress_t *pProgress)
Apply dimension region settings to the respective RIFF chunks.
double GetVelocityAttenuation(uint8_t MIDIKeyVelocity)
Returns the correct amplitude factor for the given MIDIKeyVelocity.
double LFO1Frequency
Frequency of the sample amplitude LFO (0.10 - 10.00 Hz).
curve_type_t VelocityResponseCurve
Defines a transformation curve to the incoming velocity values affecting amplitude (usually you don't...
uint16_t EG2Sustain
Sustain value of the filter cutoff EG (0 - 1000 permille).
uint16_t LFO2ControlDepth
Controller depth influencing filter cutoff LFO pitch (0 - 1200).
lfo_wave_t LFO2WaveForm
[gig extension]: The fundamental wave form to be used by the filter cutoff LFO, e....
bool VCFKeyboardTracking
If true: VCF cutoff frequence will be dependend to the note key position relative to the defined brea...
uint8_t AttenuationControllerThreshold
0-127
double EG1Release
Release time of the sample amplitude EG (0.000 - 60.000s).
bool NoNoteOffReleaseTrigger
[gig extension]: If true then don't play a release trigger sample on MIDI note-off events.
void SetVelocityResponseCurveScaling(uint8_t scaling)
Updates the respective member variable and the lookup table / cache that depends on this value.
uint8_t VelocityUpperLimit
Defines the upper velocity value limit of a velocity split (only if an user defined limit was set,...
bool EG1Hold
If true, Decay1 stage should be postponed until the sample reached the sample loop start.
uint8_t ReleaseVelocityResponseDepth
Dynamic range of release velocity affecting envelope time (0 - 4).
curve_type_t ReleaseVelocityResponseCurve
Defines a transformation curve to the incoming release veloctiy values affecting envelope times.
void SetVCFVelocityCurve(curve_type_t curve)
Updates the respective member variable and the lookup table / cache that depends on this value.
double EG1Decay2
Only if EG1InfiniteSustain == false: 2nd decay stage time of the sample amplitude EG (0....
bool InvertAttenuationController
Inverts the values coming from the defined Attenuation Controller.
uint16_t SampleStartOffset
Number of samples the sample start should be moved (0 - 2000).
double EG2Decay2
Only if EG2InfiniteSustain == false: 2nd stage decay time of the filter cutoff EG (0....
uint16_t LFO1InternalDepth
Firm pitch of the sample amplitude LFO (0 - 1200 cents).
bool EG1ControllerInvert
Invert values coming from defined EG1 controller.
lfo1_ctrl_t LFO1Controller
MIDI Controller which controls sample amplitude LFO.
bool VCFCutoffControllerInvert
Inverts values coming from the defined cutoff controller.
double LFO3Frequency
Frequency of the sample pitch LFO (0.10 - 10.00 Hz).
uint8_t ReleaseTriggerDecay
0 - 8
double EG3Attack
Attack time of the sample pitch EG (0.000 - 10.000s).
virtual void SetGain(int32_t gain)
Updates the respective member variable and updates SampleAttenuation which depends on this value.
double LFO2Frequency
Frequency of the filter cutoff LFO (0.10 - 10.00 Hz).
bool SustainDefeat
If true: Sustain pedal will not hold a note.
eg_opt_t EG2Options
[gig extension]: Behavior options which should be used for envelope generator 2 (filter cutoff EG).
bool LFO2FlipPhase
Inverts the polarity of the filter cutoff LFO wave, so it flips the wave form vertically.
sust_rel_trg_t SustainReleaseTrigger
[gig extension]: Whether a sustain pedal up event shall play release trigger sample.
bool MSDecode
Gigastudio flag: defines if Mid Side Recordings should be decoded.
bool VCFEnabled
If filter should be used.
uint16_t LFO1ControlDepth
Controller depth influencing sample amplitude LFO pitch (0 - 1200 cents).
int8_t Pan
Panorama / Balance (-64..0..63 <-> left..middle..right)
void SetVelocityResponseDepth(uint8_t depth)
Updates the respective member variable and the lookup table / cache that depends on this value.
bool LFO2Sync
If set to true only one LFO should be used for all voices.
uint16_t EG1PreAttack
Preattack value of the sample amplitude EG (0 - 1000 permille).
bool SelfMask
If true: high velocity notes will stop low velocity notes at the same note, with that you can save vo...
uint8_t VCFCutoff
Max. cutoff frequency.
curve_type_t VCFVelocityCurve
Defines a transformation curve for the incoming velocity values, affecting the VCF.
double EG2Attack
Attack time of the filter cutoff EG (0.000 - 60.000s).
uint16_t EG2PreAttack
Preattack value of the filter cutoff EG (0 - 1000 permille).
uint16_t LFO2InternalDepth
Firm pitch of the filter cutoff LFO (0 - 1200 cents).
vcf_res_ctrl_t VCFResonanceController
Specifies which external controller has influence on the filter resonance Q.
int16_t LFO3InternalDepth
Firm depth of the sample pitch LFO (-1200 - +1200 cents).
bool LFO3FlipPhase
[gig extension]: Inverts the polarity of the pitch LFO wave, so it flips the wave form vertically (NO...
Will be thrown whenever a gig specific error occurs while trying to access a Gigasampler File.
Provides convenient access to Gigasampler/GigaStudio .gig files.
static const DLS::version_t VERSION_3
Reflects Gigasampler file format version 3.0 (2003-03-31).
static const DLS::version_t VERSION_2
Reflects Gigasampler file format version 2.0 (1998-06-28).
static const DLS::version_t VERSION_4
Reflects Gigasampler file format version 4.0 (2007-10-12).
Group of Gigasampler samples.
String Name
Stores the name of this Group.
Provides access to a Gigasampler/GigaStudio instrument.
uint16_t PitchbendRange
Number of semitones pitchbend controller can pitch (default is 2).
range_t DimensionKeyRange
0-127 (where 0 means C1 and 127 means G9)
MIDI rule to automatically cycle through specified sequences of different articulations.
uint8_t Controller
CC number for controller selector.
struct gig::MidiRuleAlternator::pattern_t pPatterns[32]
A pattern is a sequence of articulation numbers.
range_t KeySwitchRange
Key range for key switch selector.
bool Polyphonic
If alternator should step forward only when all notes are off.
selector_t Selector
Method by which pattern is chosen.
uint8_t Patterns
Number of alternator patterns.
range_t PlayRange
Key range of the playable keys in the instrument.
uint8_t Articulations
Number of articulations in the instrument.
String pArticulations[32]
Names of the articulations.
bool Chained
If all patterns should be chained together.
MIDI rule for triggering notes by control change events.
uint8_t ControllerNumber
MIDI controller number.
uint8_t Triggers
Number of triggers.
MIDI rule for instruments with legato samples.
uint16_t ThresholdTime
Maximum time (ms) between two notes that should be played legato.
uint8_t LegatoSamples
Number of legato samples per key in each direction (always 12)
uint8_t BypassKey
Key to be used to bypass the sustain note.
uint8_t AltSustain1Key
Key triggering alternate sustain samples.
bool BypassUseController
If a controller should be used to bypass the sustain note.
uint8_t AltSustain2Key
Key triggering a second set of alternate sustain samples.
uint16_t ReleaseTime
Release time.
range_t KeyRange
Key range for legato notes.
uint8_t ReleaseTriggerKey
Key triggering release samples.
uint8_t BypassController
Controller to be used to bypass the sustain note.
A MIDI rule not yet implemented by libgig.
Abstract base class for all MIDI rules.
Defines Region information of a Gigasampler/GigaStudio instrument.
DimensionRegion * pDimensionRegions[256]
Pointer array to the 32 (gig2) or 256 (gig3) possible dimension regions (reflects NULL for dimension ...
unsigned int Dimensions
Number of defined dimensions, do not alter!
dimension_def_t pDimensionDefinitions[8]
Defines the five (gig2) or eight (gig3) possible dimensions (the dimension's controller and number of...
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 SetDimensionType(dimension_t oldType, dimension_t newType)
Change type of an existing dimension.
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...
void SplitDimensionZone(dimension_t type, int zone)
Divide split zone of a dimension in two (increment zone amount).
DimensionRegion * GetDimensionRegionByValue(const uint DimValues[8])
Use this method in your audio engine to get the appropriate dimension region with it's articulation d...
void DeleteDimensionZone(dimension_t type, int zone)
Delete one split zone of a dimension (decrement zone amount).
void AddDimension(dimension_def_t *pDimDef)
Einstein would have dreamed of it - create a new dimension.
unsigned int Layers
Amount of defined layers (1 - 32). A value of 1 actually means no layering, a value > 1 means there i...
Sample * GetSample()
Returns pointer address to the Sample referenced with this region.
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.
DimensionRegion * GetDimensionRegionByBit(const uint8_t DimBits[8])
Returns the appropriate DimensionRegion for the given dimension bit numbers (zone index).
void DeleteDimension(dimension_def_t *pDimDef)
Delete an existing dimension.
virtual void UpdateChunks(progress_t *pProgress)
Apply Region settings and all its DimensionRegions to the respective RIFF chunks.
uint32_t DimensionRegions
Total number of DimensionRegions this Region contains, do not alter!
Encapsulates sample waves of Gigasampler/GigaStudio files used for playback.
static void DestroyDecompressionBuffer(buffer_t &DecompressionBuffer)
Free decompression buffer, previously created with CreateDecompressionBuffer().
file_offset_t SamplesInLastFrame
For compressed samples only: length of the last sample frame.
loop_type_t LoopType
Caution: Use the respective field in the DimensionRegion instead of this one! (Intended purpose: The ...
uint32_t Loops
Caution: Use the respective field in the DimensionRegion instead of this one! (Intended purpose: Numb...
bool VerifyWaveData(uint32_t *pActually=NULL)
Checks the integrity of this sample's raw audio wave data.
uint32_t LoopFraction
The fractional value specifies a fraction of a sample at which to loop. This allows a loop to be fine...
unsigned long FileNo
File number (> 0 when sample is stored in an extension file, 0 when it's in the gig)
void CopyAssignMeta(const Sample *orig)
Make a (semi) deep copy of the Sample object given by orig (without the actual waveform data) and ass...
uint32_t LoopStart
Caution: Use the respective field in the DimensionRegion instead of this one! (Intended purpose: The ...
uint32_t SMPTEOffset
The SMPTE Offset value specifies the time offset to be used for the synchronization / calibration to ...
buffer_t RAMCache
Buffers samples (already uncompressed) in RAM.
file_offset_t * FrameTable
For positioning within compressed samples only: stores the offset values for each frame.
uint32_t Product
Specifies the MIDI model ID defined by the manufacturer corresponding to the Manufacturer field....
uint32_t LoopEnd
Caution: Use the respective field in the DimensionRegion instead of this one! (Intended purpose: The ...
Group * pGroup
pointer to the Group this sample belongs to (always not-NULL)
file_offset_t WorstCaseFrameSize
For compressed samples only: size (in bytes) of the largest possible sample frame.
static buffer_t CreateDecompressionBuffer(file_offset_t MaxReadSize)
Allocates a decompression buffer for streaming (compressed) samples with Sample::Read().
Sample(File *pFile, RIFF::List *waveList, file_offset_t WavePoolOffset, unsigned long fileNo=0, int index=-1)
Constructor.
void Resize(file_offset_t NewSize)
Resize sample.
file_offset_t SamplePos
For compressed samples only: stores the current position (in sample points).
file_offset_t FrameOffset
Current offset (sample points) in current sample frame (for decompression only).
bool Compressed
If the sample wave is compressed (probably just interesting for instrument and sample editors,...
Group * GetGroup() const
Returns pointer to the Group this Sample belongs to.
uint32_t MIDIUnityNote
Specifies the musical note at which the sample will be played at it's original sample rate.
uint32_t crc
Reflects CRC-32 checksum of the raw sample data at the last time when the sample's raw wave form data...
buffer_t LoadSampleData()
Loads (and uncompresses if needed) the whole sample wave into RAM.
void CopyAssignWave(const Sample *orig)
Should be called after CopyAssignMeta() and File::Save() sequence.
smpte_format_t SMPTEFormat
Specifies the Society of Motion Pictures and Television E time format used in the following SMPTEOffs...
file_offset_t GetPos() const
Returns the current position in the sample (in sample points).
static size_t Instances
Number of instances of class 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).
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...
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 ...
bool Dithered
For 24-bit compressed samples only: if dithering was used during compression with bit reduction.
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...
uint32_t LoopID
Specifies the unique ID that corresponds to one of the defined cue points in the cue point list (only...
static buffer_t InternalDecompressionBuffer
Buffer used for decompression as well as for truncation of 24 Bit -> 16 Bit samples.
uint32_t SamplePeriod
Specifies the duration of time that passes during the playback of one sample in nanoseconds (normally...
uint32_t LoopPlayCount
Number of times the loop should be played (a value of 0 = infinite).
buffer_t LoadSampleDataWithNullSamplesExtension(uint NullSamplesCount)
Loads (and uncompresses if needed) the whole sample wave into RAM.
void ReleaseSampleData()
Frees the cached sample from RAM if loaded with LoadSampleData() previously.
virtual void UpdateChunks(progress_t *pProgress)
Apply sample and its settings to the respective RIFF chunks.
file_offset_t Write(void *pBuffer, file_offset_t SampleCount)
Write sample wave data.
uint32_t Manufacturer
Specifies the MIDI Manufacturer's Association (MMA) Manufacturer code for the sampler intended to rec...
uint32_t TruncatedBits
For 24-bit compressed samples only: number of bits truncated during compression (0,...
buffer_t GetCache()
Returns current cached sample points.
uint32_t FineTune
Specifies the fraction of a semitone up from the specified MIDI unity note field. A value of 0x800000...
file_offset_t SamplesPerFrame
For compressed samples only: number of samples in a full sample frame.
uint32_t LoopSize
Caution: Use the respective fields in the DimensionRegion instead of this one! (Intended purpose: Len...
Group of instrument scripts (gig format extension).
String Name
Name of this script group. For example to be displayed in an instrument editor.
Real-time instrument script (gig format extension).
Compression_t Compression
Whether the script was/should be compressed, and if so, which compression algorithm shall be used.
@ COMPRESSION_NONE
Is not compressed at all (default).
void SetGroup(ScriptGroup *pGroup)
Move this script from its current ScriptGroup to another ScriptGroup given by pGroup.
Language_t Language
Programming language and dialect the script is written in.
Encoding_t Encoding
Format the script's source code text is encoded with.
uint8_t Uuid[16]
Persistent Universally Unique Identifier of this script, which remains identical after any changes to...
@ ENCODING_ASCII
Standard 8 bit US ASCII character encoding (default).
void UpdateChunks(progress_t *pProgress)
Apply this script to the respective RIFF chunks.
@ LANGUAGE_NKSP
NKSP stands for "Is Not KSP" (default). Refer to the NKSP Reference Manual for details about this scr...
bool Bypass
Global bypass: if enabled, this script shall not be executed by the sampler for any instrument.
String Name
Arbitrary name of the script, which may be displayed i.e. in an instrument editor.
void DeleteChunks()
Remove all RIFF chunks associated with this Script object.
void SetScriptAsText(const String &text)
Replaces the current script with the new script source code text given by text.
String GetScriptAsText()
Returns the current script (i.e.
void CopyAssign(const Script *orig)
Make a (semi) deep copy of the Script object given by orig and assign it to this object.
ScriptGroup * GetGroup() const
Returns the script group this script currently belongs to.
void GenerateUuid()
Generate a new Universally Unique Identifier (UUID) for this script.
DLS specific classes and definitions.
RIFF specific classes and definitions.
stream_whence_t
File stream position dependent to these relations.
uint64_t file_offset_t
Type used by libgig for handling file positioning during file I/O tasks.
Serialization / deserialization framework.
Gigasampler/GigaStudio specific classes and definitions.
size_t enumValue(String key)
Numeric value of enum constant.
dim_bypass_ctrl_t
Dimensions allow to bypass one of the following controllers.
@ dim_bypass_ctrl_94
Effect 4 Depth (MIDI Controller 94)
@ dim_bypass_ctrl_95
Effect 5 Depth (MIDI Controller 95)
@ dim_bypass_ctrl_none
No controller bypass.
vcf_res_ctrl_t
Defines how the filter resonance is controlled by.
@ vcf_res_ctrl_genpurpose5
General Purpose Controller 5 (Button, MIDI Controller 80)
@ vcf_res_ctrl_none
No MIDI controller assigned for filter resonance.
@ vcf_res_ctrl_genpurpose3
General Purpose Controller 3 (Slider, MIDI Controller 18)
@ vcf_res_ctrl_genpurpose6
General Purpose Controller 6 (Button, MIDI Controller 81)
@ vcf_res_ctrl_genpurpose4
General Purpose Controller 4 (Slider, MIDI Controller 19)
String libraryName()
Returns the name of this C++ library.
smpte_format_t
Society of Motion Pictures and Television E time format.
@ smpte_format_30_frames
30 frames per second
@ smpte_format_24_frames
24 frames per second
@ smpte_format_no_offset
no SMPTE offset
@ smpte_format_25_frames
25 frames per second
@ smpte_format_30_frames_dropping
30 frames per second with frame dropping (30 drop)
curve_type_t
Defines the shape of a function graph.
@ curve_type_nonlinear
Non-linear curve type.
@ curve_type_unknown
Unknown curve type.
@ curve_type_linear
Linear curve type.
@ curve_type_special
Special curve type.
lfo1_ctrl_t
Defines how LFO1 is controlled by.
@ lfo1_ctrl_breath
Only controlled by external breath controller.
@ lfo1_ctrl_modwheel
Only controlled by external modulation wheel.
@ lfo1_ctrl_internal_modwheel
Controlled internally and by external modulation wheel.
@ lfo1_ctrl_internal_breath
Controlled internally and by external breath controller.
@ lfo1_ctrl_internal
Only internally controlled.
sust_rel_trg_t
Defines behaviour of release triggered sample(s) on sustain pedal up event.
@ sust_rel_trg_maxvelocity
Play release trigger sample(s) on sustain pedal up, and simply use 127 as MIDI velocity for playback.
@ sust_rel_trg_none
No release triggered sample(s) are played on sustain pedal up (default).
@ sust_rel_trg_keyvelocity
Play release trigger sample(s) on sustain pedal up, and use the key`s last MIDI note-on velocity for ...
const char ** enumKeys(String typeName)
All element names of enum type.
leverage_ctrl_t eg1_ctrl_t
Defines controller influencing envelope generator 1.
vcf_cutoff_ctrl_t
Defines how the filter cutoff frequency is controlled by.
@ vcf_cutoff_ctrl_none2
The difference between none and none2 is unknown.
@ vcf_cutoff_ctrl_softpedal
Soft Pedal (MIDI Controller 67)
@ vcf_cutoff_ctrl_aftertouch
Key Pressure.
@ vcf_cutoff_ctrl_foot
Foot Pedal (Coarse, MIDI Controller 4)
@ vcf_cutoff_ctrl_genpurpose8
General Purpose Controller 8 (Button, MIDI Controller 83)
@ vcf_cutoff_ctrl_effect2
Effect Controller 2 (Coarse, MIDI Controller 13)
@ vcf_cutoff_ctrl_genpurpose7
General Purpose Controller 7 (Button, MIDI Controller 82)
@ vcf_cutoff_ctrl_effect1
Effect Controller 1 (Coarse, MIDI Controller 12)
@ vcf_cutoff_ctrl_breath
Breath Controller (Coarse, MIDI Controller 2)
@ vcf_cutoff_ctrl_sustainpedal
Sustain Pedal (MIDI Controller 64)
@ vcf_cutoff_ctrl_modwheel
Modulation Wheel (MIDI Controller 1)
@ vcf_cutoff_ctrl_none
No MIDI controller assigned for filter cutoff frequency.
size_t enumCount(String typeName)
Amount of elements in given enum type.
lfo_wave_t
Defines the wave form type used by an LFO (gig format extension).
@ lfo_wave_square
Square wave form.
@ lfo_wave_triangle
Triangle wave form.
@ lfo_wave_sine
Sine (sinus) wave form (this is the default wave form).
@ lfo_wave_saw
Saw (up) wave form (saw down wave form can be achieved by flipping the phase).
split_type_t
Intended for internal usage: will be used to convert a dimension value into the corresponding dimensi...
@ split_type_bit
dimension values are already the sought bit number
@ split_type_normal
dimension value between 0-127
String libraryVersion()
Returns version of this C++ library.
leverage_ctrl_t attenuation_ctrl_t
Defines controller influencing attenuation.
loop_type_t
Standard types of sample loops.
@ loop_type_bidirectional
Alternating loop (forward/backward, also known as Ping Pong)
@ loop_type_backward
Loop backward (reverse)
@ loop_type_normal
Loop forward (normal)
lfo3_ctrl_t
Defines how LFO3 is controlled by.
@ lfo3_ctrl_internal_aftertouch
Controlled internally and by aftertouch controller.
@ lfo3_ctrl_internal_modwheel
Controlled internally and by external modulation wheel.
@ lfo3_ctrl_aftertouch
Only controlled by aftertouch controller.
@ lfo3_ctrl_modwheel
Only controlled by external modulation wheel.
@ lfo3_ctrl_internal
Only internally controlled.
lfo2_ctrl_t
Defines how LFO2 is controlled by.
@ lfo2_ctrl_internal
Only internally controlled.
@ lfo2_ctrl_modwheel
Only controlled by external modulation wheel.
@ lfo2_ctrl_internal_modwheel
Controlled internally and by external modulation wheel.
@ lfo2_ctrl_foot
Only controlled by external foot controller.
@ lfo2_ctrl_internal_foot
Controlled internally and by external foot controller.
leverage_ctrl_t eg2_ctrl_t
Defines controller influencing envelope generator 2.
const char * enumKey(String typeName, size_t value)
Enum constant name of numeric value.
dimension_t
Defines the type of dimension, that is how the dimension zones (and thus how the dimension regions ar...
@ dimension_keyboard
Dimension for keyswitching.
@ dimension_genpurpose5
General Purpose Controller 5 (Button, MIDI Controller 80)
@ dimension_genpurpose8
General Purpose Controller 8 (Button, MIDI Controller 83)
@ dimension_roundrobinkeyboard
Different samples triggered each time a note is played, any key advances the counter.
@ dimension_samplechannel
If used sample has more than one channel (thus is not mono).
@ dimension_effect1
Effect Controller 1 (Coarse, MIDI Controller 12)
@ dimension_smartmidi
For MIDI tools like legato and repetition mode.
@ dimension_breath
Breath Controller (Coarse, MIDI Controller 2)
@ dimension_genpurpose2
General Purpose Controller 2 (Slider, MIDI Controller 17)
@ dimension_effect5depth
Effect 5 Depth (MIDI Controller 95)
@ dimension_genpurpose4
General Purpose Controller 4 (Slider, MIDI Controller 19)
@ dimension_releasetrigger
Special dimension for triggering samples on releasing a key.
@ dimension_effect3depth
Effect 3 Depth (MIDI Controller 93)
@ dimension_sustainpedal
Sustain Pedal (MIDI Controller 64)
@ dimension_genpurpose7
General Purpose Controller 7 (Button, MIDI Controller 82)
@ dimension_foot
Foot Pedal (Coarse, MIDI Controller 4)
@ dimension_effect2
Effect Controller 2 (Coarse, MIDI Controller 13)
@ dimension_portamento
Portamento (MIDI Controller 65)
@ dimension_softpedal
Soft Pedal (MIDI Controller 67)
@ dimension_velocity
Key Velocity (this is the only dimension in gig2 where the ranges can exactly be defined).
@ dimension_random
Different samples triggered each time a note is played, random order.
@ dimension_effect1depth
Effect 1 Depth (MIDI Controller 91)
@ dimension_none
Dimension not in use.
@ dimension_portamentotime
Portamento Time (Coarse, MIDI Controller 5)
@ dimension_sostenutopedal
Sostenuto Pedal (MIDI Controller 66)
@ dimension_effect2depth
Effect 2 Depth (MIDI Controller 92)
@ dimension_modwheel
Modulation Wheel (MIDI Controller 1)
@ dimension_roundrobin
Different samples triggered each time a note is played, dimension regions selected in sequence.
@ dimension_genpurpose3
General Purpose Controller 3 (Slider, MIDI Controller 18)
@ dimension_layer
For layering of up to 8 instruments (and eventually crossfading of 2 or 4 layers).
@ dimension_effect4depth
Effect 4 Depth (MIDI Controller 94)
@ dimension_genpurpose6
General Purpose Controller 6 (Button, MIDI Controller 81)
@ dimension_channelaftertouch
Channel Key Pressure.
@ dimension_genpurpose1
General Purpose Controller 1 (Slider, MIDI Controller 16)
vcf_type_t
Audio filter types.
@ vcf_type_lowpass_1p
[gig extension]: 1-pole lowpass filter type (LinuxSampler).
@ vcf_type_lowpassturbo
More poles than normal lowpass (GigaStudio).
@ vcf_type_highpass_1p
[gig extension]: 1-pole highpass filter type (LinuxSampler).
@ vcf_type_bandpass
Bandpass filter type (GigaStudio).
@ vcf_type_bandreject
Band reject filter type (GigaStudio).
@ vcf_type_lowpass_6p
[gig extension]: 6-pole lowpass filter type (LinuxSampler).
@ vcf_type_highpass_2p
[gig extension]: 2-pole highpass filter type (LinuxSampler).
@ vcf_type_highpass
Highpass filter type (GigaStudio).
@ vcf_type_lowpass_2p
[gig extension]: 2-pole lowpass filter type (LinuxSampler).
@ vcf_type_highpass_4p
[gig extension]: 4-pole highpass filter type (LinuxSampler).
@ vcf_type_lowpass_4p
[gig extension]: 4-pole lowpass filter type (LinuxSampler).
@ vcf_type_bandreject_2p
[gig extension]: 2-pole bandreject filter type (LinuxSampler).
@ vcf_type_lowpass
Standard lowpass filter type (GigaStudio).
@ vcf_type_highpass_6p
[gig extension]: 6-pole highpass filter type (LinuxSampler).
@ vcf_type_bandpass_2p
[gig extension]: 2-pole bandpass filter type (LinuxSampler).
Quadtuple version number ("major.minor.release.build").
Used for indicating the progress of a certain task.
Pointer address and size of a buffer.
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...
void * pStart
Points to the beginning of the buffer.
file_offset_t Size
Size of the actual data in the buffer in bytes.
Defines the envelope of a crossfade.
uint8_t in_end
End position of fade in.
uint8_t in_start
Start position of fade in.
uint8_t out_end
End postition of fade out.
uint8_t out_start
Start position of fade out.
General dimension definition.
dimension_t dimension
Specifies which source (usually a MIDI controller) is associated with the dimension.
uint8_t zones
Number of zones the dimension has.
uint8_t bits
Number of "bits" (1 bit = 2 splits/zones, 2 bit = 4 splits/zones, 3 bit = 8 splits/zones,...
float zone_size
Intended for internal usage: reflects the size of each zone (128/zones) for normal split types only,...
split_type_t split_type
Intended for internal usage: will be used to convert a dimension value into the corresponding dimensi...
Defines behavior options for envelope generators (gig format extension).
bool AttackHoldCancel
Whether the "attack hold" stage is cancelled when receiving a note-off (default: true).
bool Decay1Cancel
Whether the "decay 1" stage is cancelled when receiving a note-off (default: true).
bool ReleaseCancel
Whether the "release" stage is cancelled when receiving a note-on (default: true).
bool AttackCancel
Whether the "attack" stage is cancelled when receiving a note-off (default: true).
bool Decay2Cancel
Whether the "decay 2" stage is cancelled when receiving a note-off (default: true).
Defines a controller that has a certain contrained influence on a particular synthesis parameter (use...
type_t
Defines possible controllers.
@ type_none
No controller defined.
@ type_velocity
Key Velocity.
@ type_controlchange
Ordinary MIDI control change controller, see field 'controller_number'.
@ type_channelaftertouch
Channel Key Pressure.
uint controller_number
MIDI controller number if this controller is a control change controller, 0 otherwise.
type_t type
Controller type.
Reflects the current playback state for a sample.
bool reverse
If playback direction is currently backwards (in case there is a pingpong or reverse loop defined).
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.
file_offset_t position
Current position within the sample.
Lower and upper limit of a range.
uint8_t high
High value of range.
uint8_t low
Low value of range.