/[svn]/libgig/trunk/src/gig.h
ViewVC logotype

Diff of /libgig/trunk/src/gig.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3623 by schoenebeck, Wed Oct 2 16:30:29 2019 UTC revision 3928 by schoenebeck, Tue Jun 15 11:38:38 2021 UTC
# Line 2  Line 2 
2   *                                                                         *   *                                                                         *
3   *   libgig - C++ cross-platform Gigasampler format file access library    *   *   libgig - C++ cross-platform Gigasampler format file access library    *
4   *                                                                         *   *                                                                         *
5   *   Copyright (C) 2003-2019 by Christian Schoenebeck                      *   *   Copyright (C) 2003-2021 by Christian Schoenebeck                      *
6   *                              <cuse@users.sourceforge.net>               *   *                              <cuse@users.sourceforge.net>               *
7   *                                                                         *   *                                                                         *
8   *   This library is free software; you can redistribute it and/or modify  *   *   This library is free software; you can redistribute it and/or modify  *
# Line 26  Line 26 
26    
27  #include "DLS.h"  #include "DLS.h"
28  #include <vector>  #include <vector>
29    #include <array> // since C++11
30    
31  #ifndef __has_feature  #ifndef __has_feature
32  # define __has_feature(x) 0  # define __has_feature(x) 0
# Line 50  Line 51 
51  # define LIST_TYPE_3GNL 0x33676E6C  # define LIST_TYPE_3GNL 0x33676E6C
52  # define LIST_TYPE_3LS  0x334c5320 // own gig format extension  # define LIST_TYPE_3LS  0x334c5320 // own gig format extension
53  # define LIST_TYPE_RTIS 0x52544953 // own gig format extension  # define LIST_TYPE_RTIS 0x52544953 // own gig format extension
54    # define LIST_TYPE_3DNM 0x33646e6d
55  # define CHUNK_ID_3GIX  0x33676978  # define CHUNK_ID_3GIX  0x33676978
56  # define CHUNK_ID_3EWA  0x33657761  # define CHUNK_ID_3EWA  0x33657761
57  # define CHUNK_ID_3LNK  0x336C6E6B  # define CHUNK_ID_3LNK  0x336C6E6B
# Line 61  Line 63 
63  # define CHUNK_ID_SCRI  0x53637269 // own gig format extension  # define CHUNK_ID_SCRI  0x53637269 // own gig format extension
64  # define CHUNK_ID_LSNM  0x4c534e4d // own gig format extension  # define CHUNK_ID_LSNM  0x4c534e4d // own gig format extension
65  # define CHUNK_ID_SCSL  0x5343534c // own gig format extension  # 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  # define CHUNK_ID_LSDE  0x4c534445 // own gig format extension
68    # define CHUNK_ID_3DDP  0x33646470
69  #else  // little endian  #else  // little endian
70  # define LIST_TYPE_3PRG 0x67727033  # define LIST_TYPE_3PRG 0x67727033
71  # define LIST_TYPE_3EWL 0x6C776533  # define LIST_TYPE_3EWL 0x6C776533
# Line 69  Line 73 
73  # define LIST_TYPE_3GNL 0x6C6E6733  # define LIST_TYPE_3GNL 0x6C6E6733
74  # define LIST_TYPE_3LS  0x20534c33 // own gig format extension  # define LIST_TYPE_3LS  0x20534c33 // own gig format extension
75  # define LIST_TYPE_RTIS 0x53495452 // own gig format extension  # define LIST_TYPE_RTIS 0x53495452 // own gig format extension
76    # define LIST_TYPE_3DNM 0x6d6e6433
77  # define CHUNK_ID_3GIX  0x78696733  # define CHUNK_ID_3GIX  0x78696733
78  # define CHUNK_ID_3EWA  0x61776533  # define CHUNK_ID_3EWA  0x61776533
79  # define CHUNK_ID_3LNK  0x6B6E6C33  # define CHUNK_ID_3LNK  0x6B6E6C33
# Line 80  Line 85 
85  # define CHUNK_ID_SCRI  0x69726353 // own gig format extension  # define CHUNK_ID_SCRI  0x69726353 // own gig format extension
86  # define CHUNK_ID_LSNM  0x4d4e534c // own gig format extension  # define CHUNK_ID_LSNM  0x4d4e534c // own gig format extension
87  # define CHUNK_ID_SCSL  0x4c534353 // own gig format extension  # 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  # define CHUNK_ID_LSDE  0x4544534c // own gig format extension
90    # define CHUNK_ID_3DDP  0x70646433
91  #endif // WORDS_BIGENDIAN  #endif // WORDS_BIGENDIAN
92    
93  #ifndef GIG_DECLARE_ENUM  #ifndef GIG_DECLARE_ENUM
# Line 355  namespace gig { Line 362  namespace gig {
362          float        zone_size;  ///< Intended for internal usage: reflects the size of each zone (128/zones) for normal split types only, 0 otherwise.          float        zone_size;  ///< Intended for internal usage: reflects the size of each zone (128/zones) for normal split types only, 0 otherwise.
363      };      };
364    
365      /** Defines which frequencies are filtered by the VCF.      /** Audio filter types.
366         *
367         * The first 5 filter types are the ones which exist in GigaStudio, and
368         * which are very accurately modeled on LinuxSampler side such that they
369         * would sound with LinuxSampler exactly as with GigaStudio.
370         *
371         * The other filter types listed here are extensions to the gig format and
372         * are LinuxSampler specific filter type implementations. Note that none of
373         * these are duplicates of the GigaStudio filter types. For instance
374         * @c vcf_type_lowpass (GigaStudio) and @c vcf_type_lowpass_2p
375         * (LinuxSampler) are both lowpass filters with 2 poles, however they do
376         * sound differently.
377       *       *
378       * @see enumCount(), enumKey(), enumKeys(), enumValue()       * @see enumCount(), enumKey(), enumKeys(), enumValue()
379       */       */
380      GIG_DECLARE_ENUM(vcf_type_t,      GIG_DECLARE_ENUM(vcf_type_t,
381          vcf_type_lowpass      = 0x00, /**< Standard lowpass filter type. */          vcf_type_lowpass       = 0x00, /**< Standard lowpass filter type (GigaStudio). */
382          vcf_type_lowpassturbo = 0xff, /**< More poles than normal lowpass. */          vcf_type_lowpassturbo  = 0xff, /**< More poles than normal lowpass (GigaStudio). */
383          vcf_type_bandpass     = 0x01, /**< Bandpass filter type. */          vcf_type_bandpass      = 0x01, /**< Bandpass filter type (GigaStudio). */
384          vcf_type_highpass     = 0x02, /**< Highpass filter type. */          vcf_type_highpass      = 0x02, /**< Highpass filter type (GigaStudio). */
385          vcf_type_bandreject   = 0x03  /**< Band reject filter type. */          vcf_type_bandreject    = 0x03, /**< Band reject filter type (GigaStudio). */
386            vcf_type_lowpass_1p    = 0x11, /**< [gig extension]: 1-pole lowpass filter type (LinuxSampler). */
387            vcf_type_lowpass_2p    = 0x12, /**< [gig extension]: 2-pole lowpass filter type (LinuxSampler). */
388            vcf_type_lowpass_4p    = 0x14, /**< [gig extension]: 4-pole lowpass filter type (LinuxSampler). */
389            vcf_type_lowpass_6p    = 0x16, /**< [gig extension]: 6-pole lowpass filter type (LinuxSampler). */
390            vcf_type_highpass_1p   = 0x21, /**< [gig extension]: 1-pole highpass filter type (LinuxSampler). */
391            vcf_type_highpass_2p   = 0x22, /**< [gig extension]: 2-pole highpass filter type (LinuxSampler). */
392            vcf_type_highpass_4p   = 0x24, /**< [gig extension]: 4-pole highpass filter type (LinuxSampler). */
393            vcf_type_highpass_6p   = 0x26, /**< [gig extension]: 6-pole highpass filter type (LinuxSampler). */
394            vcf_type_bandpass_2p   = 0x32, /**< [gig extension]: 2-pole bandpass filter type (LinuxSampler). */
395            vcf_type_bandreject_2p = 0x42  /**< [gig extension]: 2-pole bandreject filter type (LinuxSampler). */
396      );      );
397    
398      /**      /**
# Line 829  namespace gig { Line 857  namespace gig {
857              bool VerifyWaveData(uint32_t* pActually = NULL);              bool VerifyWaveData(uint32_t* pActually = NULL);
858          protected:          protected:
859              static size_t        Instances;               ///< Number of instances of class Sample.              static size_t        Instances;               ///< Number of instances of class Sample.
860              static buffer_t      InternalDecompressionBuffer; ///< Buffer used for decompression as well as for truncation of 24 Bit -> 16 Bit samples.              static buffer_t      InternalDecompressionBuffer; ///< Buffer used for decompression of samples, and only if no external decompression buffer was supplied.
861              Group*               pGroup;                  ///< pointer to the Group this sample belongs to (always not-NULL)              Group*               pGroup;                  ///< pointer to the Group this sample belongs to (always not-NULL)
862              file_offset_t        FrameOffset;             ///< Current offset (sample points) in current sample frame (for decompression only).              file_offset_t        FrameOffset;             ///< Current offset (sample points) in current sample frame (for decompression only).
863              file_offset_t*       FrameTable;              ///< For positioning within compressed samples only: stores the offset values for each frame.              file_offset_t*       FrameTable;              ///< For positioning within compressed samples only: stores the offset values for each frame.
# Line 928  namespace gig { Line 956  namespace gig {
956              DimensionRegion* GetDimensionRegionByBit(const std::map<dimension_t,int>& DimCase);              DimensionRegion* GetDimensionRegionByBit(const std::map<dimension_t,int>& DimCase);
957             ~Region();             ~Region();
958              friend class Instrument;              friend class Instrument;
959            private:
960                bool UsesAnyGigFormatExtension() const;
961      };      };
962    
963      /** @brief Abstract base class for all MIDI rules.      /** @brief Abstract base class for all MIDI rules.
# Line 1163  namespace gig { Line 1193  namespace gig {
1193              Encoding_t     Encoding;    ///< Format the script's source code text is encoded with.              Encoding_t     Encoding;    ///< Format the script's source code text is encoded with.
1194              Language_t     Language;    ///< Programming language and dialect the script is written in.              Language_t     Language;    ///< Programming language and dialect the script is written in.
1195              bool           Bypass;      ///< Global bypass: if enabled, this script shall not be executed by the sampler for any instrument.              bool           Bypass;      ///< Global bypass: if enabled, this script shall not be executed by the sampler for any instrument.
1196                uint8_t        Uuid[16];    ///< Persistent Universally Unique Identifier of this script, which remains identical after any changes to this script.
1197    
1198              String GetScriptAsText();              String GetScriptAsText();
1199              void   SetScriptAsText(const String& text);              void   SetScriptAsText(const String& text);
# Line 1175  namespace gig { Line 1206  namespace gig {
1206              void UpdateChunks(progress_t* pProgress) OVERRIDE;              void UpdateChunks(progress_t* pProgress) OVERRIDE;
1207              void DeleteChunks() OVERRIDE;              void DeleteChunks() OVERRIDE;
1208              void RemoveAllScriptReferences();              void RemoveAllScriptReferences();
1209                void GenerateUuid();
1210              friend class ScriptGroup;              friend class ScriptGroup;
1211              friend class Instrument;              friend class Instrument;
1212          private:          private:
# Line 1255  namespace gig { Line 1287  namespace gig {
1287              // derived methods from DLS::Resource              // derived methods from DLS::Resource
1288              using DLS::Resource::GetParent;              using DLS::Resource::GetParent;
1289              // overridden methods              // overridden methods
1290              Region*   GetFirstRegion();              Region*   GetRegionAt(size_t pos);
1291              Region*   GetNextRegion();              Region*   GetFirstRegion() LIBGIG_DEPRECATED("Use GetRegionAt() instead.");
1292                Region*   GetNextRegion() LIBGIG_DEPRECATED("Use GetRegionAt() instead.");
1293              Region*   AddRegion();              Region*   AddRegion();
1294              void      DeleteRegion(Region* pRegion);              void      DeleteRegion(Region* pRegion);
1295              void      MoveTo(Instrument* dst);              void      MoveTo(Instrument* dst);
# Line 1278  namespace gig { Line 1311  namespace gig {
1311              uint      ScriptSlotCount() const;              uint      ScriptSlotCount() const;
1312              bool      IsScriptSlotBypassed(uint index);              bool      IsScriptSlotBypassed(uint index);
1313              void      SetScriptSlotBypassed(uint index, bool bBypass);              void      SetScriptSlotBypassed(uint index, bool bBypass);
1314                bool      IsScriptPatchVariableSet(int slot, String variable);
1315                std::map<String,String> GetScriptPatchVariables(int slot);
1316                String    GetScriptPatchVariable(int slot, String variable);
1317                void      SetScriptPatchVariable(int slot, String variable, String value);
1318                void      UnsetScriptPatchVariable(int slot = -1, String variable = "");
1319          protected:          protected:
1320              Region*   RegionKeyTable[128]; ///< fast lookup for the corresponding Region of a MIDI key              Region*   RegionKeyTable[128]; ///< fast lookup for the corresponding Region of a MIDI key
1321    
# Line 1298  namespace gig { Line 1336  namespace gig {
1336                  Script*  script;                  Script*  script;
1337                  bool     bypass;                  bool     bypass;
1338              };              };
1339                typedef std::array<uint8_t,16> _UUID;
1340                typedef std::map<String,String> _PatchVars;
1341                typedef std::map<int,_PatchVars> _VarsBySlot;
1342                typedef std::map<_UUID,_VarsBySlot> _VarsByScript;
1343              MidiRule** pMidiRules;              MidiRule** pMidiRules;
1344              std::vector<_ScriptPooolEntry> scriptPoolFileOffsets;              std::vector<_ScriptPooolEntry> scriptPoolFileOffsets;
1345              std::vector<_ScriptPooolRef>* pScriptRefs;              std::vector<_ScriptPooolRef>* pScriptRefs;
1346                _VarsByScript scriptVars;
1347    
1348                _VarsByScript stripScriptVars();
1349                bool ReferencesScriptWithUuid(const _UUID& uuid);
1350                bool UsesAnyGigFormatExtension() const;
1351      };      };
1352    
1353      /** @brief Group of Gigasampler samples      /** @brief Group of Gigasampler samples
# Line 1392  namespace gig { Line 1439  namespace gig {
1439              // overridden  methods              // overridden  methods
1440              File();              File();
1441              File(RIFF::File* pRIFF);              File(RIFF::File* pRIFF);
1442              Sample*     GetFirstSample(progress_t* pProgress = NULL); ///< Returns a pointer to the first <i>Sample</i> object of the file, <i>NULL</i> otherwise.              Sample*     GetFirstSample(progress_t* pProgress = NULL) LIBGIG_DEPRECATED("Use GetSample() instead.");
1443              Sample*     GetNextSample();      ///< Returns a pointer to the next <i>Sample</i> object of the file, <i>NULL</i> otherwise.              Sample*     GetNextSample() LIBGIG_DEPRECATED("Use GetSample() instead.");
1444              Sample*     GetSample(uint index);              Sample*     GetSample(size_t index, progress_t* pProgress = NULL);
1445              Sample*     AddSample();              Sample*     AddSample();
1446              size_t      CountSamples();              size_t      CountSamples();
1447              void        DeleteSample(Sample* pSample);              void        DeleteSample(Sample* pSample);
# Line 1447  namespace gig { Line 1494  namespace gig {
1494              std::list<Group*>::iterator GroupsIterator;              std::list<Group*>::iterator GroupsIterator;
1495              bool                        bAutoLoad;              bool                        bAutoLoad;
1496              std::list<ScriptGroup*>*    pScriptGroups;              std::list<ScriptGroup*>*    pScriptGroups;
1497    
1498                bool UsesAnyGigFormatExtension() const;
1499      };      };
1500    
1501      /**      /**

Legend:
Removed from v.3623  
changed lines
  Added in v.3928

  ViewVC Help
Powered by ViewVC