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 // own gig format extension 53 # define LIST_TYPE_RTIS 0x52544953 // own gig format extension 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 // own gig format extension 64 # define CHUNK_ID_LSNM 0x4c534e4d // own gig format extension 65 # define CHUNK_ID_SCSL 0x5343534c // own gig format extension 66 # define CHUNK_ID_SCPV 0x53435056 // own gig format extension 67 # define CHUNK_ID_LSDE 0x4c534445 // own gig format extension 68 # define CHUNK_ID_3DDP 0x33646470 69 #else // little endian 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 // own gig format extension 75 # define LIST_TYPE_RTIS 0x53495452 // own gig format extension 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 // own gig format extension 86 # define CHUNK_ID_LSNM 0x4d4e534c // own gig format extension 87 # define CHUNK_ID_SCSL 0x4c534353 // own gig format extension 88 # define CHUNK_ID_SCPV 0x56504353 // own gig format extension 89 # define CHUNK_ID_LSDE 0x4544534c // own gig format extension 90 # define CHUNK_ID_3DDP 0x70646433 91 #endif // WORDS_BIGENDIAN 93 #ifndef GIG_DECLARE_ENUM 94 # define GIG_DECLARE_ENUM(type, ...) enum type { __VA_ARGS__ } 103 typedef std::string
String;
121 NullExtensionSize = 0;
140 smpte_format_no_offset = 0x00000000,
141 smpte_format_24_frames = 0x00000018,
142 smpte_format_25_frames = 0x00000019,
143 smpte_format_30_frames_dropping = 0x0000001D,
144 smpte_format_30_frames = 0x0000001E
152 curve_type_nonlinear = 0,
153 curve_type_linear = 1,
154 curve_type_special = 2,
155 curve_type_unknown = 0xffffffff
170 lfo_wave_triangle = 1,
180 dim_bypass_ctrl_none,
190 lfo3_ctrl_internal = 0x00,
191 lfo3_ctrl_modwheel = 0x01,
192 lfo3_ctrl_aftertouch = 0x02,
193 lfo3_ctrl_internal_modwheel = 0x03,
194 lfo3_ctrl_internal_aftertouch = 0x04
202 lfo2_ctrl_internal = 0x00,
203 lfo2_ctrl_modwheel = 0x01,
204 lfo2_ctrl_foot = 0x02,
205 lfo2_ctrl_internal_modwheel = 0x03,
206 lfo2_ctrl_internal_foot = 0x04
214 lfo1_ctrl_internal = 0x00,
215 lfo1_ctrl_modwheel = 0x01,
216 lfo1_ctrl_breath = 0x02,
217 lfo1_ctrl_internal_modwheel = 0x03,
218 lfo1_ctrl_internal_breath = 0x04
226 vcf_cutoff_ctrl_none = 0x00,
227 vcf_cutoff_ctrl_none2 = 0x01,
228 vcf_cutoff_ctrl_modwheel = 0x81,
229 vcf_cutoff_ctrl_effect1 = 0x8c,
230 vcf_cutoff_ctrl_effect2 = 0x8d,
231 vcf_cutoff_ctrl_breath = 0x82,
232 vcf_cutoff_ctrl_foot = 0x84,
233 vcf_cutoff_ctrl_sustainpedal = 0xc0,
234 vcf_cutoff_ctrl_softpedal = 0xc3,
235 vcf_cutoff_ctrl_genpurpose7 = 0xd2,
236 vcf_cutoff_ctrl_genpurpose8 = 0xd3,
237 vcf_cutoff_ctrl_aftertouch = 0x80
245 vcf_res_ctrl_none = 0xffffffff,
246 vcf_res_ctrl_genpurpose3 = 0,
247 vcf_res_ctrl_genpurpose4 = 1,
248 vcf_res_ctrl_genpurpose5 = 2,
249 vcf_res_ctrl_genpurpose6 = 3
267 type_channelaftertouch = 0x2f,
268 type_velocity = 0xff,
269 type_controlchange = 0xfe
309 dimension_none = 0x00,
310 dimension_samplechannel = 0x80,
311 dimension_layer = 0x81,
312 dimension_velocity = 0x82,
313 dimension_channelaftertouch = 0x83,
314 dimension_releasetrigger = 0x84,
315 dimension_keyboard = 0x85,
316 dimension_roundrobin = 0x86,
317 dimension_random = 0x87,
318 dimension_smartmidi = 0x88,
319 dimension_roundrobinkeyboard = 0x89,
320 dimension_modwheel = 0x01,
321 dimension_breath = 0x02,
322 dimension_foot = 0x04,
323 dimension_portamentotime = 0x05,
324 dimension_effect1 = 0x0c,
325 dimension_effect2 = 0x0d,
326 dimension_genpurpose1 = 0x10,
327 dimension_genpurpose2 = 0x11,
328 dimension_genpurpose3 = 0x12,
329 dimension_genpurpose4 = 0x13,
330 dimension_sustainpedal = 0x40,
331 dimension_portamento = 0x41,
332 dimension_sostenutopedal = 0x42,
333 dimension_softpedal = 0x43,
334 dimension_genpurpose5 = 0x30,
335 dimension_genpurpose6 = 0x31,
336 dimension_genpurpose7 = 0x32,
337 dimension_genpurpose8 = 0x33,
338 dimension_effect1depth = 0x5b,
339 dimension_effect2depth = 0x5c,
340 dimension_effect3depth = 0x5d,
341 dimension_effect4depth = 0x5e,
342 dimension_effect5depth = 0x5f
381 vcf_type_lowpass = 0x00,
382 vcf_type_lowpassturbo = 0xff,
383 vcf_type_bandpass = 0x01,
384 vcf_type_highpass = 0x02,
385 vcf_type_bandreject = 0x03,
386 vcf_type_lowpass_1p = 0x11,
387 vcf_type_lowpass_2p = 0x12,
388 vcf_type_lowpass_4p = 0x14,
389 vcf_type_lowpass_6p = 0x16,
390 vcf_type_highpass_1p = 0x21,
391 vcf_type_highpass_2p = 0x22,
392 vcf_type_highpass_4p = 0x24,
393 vcf_type_highpass_6p = 0x26,
394 vcf_type_bandpass_2p = 0x32,
395 vcf_type_bandreject_2p = 0x42
411 #else // little endian 416 #endif // WORDS_BIGENDIAN 479 sust_rel_trg_none = 0x00,
480 sust_rel_trg_maxvelocity = 0x01,
481 sust_rel_trg_keyvelocity = 0x02
628 uint8_t DimensionUpperLimits[8];
635 using DLS::Sampler::UnityNote;
636 using DLS::Sampler::FineTune;
642 double GetVelocityAttenuation(uint8_t MIDIKeyVelocity);
643 double GetVelocityRelease(uint8_t MIDIKeyVelocity);
644 double GetVelocityCutoff(uint8_t MIDIKeyVelocity);
646 void SetVelocityResponseDepth(uint8_t depth);
647 void SetVelocityResponseCurveScaling(uint8_t scaling);
648 void SetReleaseVelocityResponseCurve(
curve_type_t curve);
649 void SetReleaseVelocityResponseDepth(uint8_t depth);
652 void SetVCFVelocityDynamicRange(uint8_t range);
653 void SetVCFVelocityScale(uint8_t scaling);
654 Region* GetParent()
const;
659 virtual void SetGain(int32_t gain) OVERRIDE;
660 virtual void UpdateChunks(
progress_t* pProgress) OVERRIDE;
667 void CopyAssign(
const DimensionRegion* orig,
const std::map<Sample*,Sample*>* mSamples);
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;
837 buffer_t LoadSampleData(file_offset_t SampleCount);
838 buffer_t LoadSampleDataWithNullSamplesExtension(uint NullSamplesCount);
839 buffer_t LoadSampleDataWithNullSamplesExtension(file_offset_t SampleCount, uint NullSamplesCount);
842 static buffer_t CreateDecompressionBuffer(file_offset_t MaxReadSize);
843 static void DestroyDecompressionBuffer(
buffer_t& DecompressionBuffer);
845 void ReleaseSampleData();
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);
852 Group* GetGroup()
const;
853 virtual void UpdateChunks(
progress_t* pProgress) OVERRIDE;
854 void CopyAssignMeta(
const Sample* orig);
855 void CopyAssignWave(
const Sample* orig);
856 uint32_t GetWaveDataCRC32Checksum();
857 bool VerifyWaveData(uint32_t* pActually = NULL);
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;
891 return (Channels == 2 ? size << 1 : size) + WorstCaseFrameSize;
896 inline file_offset_t WorstCaseMaxSamples(
buffer_t* pDecompressionBuffer) {
897 return (file_offset_t) ((float)pDecompressionBuffer->
Size / (
float)WorstCaseFrameSize * (float)SamplesPerFrame);
900 void ScanCompressedSample();
938 int GetDimensionRegionIndexByValue(
const uint DimValues[8]);
943 void DeleteDimensionZone(
dimension_t type,
int zone);
944 void SplitDimensionZone(
dimension_t type,
int zone);
947 virtual void SetKeyRange(uint16_t Low, uint16_t High) OVERRIDE;
948 virtual void UpdateChunks(
progress_t* pProgress) OVERRIDE;
949 virtual void CopyAssign(
const Region* orig);
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);
956 DimensionRegion* GetDimensionRegionByBit(
const std::map<dimension_t,int>& DimCase);
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;
1102 String pArticulations[32];
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 { }
1185 COMPRESSION_NONE = 0
1198 String GetScriptAsText();
1199 void SetScriptAsText(
const String& text);
1202 void CopyAssign(
const Script* orig);
1206 void UpdateChunks(
progress_t* pProgress) OVERRIDE;
1207 void DeleteChunks() OVERRIDE;
1208 void RemoveAllScriptReferences();
1209 void GenerateUuid();
1213 ScriptGroup* pGroup;
1214 RIFF::Chunk* pChunk;
1215 std::vector<uint8_t> data;
1230 class ScriptGroup : protected
DLS::Storage {
1234 Script* GetScript(
size_t index);
1236 void DeleteScript(
Script* pScript);
1239 virtual ~ScriptGroup();
1241 virtual void UpdateChunks(
progress_t* pProgress) OVERRIDE;
1242 virtual void DeleteChunks() OVERRIDE;
1248 std::vector<Script*>* pScripts;
1266 class Instrument : protected
DLS::Instrument {
1280 uint16_t EffectSend;
1283 bool PianoReleaseMode;
1288 using DLS::Resource::GetParent;
1291 Region* GetRegionAt(
size_t pos);
1292 Region* GetFirstRegion() LIBGIG_DEPRECATED_API("Use GetRegionAt() instead.");
1293 Region* GetNextRegion() LIBGIG_DEPRECATED_API("Use GetRegionAt() instead.");
1295 void DeleteRegion(
Region* pRegion);
1296 void MoveTo(Instrument* dst);
1297 virtual
void UpdateChunks(
progress_t* pProgress) OVERRIDE;
1298 virtual
void CopyAssign(const Instrument* orig);
1300 Region* GetRegion(
unsigned int Key);
1305 void DeleteMidiRule(
int i);
1307 Script* GetScriptOfSlot(
size_t index);
1308 void AddScriptSlot(Script* pScript,
bool bypass = false);
1309 void SwapScriptSlots(
size_t index1,
size_t index2);
1310 void RemoveScriptSlot(
size_t index);
1311 void RemoveScript(Script* pScript);
1312 size_t ScriptSlotCount() const;
1313 bool IsScriptSlotBypassed(
size_t index);
1314 void SetScriptSlotBypassed(
size_t index,
bool bBypass);
1315 bool IsScriptPatchVariableSet(
size_t slot, String variable);
1316 std::map<String,String> GetScriptPatchVariables(
size_t slot);
1317 String GetScriptPatchVariable(
size_t slot, String variable);
1318 void SetScriptPatchVariable(
size_t slot, String variable, String value);
1319 void UnsetScriptPatchVariable(ssize_t slot = -1, String variable = "");
1323 Instrument(File* pFile,
RIFF::List* insList,
progress_t* pProgress = NULL);
1325 void CopyAssign(const Instrument* orig, const std::map<
Sample*,Sample*>* mSamples);
1326 void UpdateRegionKeyTable();
1328 void UpdateScriptFileOffsets();
1332 struct _ScriptPooolEntry {
1333 uint32_t fileOffset;
1336 struct _ScriptPooolRef {
1340 typedef std::array<uint8_t,16> _UUID;
1341 typedef std::map<String,String> _PatchVars;
1342 typedef std::map<size_t,_PatchVars> _VarsBySlot;
1343 typedef std::map<_UUID,_VarsBySlot> _VarsByScript;
1345 std::vector<_ScriptPooolEntry> scriptPoolFileOffsets;
1346 std::vector<_ScriptPooolRef>* pScriptRefs;
1347 _VarsByScript scriptVars;
1349 _VarsByScript stripScriptVars();
1350 bool ReferencesScriptWithUuid(
const _UUID& uuid);
1351 bool UsesAnyGigFormatExtension()
const;
1369 Sample* GetSample(
size_t index);
1370 Sample* GetFirstSample() LIBGIG_DEPRECATED_API("Use GetSample() instead.");
1371 Sample* GetNextSample() LIBGIG_DEPRECATED_API("Use GetSample() instead.");
1372 void AddSample(
Sample* pSample);
1376 virtual
void UpdateChunks(
progress_t* pProgress) OVERRIDE;
1377 virtual
void DeleteChunks() OVERRIDE;
1382 RIFF::Chunk* pNameChunk;
1383 size_t SamplesIterator;
1422 class File : protected
DLS::File {
1436 using DLS::Resource::GetParent;
1445 Sample* GetFirstSample(
progress_t* pProgress = NULL) LIBGIG_DEPRECATED_API(
"Use GetSample() instead.");
1446 Sample* GetNextSample() LIBGIG_DEPRECATED_API("Use GetSample() instead.");
1449 size_t CountSamples();
1450 void DeleteSample(
Sample* pSample);
1451 Instrument* GetFirstInstrument() LIBGIG_DEPRECATED_API("Use GetInstrument() instead.");
1452 Instrument* GetNextInstrument() LIBGIG_DEPRECATED_API("Use GetInstrument() instead.");
1453 Instrument* GetInstrument(
size_t index,
progress_t* pProgress = NULL);
1454 Instrument* AddInstrument();
1455 Instrument* AddDuplicateInstrument(const Instrument* orig);
1456 size_t CountInstruments();
1457 void DeleteInstrument(Instrument* pInstrument);
1458 Group* GetFirstGroup() LIBGIG_DEPRECATED_API("Use GetGroup() instead.");
1459 Group* GetNextGroup() LIBGIG_DEPRECATED_API("Use GetGroup() instead.");
1460 Group* GetGroup(
size_t index);
1461 Group* GetGroup(String name);
1463 void DeleteGroup(Group* pGroup);
1464 void DeleteGroupOnly(Group* pGroup);
1465 void SetAutoLoad(
bool b);
1467 void AddContentOf(File* pFile);
1468 ScriptGroup* GetScriptGroup(
size_t index);
1469 ScriptGroup* GetScriptGroup(const String& name);
1470 ScriptGroup* AddScriptGroup();
1471 void DeleteScriptGroup(ScriptGroup* pGroup);
1473 virtual
void UpdateChunks(
progress_t* pProgress) OVERRIDE;
1476 virtual
void LoadSamples() OVERRIDE;
1477 virtual
void LoadInstruments() OVERRIDE;
1478 virtual
void LoadGroups();
1479 virtual
void UpdateFileOffsets() OVERRIDE;
1481 virtual
void LoadSamples(
progress_t* pProgress);
1482 virtual
void LoadInstruments(
progress_t* pProgress);
1483 virtual
void LoadScriptGroups();
1484 void SetSampleChecksum(
Sample* pSample, uint32_t crc);
1485 uint32_t GetSampleChecksum(
Sample* pSample);
1486 uint32_t GetSampleChecksumByIndex(
int index);
1487 bool VerifySampleChecksumTable();
1488 bool RebuildSampleChecksumTable();
1489 int GetWaveTableIndexOf(
gig::
Sample* pSample);
1492 friend class Instrument;
1494 friend class ScriptGroup;
1496 std::vector<Group*>* pGroups;
1497 std::vector<Group*>::iterator GroupsIterator;
1499 std::vector<ScriptGroup*>* pScriptGroups;
1501 bool UsesAnyGigFormatExtension() const;
1514 Exception(String format, ...);
1515 Exception(String format, va_list arg);
1516 void PrintMessage();
1522 size_t enumCount(
const std::type_info& type);
1523 const char*
enumKey(
const std::type_info& type,
size_t value);
1524 bool enumKey(
const std::type_info& type, String key);
1525 const char**
enumKeys(
const std::type_info& type);
1527 size_t enumCount(String typeName);
1528 const char* enumKey(String typeName,
size_t value);
1529 bool enumKey(String typeName, String key);
1530 const char** enumKeys(String typeName);
1533 String libraryName();
1534 String libraryVersion();
range_t KeySwitchRange
Key range for key switch selector.
bool LFO2FlipPhase
Inverts the polarity of the filter cutoff LFO wave, so it flips the wave form vertically.
dim_bypass_ctrl_t DimensionBypass
If defined, the MIDI controller can switch on/off the dimension in realtime.
file_offset_t position
Current position within the sample.
Encapsulates articulation informations of a dimension region.
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...
bool reverse
If playback direction is currently backwards (in case there is a pingpong or reverse loop defined)...
uint8_t AltSustain2Key
Key triggering a second set of alternate sustain samples.
Destination container for serialization, and source container for deserialization.
file_offset_t FrameOffset
Current offset (sample points) in current sample frame (for decompression only).
uint32_t Regions
Reflects the number of Region defintions this Instrument has.
lfo_wave_t
Defines the wave form type used by an LFO (gig format extension).
file_offset_t SamplePos
For compressed samples only: stores the current position (in sample points).
bool VCFEnabled
If filter should be used.
stream_whence_t
File stream position dependent to these relations.
uint32_t FineTune
Specifies the fraction of a semitone up from the specified MIDI unity note field. A value of 0x800000...
uint8_t BypassKey
Key to be used to bypass the sustain note.
Abstract base class for all classes using RIFF::Chunks for persistency.
uint16_t LFO1ControlDepth
Controller depth influencing sample amplitude LFO pitch (0 - 1200 cents).
file_offset_t SamplesPerFrame
For compressed samples only: number of samples in a full sample frame.
lfo1_ctrl_t
Defines how LFO1 is controlled by.
Group of Gigasampler samples.
uint8_t VCFVelocityDynamicRange
0x04 = lowest, 0x00 = highest .
String Name
Stores the name of this Group.
uint16_t PitchbendRange
Number of semitones pitchbend controller can pitch (default is 2).
double EG1Release
Release time of the sample amplitude EG (0.000 - 60.000s).
uint8_t Triggers
Number of triggers.
Defines behavior options for envelope generators (gig format extension).
vcf_type_t VCFType
Defines the general filter characteristic (lowpass, highpass, bandpass, etc.).
uint32_t LoopSize
Caution: Use the respective fields in the DimensionRegion instead of this one! (Intended purpose: Len...
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.
uint8_t low
Low value of range.
uint16_t SampleStartOffset
Number of samples the sample start should be moved (0 - 2000).
MIDI rule for triggering notes by control change events.
file_offset_t WorstCaseFrameSize
For compressed samples only: size (in bytes) of the largest possible sample frame.
file_offset_t Size
Size of the actual data in the buffer in bytes.
bool EG1Hold
If true, Decay1 stage should be postponed until the sample reached the sample loop start...
std::string String
Textual string.
range_t PlayRange
Key range of the playable keys in the instrument.
uint16_t ThresholdTime
Maximum time (ms) between two notes that should be played legato.
static size_t Instances
Number of instances of class Sample.
uint8_t VelocityResponseCurveScaling
0 - 127 (usually you don't have to interpret this parameter, use GetVelocityAttenuation() instead)...
uint8_t ReleaseTriggerKey
Key triggering release samples.
bool VCFKeyboardTracking
If true: VCF cutoff frequence will be dependend to the note key position relative to the defined brea...
uint32_t crc
Reflects CRC-32 checksum of the raw sample data at the last time when the sample's raw wave form data...
Defines a controller that has a certain contrained influence on a particular synthesis parameter (use...
sust_rel_trg_t
Defines behaviour of release triggered sample(s) on sustain pedal up event.
uint8_t Controller
CC number for controller selector.
Defines Region information of a Gigasampler/GigaStudio instrument.
uint32_t LoopPlayCount
Number of times the loop should be played (a value of 0 = infinite).
uint8_t ReleaseTriggerDecay
0 - 8
lfo3_ctrl_t LFO3Controller
MIDI Controller which controls the sample pitch LFO.
const char * enumKey(String typeName, size_t value)
Enum constant name of numeric value.
bool Chained
If all patterns should be chained together.
uint32_t MIDIUnityNote
Specifies the musical note at which the sample will be played at it's original sample rate...
uint8_t ControllerNumber
MIDI controller number.
uint8_t ChannelOffset
Audio output where the audio signal of the dimension region should be routed to (0 - 9)...
uint8_t VCFResonance
Firm internal filter resonance weight.
bool VCFResonanceDynamic
If true: Increases the resonance Q according to changes of controllers that actually control the VCF ...
Language_t Language
Programming language and dialect the script is written in.
unsigned int Dimensions
Number of defined dimensions, do not alter!
type_t
Defines possible controllers.
vcf_cutoff_ctrl_t VCFCutoffController
Specifies which external controller has influence on the filter cutoff frequency. ...
file_offset_t loop_cycles_left
How many times the loop has still to be passed, this value will be decremented with each loop cycle...
uint16_t MIDIBank
Reflects combination of MIDIBankCoarse and MIDIBankFine (bank 1 - bank 16384). Do not change this val...
double EG1Decay1
Decay time of the sample amplitude EG (0.000 - 60.000s).
lfo2_ctrl_t LFO2Controller
MIDI Controlle which controls the filter cutoff LFO.
Compression_t Compression
Whether the script was/should be compressed, and if so, which compression algorithm shall be used...
size_t enumCount(String typeName)
Amount of elements in given enum type.
bool Dithered
For 24-bit compressed samples only: if dithering was used during compression with bit reduction...
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...
static const DLS::version_t VERSION_4
Reflects Gigasampler file format version 4.0 (2007-10-12).
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.
static const DLS::version_t VERSION_2
Reflects Gigasampler file format version 2.0 (1998-06-28).
Sample * pSample
Points to the Sample which is assigned to the dimension region.
size_t enumValue(String key)
Numeric value of enum constant.
uint16_t ReleaseTime
Release time.
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 ...
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).
size_t CountRegions()
Returns the amount of regions of this instrument.
void DeleteSampleLoop(sample_loop_t *pLoopDef)
Deletes an existing sample loop.
RIFF::File * GetRiffFile()
Returns the underlying RIFF::File used for persistency of this DLS::File object.
smpte_format_t SMPTEFormat
Specifies the Society of Motion Pictures and Television E time format used in the following SMPTEOffs...
double SampleAttenuation
Sample volume (calculated from DLS::Sampler::Gain)
bool ReleaseCancel
Whether the "release" stage is cancelled when receiving a note-on (default: true).
lfo3_ctrl_t
Defines how LFO3 is controlled by.
double EG1Decay2
Only if EG1InfiniteSustain == false: 2nd decay stage time of the sample amplitude EG (0...
uint8_t BypassController
Controller to be used to bypass the sustain note.
attenuation_ctrl_t AttenuationController
MIDI Controller which has influence on the volume level of the sample (or entire sample group)...
static buffer_t InternalDecompressionBuffer
Buffer used for decompression of samples, and only if no external decompression buffer was supplied...
Pointer address and size of a buffer.
bool Decay1Cancel
Whether the "decay 1" stage is cancelled when receiving a note-off (default: true).
uint8_t in_start
Start position of fade in.
uint8_t Patterns
Number of alternator patterns.
dimension_t dimension
Specifies which source (usually a MIDI controller) is associated with the dimension.
bool Bypass
Global bypass: if enabled, this script shall not be executed by the sampler for any instrument...
Abstract base class which provides mandatory informations about sample players in general...
loop_type_t
Standard types of sample loops.
range_t KeyRange
Key range for legato notes.
bool EG2ControllerInvert
Invert values coming from defined EG2 controller.
uint8_t Articulations
Number of articulations in the instrument.
eg_opt_t EG2Options
[gig extension]: Behavior options which should be used for envelope generator 2 (filter cutoff EG)...
String Name
Arbitrary name of the script, which may be displayed i.e. in an instrument editor.
uint32_t DimensionRegions
Total number of DimensionRegions this Region contains, do not alter!
bool MSDecode
Gigastudio flag: defines if Mid Side Recordings should be decoded.
bool EG1InfiniteSustain
If true, instead of going into Decay2 phase, Decay1 level will be hold until note will be released...
bool Compressed
If the sample wave is compressed (probably just interesting for instrument and sample editors...
void SetFileName(const String &name)
You may call this method store a future file name, so you don't have to to pass it to the Save() call...
uint32_t SampleLoops
Reflects the number of sample loops.
virtual void Save(const String &Path, progress_t *pProgress=NULL)
Save changes to another file.
uint16_t LFO2InternalDepth
Firm pitch of the filter cutoff LFO (0 - 1200 cents).
uint16_t LFO1InternalDepth
Firm pitch of the sample amplitude LFO (0 - 1200 cents).
float zone_size
Intended for internal usage: reflects the size of each zone (128/zones) for normal split types only...
bool PitchTrack
If true: sample will be pitched according to the key position (this will be disabled for drums for ex...
uint64_t file_offset_t
Type used by libgig for handling file positioning during file I/O tasks.
bool BypassUseController
If a controller should be used to bypass the sustain note.
unsigned int Layers
Amount of defined layers (1 - 32). A value of 1 actually means no layering, a value > 1 means there i...
void * pStart
Points to the beginning of the buffer.
bool EG2InfiniteSustain
If true, instead of going into Decay2 phase, Decay1 level will be hold until note will be released...
Group * pGroup
pointer to the Group this sample belongs to (always not-NULL)
uint8_t EG2ControllerAttackInfluence
Amount EG2 Controller has influence on the EG2 Attack time (0 - 3, where 0 means off).
bool SelfMask
If true: high velocity notes will stop low velocity notes at the same note, with that you can save vo...
int16_t LFO3ControlDepth
Controller depth of the sample pitch LFO (-1200 - +1200 cents).
double EG3Attack
Attack time of the sample pitch EG (0.000 - 10.000s).
uint8_t LegatoSamples
Number of legato samples per key in each direction (always 12)
uint8_t out_end
End postition of fade out.
double EG2Attack
Attack time of the filter cutoff EG (0.000 - 60.000s).
bool InvertAttenuationController
Inverts the values coming from the defined Attenuation Controller.
double LFO1Frequency
Frequency of the sample amplitude LFO (0.10 - 10.00 Hz).
uint32_t LoopID
Specifies the unique ID that corresponds to one of the defined cue points in the cue point list (only...
bool LFO1FlipPhase
Inverts the polarity of the sample amplitude LFO wave, so it flips the wave form vertically.
uint8_t AltSustain1Key
Key triggering alternate sustain samples.
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.
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).
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)
uint8_t EG2ControllerReleaseInfluence
Amount EG2 Controller has influence on the EG2 Release time (0 - 3, where 0 means off)...
Used for indicating the progress of a certain task.
uint16_t EG2PreAttack
Preattack value of the filter cutoff EG (0 - 1000 permille).
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.
vcf_res_ctrl_t
Defines how the filter resonance is controlled by.
vcf_type_t
Audio filter types.
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).
version_t * pVersion
Points to a version_t structure if the file provided a version number else is set to NULL...
uint16_t LFO2ControlDepth
Controller depth influencing filter cutoff LFO pitch (0 - 1200).
bool AttackHoldCancel
Whether the "attack hold" stage is cancelled when receiving a note-off (default: true).
String Name
Name of this script group. For example to be displayed in an instrument editor.
file_offset_t * FrameTable
For positioning within compressed samples only: stores the offset values for each frame...
int16_t EG3Depth
Depth of the sample pitch EG (-1200 - +1200).
uint8_t VCFKeyboardTrackingBreakpoint
See VCFKeyboardTracking (0 - 127).
eg2_ctrl_t EG2Controller
MIDI Controller which has influence on filter cutoff EG parameters (attack, decay, release).
bool VCFCutoffControllerInvert
Inverts values coming from the defined cutoff controller.
file_offset_t NullExtensionSize
The buffer might be bigger than the actual data, if that's the case that unused space at the end of t...
double EG2Release
Release time of the filter cutoff EG (0.000 - 60.000s).
uint8_t EG1ControllerReleaseInfluence
Amount EG1 Controller has influence on the EG1 Release time (0 - 3, where 0 means off)...
uint8_t EG2ControllerDecayInfluence
Amount EG2 Controller has influence on the EG2 Decay time (0 - 3, where 0 means off).
bool Polyphonic
If alternator should step forward only when all notes are off.
Abstract base class for all MIDI rules.
dimension_t
Defines the type of dimension, that is how the dimension zones (and thus how the dimension regions ar...
file_offset_t SamplesInLastFrame
For compressed samples only: length of the last sample frame.
uint32_t LoopEnd
Caution: Use the respective field in the DimensionRegion instead of this one! (Intended purpose: The ...
bool AttackCancel
Whether the "attack" stage is cancelled when receiving a note-off (default: true).
Defines the envelope of a crossfade.
uint8_t MIDIBankFine
Reflects the MIDI Bank number for MIDI Control Change 32 (bank 1 - 128).
curve_type_t ReleaseVelocityResponseCurve
Defines a transformation curve to the incoming release veloctiy values affecting envelope times...
uint8_t zones
Number of zones the dimension has.
double LFO2Phase
[gig extension]: Phase displacement of the filter cutoff LFO's wave form (0.0° - 360.0°).
uint8_t AttenuationControllerThreshold
0-127
double LFO1Phase
[gig extension]: Phase displacement of the amplitude LFO's wave form (0.0° - 360.0°).
vcf_cutoff_ctrl_t
Defines how the filter cutoff frequency is controlled by.
Encapsulates sample waves of Gigasampler/GigaStudio files used for playback.
bool LFO3FlipPhase
[gig extension]: Inverts the polarity of the pitch LFO wave, so it flips the wave form vertically (NO...
RIFF specific classes and definitions.
int16_t LFO3InternalDepth
Firm depth of the sample pitch LFO (-1200 - +1200 cents).
Lower and upper limit of a range.
double EG2Decay2
Only if EG2InfiniteSustain == false: 2nd stage decay time of the filter cutoff EG (0...
Encapsulates sample waves used for playback.
type_t type
Controller type.
uint controller_number
MIDI controller number if this controller is a control change controller, 0 otherwise.
uint8_t * VelocityTable
For velocity dimensions with custom defined zone ranges only: used for fast converting from velocity ...
curve_type_t VelocityResponseCurve
Defines a transformation curve to the incoming velocity values affecting amplitude (usually you don't...
A MIDI rule not yet implemented by libgig.
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).
uint16_t EG1Sustain
Sustain value of the sample amplitude EG (0 - 1000 permille).
String GetFileName()
File name of this DLS file.
Real-time instrument script (gig format extension).
Gigasampler/GigaStudio specific classes and definitions.
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)
sust_rel_trg_t SustainReleaseTrigger
[gig extension]: Whether a sustain pedal up event shall play release trigger sample.
Group of instrument scripts (gig format extension).
int8_t Pan
Panorama / Balance (-64..0..63 <-> left..middle..right)
Provides convenient access to Gigasampler/GigaStudio .gig files.
bool NoNoteOffReleaseTrigger
[gig extension]: If true then don't play a release trigger sample on MIDI note-off events...
lfo2_ctrl_t
Defines how LFO2 is controlled by.
MIDI rule for instruments with legato samples.
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 access to a Gigasampler/GigaStudio instrument.
bool SustainDefeat
If true: Sustain pedal will not hold a note.
Encoding_t Encoding
Format the script's source code text is encoded with.
buffer_t RAMCache
Buffers samples (already uncompressed) in RAM.
Quadtuple version number ("major.minor.release.build").
Serialization / deserialization framework.
bool Decay2Cancel
Whether the "decay 2" stage is cancelled when receiving a note-off (default: true).
const char ** enumKeys(String typeName)
All element names of enum type.
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).
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,...).
selector_t Selector
Method by which pattern is chosen.
uint8_t out_start
Start position of fade out.
uint8_t VCFCutoff
Max. cutoff frequency.
DLS specific classes and definitions.
eg_opt_t EG1Options
[gig extension]: Behavior options which should be used for envelope generator 1 (volume amplitude EG)...
Info * pInfo
Points (in any case) to an Info object, providing additional, optional infos and comments.
uint32_t Manufacturer
Specifies the MIDI Manufacturer's Association (MMA) Manufacturer code for the sampler intended to rec...
uint8_t high
High value of range.
MIDI rule to automatically cycle through specified sequences of different articulations.
Reflects the current playback state for a sample.
General dimension definition.
eg1_ctrl_t EG1Controller
MIDI Controller which has influence on sample amplitude EG parameters (attack, decay, release).
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).
split_type_t split_type
Intended for internal usage: will be used to convert a dimension value into the corresponding dimensi...
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.
double EG1Attack
Attack time of the sample amplitude EG (0.000 - 60.000s).
bool IsDrum
Indicates if the Instrument is a drum type, as they differ in the synthesis model of DLS from melodic...
void AddSampleLoop(sample_loop_t *pLoopDef)
Adds a new sample loop with the provided loop definition.