/[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 3481 by schoenebeck, Fri Feb 22 12:12:50 2019 UTC revision 3723 by schoenebeck, Wed Jan 22 15:48:32 2020 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-2018 by Christian Schoenebeck                      *   *   Copyright (C) 2003-2020 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 50  Line 50 
50  # define LIST_TYPE_3GNL 0x33676E6C  # define LIST_TYPE_3GNL 0x33676E6C
51  # define LIST_TYPE_3LS  0x334c5320 // own gig format extension  # define LIST_TYPE_3LS  0x334c5320 // own gig format extension
52  # define LIST_TYPE_RTIS 0x52544953 // own gig format extension  # define LIST_TYPE_RTIS 0x52544953 // own gig format extension
53    # define LIST_TYPE_3DNM 0x33646e6d
54  # define CHUNK_ID_3GIX  0x33676978  # define CHUNK_ID_3GIX  0x33676978
55  # define CHUNK_ID_3EWA  0x33657761  # define CHUNK_ID_3EWA  0x33657761
56  # define CHUNK_ID_3LNK  0x336C6E6B  # define CHUNK_ID_3LNK  0x336C6E6B
# Line 62  Line 63 
63  # define CHUNK_ID_LSNM  0x4c534e4d // own gig format extension  # define CHUNK_ID_LSNM  0x4c534e4d // own gig format extension
64  # define CHUNK_ID_SCSL  0x5343534c // own gig format extension  # define CHUNK_ID_SCSL  0x5343534c // own gig format extension
65  # define CHUNK_ID_LSDE  0x4c534445 // own gig format extension  # define CHUNK_ID_LSDE  0x4c534445 // own gig format extension
66    # define CHUNK_ID_3DDP  0x33646470
67  #else  // little endian  #else  // little endian
68  # define LIST_TYPE_3PRG 0x67727033  # define LIST_TYPE_3PRG 0x67727033
69  # define LIST_TYPE_3EWL 0x6C776533  # define LIST_TYPE_3EWL 0x6C776533
# Line 69  Line 71 
71  # define LIST_TYPE_3GNL 0x6C6E6733  # define LIST_TYPE_3GNL 0x6C6E6733
72  # define LIST_TYPE_3LS  0x20534c33 // own gig format extension  # define LIST_TYPE_3LS  0x20534c33 // own gig format extension
73  # define LIST_TYPE_RTIS 0x53495452 // own gig format extension  # define LIST_TYPE_RTIS 0x53495452 // own gig format extension
74    # define LIST_TYPE_3DNM 0x6d6e6433
75  # define CHUNK_ID_3GIX  0x78696733  # define CHUNK_ID_3GIX  0x78696733
76  # define CHUNK_ID_3EWA  0x61776533  # define CHUNK_ID_3EWA  0x61776533
77  # define CHUNK_ID_3LNK  0x6B6E6C33  # define CHUNK_ID_3LNK  0x6B6E6C33
# Line 81  Line 84 
84  # define CHUNK_ID_LSNM  0x4d4e534c // own gig format extension  # define CHUNK_ID_LSNM  0x4d4e534c // own gig format extension
85  # define CHUNK_ID_SCSL  0x4c534353 // own gig format extension  # define CHUNK_ID_SCSL  0x4c534353 // own gig format extension
86  # define CHUNK_ID_LSDE  0x4544534c // own gig format extension  # define CHUNK_ID_LSDE  0x4544534c // own gig format extension
87    # define CHUNK_ID_3DDP  0x70646433
88  #endif // WORDS_BIGENDIAN  #endif // WORDS_BIGENDIAN
89    
90  #ifndef GIG_DECLARE_ENUM  #ifndef GIG_DECLARE_ENUM
# Line 148  namespace gig { Line 152  namespace gig {
152          curve_type_unknown   = 0xffffffff  /**< Unknown curve type. */          curve_type_unknown   = 0xffffffff  /**< Unknown curve type. */
153      );      );
154    
155        /** Defines the wave form type used by an LFO (gig format extension).
156         *
157         * This is a gig format extension. The original Gigasampler/GigaStudio
158         * software always used a sine (sinus) wave form for all its 3 LFOs, so this
159         * was not configurable in the original gig format. Accordingly setting any
160         * other wave form than sine (sinus) will be ignored by the original
161         * Gigasampler/GigaStudio software.
162         *
163         * @see enumCount(), enumKey(), enumKeys(), enumValue()
164         */
165        GIG_DECLARE_ENUM(lfo_wave_t,
166            lfo_wave_sine     = 0,  /**< Sine (sinus) wave form (this is the default wave form). */
167            lfo_wave_triangle = 1,  /**< Triangle wave form. */
168            lfo_wave_saw      = 2,  /**< Saw (up) wave form (saw down wave form can be achieved by flipping the phase). */
169            lfo_wave_square   = 3,  /**< Square wave form. */
170        );
171    
172      /** Dimensions allow to bypass one of the following controllers.      /** Dimensions allow to bypass one of the following controllers.
173       *       *
174       * @see enumCount(), enumKey(), enumKeys(), enumValue()       * @see enumCount(), enumKey(), enumKeys(), enumValue()
# Line 338  namespace gig { Line 359  namespace gig {
359          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.
360      };      };
361    
362      /** Defines which frequencies are filtered by the VCF.      /** Audio filter types.
363         *
364         * The first 5 filter types are the ones which exist in GigaStudio, and
365         * which are very accurately modeled on LinuxSampler side such that they
366         * would sound with LinuxSampler exactly as with GigaStudio.
367         *
368         * The other filter types listed here are extensions to the gig format and
369         * are LinuxSampler specific filter type implementations. Note that none of
370         * these are duplicates of the GigaStudio filter types. For instance
371         * @c vcf_type_lowpass (GigaStudio) and @c vcf_type_lowpass_2p
372         * (LinuxSampler) are both lowpass filters with 2 poles, however they do
373         * sound differently.
374       *       *
375       * @see enumCount(), enumKey(), enumKeys(), enumValue()       * @see enumCount(), enumKey(), enumKeys(), enumValue()
376       */       */
377      GIG_DECLARE_ENUM(vcf_type_t,      GIG_DECLARE_ENUM(vcf_type_t,
378          vcf_type_lowpass      = 0x00, /**< Standard lowpass filter type. */          vcf_type_lowpass       = 0x00, /**< Standard lowpass filter type (GigaStudio). */
379          vcf_type_lowpassturbo = 0xff, /**< More poles than normal lowpass. */          vcf_type_lowpassturbo  = 0xff, /**< More poles than normal lowpass (GigaStudio). */
380          vcf_type_bandpass     = 0x01, /**< Bandpass filter type. */          vcf_type_bandpass      = 0x01, /**< Bandpass filter type (GigaStudio). */
381          vcf_type_highpass     = 0x02, /**< Highpass filter type. */          vcf_type_highpass      = 0x02, /**< Highpass filter type (GigaStudio). */
382          vcf_type_bandreject   = 0x03  /**< Band reject filter type. */          vcf_type_bandreject    = 0x03, /**< Band reject filter type (GigaStudio). */
383            vcf_type_lowpass_1p    = 0x11, /**< [gig extension]: 1-pole lowpass filter type (LinuxSampler). */
384            vcf_type_lowpass_2p    = 0x12, /**< [gig extension]: 2-pole lowpass filter type (LinuxSampler). */
385            vcf_type_lowpass_4p    = 0x14, /**< [gig extension]: 4-pole lowpass filter type (LinuxSampler). */
386            vcf_type_lowpass_6p    = 0x16, /**< [gig extension]: 6-pole lowpass filter type (LinuxSampler). */
387            vcf_type_highpass_1p   = 0x21, /**< [gig extension]: 1-pole highpass filter type (LinuxSampler). */
388            vcf_type_highpass_2p   = 0x22, /**< [gig extension]: 2-pole highpass filter type (LinuxSampler). */
389            vcf_type_highpass_4p   = 0x24, /**< [gig extension]: 4-pole highpass filter type (LinuxSampler). */
390            vcf_type_highpass_6p   = 0x26, /**< [gig extension]: 6-pole highpass filter type (LinuxSampler). */
391            vcf_type_bandpass_2p   = 0x32, /**< [gig extension]: 2-pole bandpass filter type (LinuxSampler). */
392            vcf_type_bandreject_2p = 0x42  /**< [gig extension]: 2-pole bandreject filter type (LinuxSampler). */
393      );      );
394    
395      /**      /**
# Line 433  namespace gig { Line 475  namespace gig {
475      GIG_DECLARE_ENUM(sust_rel_trg_t,      GIG_DECLARE_ENUM(sust_rel_trg_t,
476          sust_rel_trg_none        = 0x00, /**< No release triggered sample(s) are played on sustain pedal up (default). */          sust_rel_trg_none        = 0x00, /**< No release triggered sample(s) are played on sustain pedal up (default). */
477          sust_rel_trg_maxvelocity = 0x01, /**< Play release trigger sample(s) on sustain pedal up, and simply use 127 as MIDI velocity for playback. */          sust_rel_trg_maxvelocity = 0x01, /**< Play release trigger sample(s) on sustain pedal up, and simply use 127 as MIDI velocity for playback. */
478          sust_rel_trg_keyvelocity = 0x02  /**< Play release trigger sample(s) on sustain pedal up, and use the key's last MIDI note-on velocity for playback. */          sust_rel_trg_keyvelocity = 0x02  /**< Play release trigger sample(s) on sustain pedal up, and use the key`s last MIDI note-on velocity for playback. */
479      );      );
480    
481      // just symbol prototyping      // just symbol prototyping
# Line 505  namespace gig { Line 547  namespace gig {
547              uint8_t            EG1ControllerAttackInfluence;  ///< Amount EG1 Controller has influence on the EG1 Attack 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).
548              uint8_t            EG1ControllerDecayInfluence;   ///< Amount EG1 Controller has influence on the EG1 Decay time (0 - 3, where 0 means off).              uint8_t            EG1ControllerDecayInfluence;   ///< Amount EG1 Controller has influence on the EG1 Decay time (0 - 3, where 0 means off).
549              uint8_t            EG1ControllerReleaseInfluence; ///< Amount EG1 Controller has influence on the EG1 Release time (0 - 3, where 0 means off).              uint8_t            EG1ControllerReleaseInfluence; ///< Amount EG1 Controller has influence on the EG1 Release time (0 - 3, where 0 means off).
550                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).
551              double             LFO1Frequency;                 ///< Frequency of the sample amplitude LFO (0.10 - 10.00 Hz).              double             LFO1Frequency;                 ///< Frequency of the sample amplitude LFO (0.10 - 10.00 Hz).
552                double             LFO1Phase;                     ///< [gig extension]: Phase displacement of the amplitude LFO's wave form (0.0° - 360.0°).
553              uint16_t           LFO1InternalDepth;             ///< Firm pitch of the sample amplitude LFO (0 - 1200 cents).              uint16_t           LFO1InternalDepth;             ///< Firm pitch of the sample amplitude LFO (0 - 1200 cents).
554              uint16_t           LFO1ControlDepth;              ///< Controller depth influencing sample amplitude LFO pitch (0 - 1200 cents).              uint16_t           LFO1ControlDepth;              ///< Controller depth influencing sample amplitude LFO pitch (0 - 1200 cents).
555              lfo1_ctrl_t        LFO1Controller;                ///< MIDI Controller which controls sample amplitude LFO.              lfo1_ctrl_t        LFO1Controller;                ///< MIDI Controller which controls sample amplitude LFO.
556              bool               LFO1FlipPhase;                 ///< Inverts phase of the sample amplitude LFO wave.              bool               LFO1FlipPhase;                 ///< Inverts the polarity of the sample amplitude LFO wave, so it flips the wave form vertically.
557              bool               LFO1Sync;                      ///< If set to <i>true</i> only one LFO should be used for all voices.              bool               LFO1Sync;                      ///< If set to <i>true</i> only one LFO should be used for all voices.
558              // Filter Cutoff Frequency EG/LFO              // Filter Cutoff Frequency EG/LFO
559              uint16_t           EG2PreAttack;                  ///< Preattack value of the filter cutoff EG (0 - 1000 permille).              uint16_t           EG2PreAttack;                  ///< Preattack value of the filter cutoff EG (0 - 1000 permille).
# Line 524  namespace gig { Line 568  namespace gig {
568              uint8_t            EG2ControllerAttackInfluence;  ///< Amount EG2 Controller has influence on the EG2 Attack time (0 - 3, where 0 means off).              uint8_t            EG2ControllerAttackInfluence;  ///< Amount EG2 Controller has influence on the EG2 Attack time (0 - 3, where 0 means off).
569              uint8_t            EG2ControllerDecayInfluence;   ///< Amount EG2 Controller has influence on the EG2 Decay 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).
570              uint8_t            EG2ControllerReleaseInfluence; ///< Amount EG2 Controller has influence on the EG2 Release time (0 - 3, where 0 means off).              uint8_t            EG2ControllerReleaseInfluence; ///< Amount EG2 Controller has influence on the EG2 Release time (0 - 3, where 0 means off).
571                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).
572              double             LFO2Frequency;                 ///< Frequency of the filter cutoff LFO (0.10 - 10.00 Hz).              double             LFO2Frequency;                 ///< Frequency of the filter cutoff LFO (0.10 - 10.00 Hz).
573                double             LFO2Phase;                     ///< [gig extension]: Phase displacement of the filter cutoff LFO's wave form (0.0° - 360.0°).
574              uint16_t           LFO2InternalDepth;             ///< Firm pitch of the filter cutoff LFO (0 - 1200 cents).              uint16_t           LFO2InternalDepth;             ///< Firm pitch of the filter cutoff LFO (0 - 1200 cents).
575              uint16_t           LFO2ControlDepth;              ///< Controller depth influencing filter cutoff LFO pitch (0 - 1200).              uint16_t           LFO2ControlDepth;              ///< Controller depth influencing filter cutoff LFO pitch (0 - 1200).
576              lfo2_ctrl_t        LFO2Controller;                ///< MIDI Controlle which controls the filter cutoff LFO.              lfo2_ctrl_t        LFO2Controller;                ///< MIDI Controlle which controls the filter cutoff LFO.
577              bool               LFO2FlipPhase;                 ///< Inverts phase of the filter cutoff LFO wave.              bool               LFO2FlipPhase;                 ///< Inverts the polarity of the filter cutoff LFO wave, so it flips the wave form vertically.
578              bool               LFO2Sync;                      ///< If set to <i>true</i> only one LFO should be used for all voices.              bool               LFO2Sync;                      ///< If set to <i>true</i> only one LFO should be used for all voices.
579              // Sample Pitch EG/LFO              // Sample Pitch EG/LFO
580              double             EG3Attack;                     ///< Attack time of the sample pitch EG (0.000 - 10.000s).              double             EG3Attack;                     ///< Attack time of the sample pitch EG (0.000 - 10.000s).
581              int16_t            EG3Depth;                      ///< Depth of the sample pitch EG (-1200 - +1200).              int16_t            EG3Depth;                      ///< Depth of the sample pitch EG (-1200 - +1200).
582                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).
583              double             LFO3Frequency;                 ///< Frequency of the sample pitch LFO (0.10 - 10.00 Hz).              double             LFO3Frequency;                 ///< Frequency of the sample pitch LFO (0.10 - 10.00 Hz).
584                double             LFO3Phase;                     ///< [gig extension]: Phase displacement of the pitch LFO's wave form (0.0° - 360.0°).
585              int16_t            LFO3InternalDepth;             ///< Firm depth of the sample pitch LFO (-1200 - +1200 cents).              int16_t            LFO3InternalDepth;             ///< Firm depth of the sample pitch LFO (-1200 - +1200 cents).
586              int16_t            LFO3ControlDepth;              ///< Controller depth of the sample pitch LFO (-1200 - +1200 cents).              int16_t            LFO3ControlDepth;              ///< Controller depth of the sample pitch LFO (-1200 - +1200 cents).
587              lfo3_ctrl_t        LFO3Controller;                ///< MIDI Controller which controls the sample pitch LFO.              lfo3_ctrl_t        LFO3Controller;                ///< MIDI Controller which controls the sample pitch LFO.
588                bool               LFO3FlipPhase;                 ///< [gig extension]: Inverts the polarity of the pitch LFO wave, so it flips the wave form vertically (@b NOTE: this setting for LFO3 is a gig format extension; flipping the polarity was only available for LFO1 and LFO2 in the original Gigasampler/GigaStudio software).
589              bool               LFO3Sync;                      ///< If set to <i>true</i> only one LFO should be used for all voices.              bool               LFO3Sync;                      ///< If set to <i>true</i> only one LFO should be used for all voices.
590              // Filter              // Filter
591              bool               VCFEnabled;                    ///< If filter should be used.              bool               VCFEnabled;                    ///< If filter should be used.
# Line 731  namespace gig { Line 780  namespace gig {
780              double* GetCutoffVelocityTable(curve_type_t vcfVelocityCurve, uint8_t vcfVelocityDynamicRange, uint8_t vcfVelocityScale, vcf_cutoff_ctrl_t vcfCutoffController);              double* GetCutoffVelocityTable(curve_type_t vcfVelocityCurve, uint8_t vcfVelocityDynamicRange, uint8_t vcfVelocityScale, vcf_cutoff_ctrl_t vcfCutoffController);
781              double* GetVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling);              double* GetVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling);
782              double* CreateVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling);              double* CreateVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling);
783                bool UsesAnyGigFormatExtension() const;
784      };      };
785    
786      /** @brief Encapsulates sample waves of Gigasampler/GigaStudio files used for playback.      /** @brief Encapsulates sample waves of Gigasampler/GigaStudio files used for playback.
# Line 903  namespace gig { Line 953  namespace gig {
953              DimensionRegion* GetDimensionRegionByBit(const std::map<dimension_t,int>& DimCase);              DimensionRegion* GetDimensionRegionByBit(const std::map<dimension_t,int>& DimCase);
954             ~Region();             ~Region();
955              friend class Instrument;              friend class Instrument;
956            private:
957                bool UsesAnyGigFormatExtension() const;
958      };      };
959    
960      /** @brief Abstract base class for all MIDI rules.      /** @brief Abstract base class for all MIDI rules.
# Line 1138  namespace gig { Line 1190  namespace gig {
1190              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.
1191              Language_t     Language;    ///< Programming language and dialect the script is written in.              Language_t     Language;    ///< Programming language and dialect the script is written in.
1192              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.
1193                uint8_t        Uuid[16];    ///< Persistent Universally Unique Identifier of this script, which remains identical after any changes to this script.
1194    
1195              String GetScriptAsText();              String GetScriptAsText();
1196              void   SetScriptAsText(const String& text);              void   SetScriptAsText(const String& text);
# Line 1150  namespace gig { Line 1203  namespace gig {
1203              void UpdateChunks(progress_t* pProgress) OVERRIDE;              void UpdateChunks(progress_t* pProgress) OVERRIDE;
1204              void DeleteChunks() OVERRIDE;              void DeleteChunks() OVERRIDE;
1205              void RemoveAllScriptReferences();              void RemoveAllScriptReferences();
1206                void GenerateUuid();
1207              friend class ScriptGroup;              friend class ScriptGroup;
1208              friend class Instrument;              friend class Instrument;
1209          private:          private:
# Line 1276  namespace gig { Line 1330  namespace gig {
1330              MidiRule** pMidiRules;              MidiRule** pMidiRules;
1331              std::vector<_ScriptPooolEntry> scriptPoolFileOffsets;              std::vector<_ScriptPooolEntry> scriptPoolFileOffsets;
1332              std::vector<_ScriptPooolRef>* pScriptRefs;              std::vector<_ScriptPooolRef>* pScriptRefs;
1333    
1334                bool UsesAnyGigFormatExtension() const;
1335      };      };
1336    
1337      /** @brief Group of Gigasampler samples      /** @brief Group of Gigasampler samples
# Line 1422  namespace gig { Line 1478  namespace gig {
1478              std::list<Group*>::iterator GroupsIterator;              std::list<Group*>::iterator GroupsIterator;
1479              bool                        bAutoLoad;              bool                        bAutoLoad;
1480              std::list<ScriptGroup*>*    pScriptGroups;              std::list<ScriptGroup*>*    pScriptGroups;
1481    
1482                bool UsesAnyGigFormatExtension() const;
1483      };      };
1484    
1485      /**      /**

Legend:
Removed from v.3481  
changed lines
  Added in v.3723

  ViewVC Help
Powered by ViewVC