/[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 3446 by schoenebeck, Sun Dec 23 21:47:26 2018 UTC revision 3623 by schoenebeck, Wed Oct 2 16:30:29 2019 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-2019 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 148  namespace gig { Line 148  namespace gig {
148          curve_type_unknown   = 0xffffffff  /**< Unknown curve type. */          curve_type_unknown   = 0xffffffff  /**< Unknown curve type. */
149      );      );
150    
151        /** Defines the wave form type used by an LFO (gig format extension).
152         *
153         * This is a gig format extension. The original Gigasampler/GigaStudio
154         * software always used a sine (sinus) wave form for all its 3 LFOs, so this
155         * was not configurable in the original gig format. Accordingly setting any
156         * other wave form than sine (sinus) will be ignored by the original
157         * Gigasampler/GigaStudio software.
158         *
159         * @see enumCount(), enumKey(), enumKeys(), enumValue()
160         */
161        GIG_DECLARE_ENUM(lfo_wave_t,
162            lfo_wave_sine     = 0,  /**< Sine (sinus) wave form (this is the default wave form). */
163            lfo_wave_triangle = 1,  /**< Triangle wave form. */
164            lfo_wave_saw      = 2,  /**< Saw (up) wave form (saw down wave form can be achieved by flipping the phase). */
165            lfo_wave_square   = 3,  /**< Square wave form. */
166        );
167    
168      /** Dimensions allow to bypass one of the following controllers.      /** Dimensions allow to bypass one of the following controllers.
169       *       *
170       * @see enumCount(), enumKey(), enumKeys(), enumValue()       * @see enumCount(), enumKey(), enumKeys(), enumValue()
# Line 433  namespace gig { Line 450  namespace gig {
450      GIG_DECLARE_ENUM(sust_rel_trg_t,      GIG_DECLARE_ENUM(sust_rel_trg_t,
451          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). */
452          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. */
453          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. */
454      );      );
455    
456      // just symbol prototyping      // just symbol prototyping
# Line 505  namespace gig { Line 522  namespace gig {
522              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).
523              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).
524              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).
525                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).
526              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).
527                double             LFO1Phase;                     ///< [gig extension]: Phase displacement of the amplitude LFO's wave form (0.0° - 360.0°).
528              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).
529              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).
530              lfo1_ctrl_t        LFO1Controller;                ///< MIDI Controller which controls sample amplitude LFO.              lfo1_ctrl_t        LFO1Controller;                ///< MIDI Controller which controls sample amplitude LFO.
531              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.
532              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.
533              // Filter Cutoff Frequency EG/LFO              // Filter Cutoff Frequency EG/LFO
534              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 543  namespace gig {
543              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).
544              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).
545              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).
546                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).
547              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).
548                double             LFO2Phase;                     ///< [gig extension]: Phase displacement of the filter cutoff LFO's wave form (0.0° - 360.0°).
549              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).
550              uint16_t           LFO2ControlDepth;              ///< Controller depth influencing filter cutoff LFO pitch (0 - 1200).              uint16_t           LFO2ControlDepth;              ///< Controller depth influencing filter cutoff LFO pitch (0 - 1200).
551              lfo2_ctrl_t        LFO2Controller;                ///< MIDI Controlle which controls the filter cutoff LFO.              lfo2_ctrl_t        LFO2Controller;                ///< MIDI Controlle which controls the filter cutoff LFO.
552              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.
553              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.
554              // Sample Pitch EG/LFO              // Sample Pitch EG/LFO
555              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).
556              int16_t            EG3Depth;                      ///< Depth of the sample pitch EG (-1200 - +1200).              int16_t            EG3Depth;                      ///< Depth of the sample pitch EG (-1200 - +1200).
557                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).
558              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).
559                double             LFO3Phase;                     ///< [gig extension]: Phase displacement of the pitch LFO's wave form (0.0° - 360.0°).
560              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).
561              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).
562              lfo3_ctrl_t        LFO3Controller;                ///< MIDI Controller which controls the sample pitch LFO.              lfo3_ctrl_t        LFO3Controller;                ///< MIDI Controller which controls the sample pitch LFO.
563                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).
564              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.
565              // Filter              // Filter
566              bool               VCFEnabled;                    ///< If filter should be used.              bool               VCFEnabled;                    ///< If filter should be used.
# Line 604  namespace gig { Line 628  namespace gig {
628              using DLS::Sampler::AddSampleLoop;              using DLS::Sampler::AddSampleLoop;
629              using DLS::Sampler::DeleteSampleLoop;              using DLS::Sampler::DeleteSampleLoop;
630              // overridden methods              // overridden methods
631              virtual void SetGain(int32_t gain);              virtual void SetGain(int32_t gain) OVERRIDE;
632              virtual void UpdateChunks(progress_t* pProgress);              virtual void UpdateChunks(progress_t* pProgress) OVERRIDE;
633              virtual void CopyAssign(const DimensionRegion* orig);              virtual void CopyAssign(const DimensionRegion* orig);
634          protected:          protected:
635              uint8_t* VelocityTable; ///< For velocity dimensions with custom defined zone ranges only: used for fast converting from velocity MIDI value to dimension bit number.              uint8_t* VelocityTable; ///< For velocity dimensions with custom defined zone ranges only: used for fast converting from velocity MIDI value to dimension bit number.
# Line 731  namespace gig { Line 755  namespace gig {
755              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);
756              double* GetVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling);              double* GetVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling);
757              double* CreateVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling);              double* CreateVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling);
758                bool UsesAnyGigFormatExtension() const;
759      };      };
760    
761      /** @brief Encapsulates sample waves of Gigasampler/GigaStudio files used for playback.      /** @brief Encapsulates sample waves of Gigasampler/GigaStudio files used for playback.
# Line 797  namespace gig { Line 822  namespace gig {
822              file_offset_t ReadAndLoop(void* pBuffer, file_offset_t SampleCount, playback_state_t* pPlaybackState, DimensionRegion* pDimRgn, buffer_t* pExternalDecompressionBuffer = NULL);              file_offset_t ReadAndLoop(void* pBuffer, file_offset_t SampleCount, playback_state_t* pPlaybackState, DimensionRegion* pDimRgn, buffer_t* pExternalDecompressionBuffer = NULL);
823              file_offset_t Write(void* pBuffer, file_offset_t SampleCount);              file_offset_t Write(void* pBuffer, file_offset_t SampleCount);
824              Group*        GetGroup() const;              Group*        GetGroup() const;
825              virtual void  UpdateChunks(progress_t* pProgress);              virtual void  UpdateChunks(progress_t* pProgress) OVERRIDE;
826              void CopyAssignMeta(const Sample* orig);              void CopyAssignMeta(const Sample* orig);
827              void CopyAssignWave(const Sample* orig);              void CopyAssignWave(const Sample* orig);
828              uint32_t GetWaveDataCRC32Checksum();              uint32_t GetWaveDataCRC32Checksum();
# Line 891  namespace gig { Line 916  namespace gig {
916              void             SplitDimensionZone(dimension_t type, int zone);              void             SplitDimensionZone(dimension_t type, int zone);
917              void             SetDimensionType(dimension_t oldType, dimension_t newType);              void             SetDimensionType(dimension_t oldType, dimension_t newType);
918              // overridden methods              // overridden methods
919              virtual void     SetKeyRange(uint16_t Low, uint16_t High);              virtual void     SetKeyRange(uint16_t Low, uint16_t High) OVERRIDE;
920              virtual void     UpdateChunks(progress_t* pProgress);              virtual void     UpdateChunks(progress_t* pProgress) OVERRIDE;
921              virtual void     CopyAssign(const Region* orig);              virtual void     CopyAssign(const Region* orig);
922          protected:          protected:
923              Region(Instrument* pInstrument, RIFF::List* rgnList);              Region(Instrument* pInstrument, RIFF::List* rgnList);
# Line 985  namespace gig { Line 1010  namespace gig {
1010          protected:          protected:
1011              MidiRuleCtrlTrigger(RIFF::Chunk* _3ewg);              MidiRuleCtrlTrigger(RIFF::Chunk* _3ewg);
1012              MidiRuleCtrlTrigger();              MidiRuleCtrlTrigger();
1013              void UpdateChunks(uint8_t* pData) const;              void UpdateChunks(uint8_t* pData) const OVERRIDE;
1014              friend class Instrument;              friend class Instrument;
1015      };      };
1016    
# Line 1025  namespace gig { Line 1050  namespace gig {
1050          protected:          protected:
1051              MidiRuleLegato(RIFF::Chunk* _3ewg);              MidiRuleLegato(RIFF::Chunk* _3ewg);
1052              MidiRuleLegato();              MidiRuleLegato();
1053              void UpdateChunks(uint8_t* pData) const;              void UpdateChunks(uint8_t* pData) const OVERRIDE;
1054              friend class Instrument;              friend class Instrument;
1055      };      };
1056    
# Line 1077  namespace gig { Line 1102  namespace gig {
1102          protected:          protected:
1103              MidiRuleAlternator(RIFF::Chunk* _3ewg);              MidiRuleAlternator(RIFF::Chunk* _3ewg);
1104              MidiRuleAlternator();              MidiRuleAlternator();
1105              void UpdateChunks(uint8_t* pData) const;              void UpdateChunks(uint8_t* pData) const OVERRIDE;
1106              friend class Instrument;              friend class Instrument;
1107      };      };
1108    
# Line 1097  namespace gig { Line 1122  namespace gig {
1122      class MidiRuleUnknown : public MidiRule {      class MidiRuleUnknown : public MidiRule {
1123          protected:          protected:
1124              MidiRuleUnknown() { }              MidiRuleUnknown() { }
1125              void UpdateChunks(uint8_t* pData) const { }              void UpdateChunks(uint8_t* pData) const OVERRIDE { }
1126              friend class Instrument;              friend class Instrument;
1127      };      };
1128    
# Line 1121  namespace gig { Line 1146  namespace gig {
1146       * - <a href="http://doc.linuxsampler.org/Instrument_Scripts/NKSP_Language/Reference/">NKSP Reference Manual</a>       * - <a href="http://doc.linuxsampler.org/Instrument_Scripts/NKSP_Language/Reference/">NKSP Reference Manual</a>
1147       * - <a href="http://doc.linuxsampler.org/Gigedit/Managing_Scripts">Using Instrument Scripts with Gigedit</a>       * - <a href="http://doc.linuxsampler.org/Gigedit/Managing_Scripts">Using Instrument Scripts with Gigedit</a>
1148       */       */
1149      class Script {      class Script : protected DLS::Storage {
1150          public:          public:
1151              enum Encoding_t {              enum Encoding_t {
1152                  ENCODING_ASCII = 0 ///< Standard 8 bit US ASCII character encoding (default).                  ENCODING_ASCII = 0 ///< Standard 8 bit US ASCII character encoding (default).
# Line 1147  namespace gig { Line 1172  namespace gig {
1172          protected:          protected:
1173              Script(ScriptGroup* group, RIFF::Chunk* ckScri);              Script(ScriptGroup* group, RIFF::Chunk* ckScri);
1174              virtual ~Script();              virtual ~Script();
1175              void UpdateChunks(progress_t* pProgress);              void UpdateChunks(progress_t* pProgress) OVERRIDE;
1176                void DeleteChunks() OVERRIDE;
1177              void RemoveAllScriptReferences();              void RemoveAllScriptReferences();
1178              friend class ScriptGroup;              friend class ScriptGroup;
1179              friend class Instrument;              friend class Instrument;
# Line 1169  namespace gig { Line 1195  namespace gig {
1195       * not available in the GigaStudio 4 software. It is currently only       * not available in the GigaStudio 4 software. It is currently only
1196       * supported by LinuxSampler and gigedit.       * supported by LinuxSampler and gigedit.
1197       */       */
1198      class ScriptGroup {      class ScriptGroup : protected DLS::Storage {
1199          public:          public:
1200              String   Name; ///< Name of this script group. For example to be displayed in an instrument editor.              String   Name; ///< Name of this script group. For example to be displayed in an instrument editor.
1201    
# Line 1180  namespace gig { Line 1206  namespace gig {
1206              ScriptGroup(File* file, RIFF::List* lstRTIS);              ScriptGroup(File* file, RIFF::List* lstRTIS);
1207              virtual ~ScriptGroup();              virtual ~ScriptGroup();
1208              void LoadScripts();              void LoadScripts();
1209              void UpdateChunks(progress_t* pProgress);              virtual void UpdateChunks(progress_t* pProgress) OVERRIDE;
1210                virtual void DeleteChunks() OVERRIDE;
1211              friend class Script;              friend class Script;
1212              friend class File;              friend class File;
1213          private:          private:
# Line 1233  namespace gig { Line 1260  namespace gig {
1260              Region*   AddRegion();              Region*   AddRegion();
1261              void      DeleteRegion(Region* pRegion);              void      DeleteRegion(Region* pRegion);
1262              void      MoveTo(Instrument* dst);              void      MoveTo(Instrument* dst);
1263              virtual void UpdateChunks(progress_t* pProgress);              virtual void UpdateChunks(progress_t* pProgress) OVERRIDE;
1264              virtual void CopyAssign(const Instrument* orig);              virtual void CopyAssign(const Instrument* orig);
1265              // own methods              // own methods
1266              Region*   GetRegion(unsigned int Key);              Region*   GetRegion(unsigned int Key);
# Line 1287  namespace gig { Line 1314  namespace gig {
1314       * there is always at least one Group in a .gig file, no matter if you       * there is always at least one Group in a .gig file, no matter if you
1315       * created one yet or not.       * created one yet or not.
1316       */       */
1317      class Group {      class Group : public DLS::Storage {
1318          public:          public:
1319              String Name; ///< Stores the name of this Group.              String Name; ///< Stores the name of this Group.
1320    
# Line 1297  namespace gig { Line 1324  namespace gig {
1324          protected:          protected:
1325              Group(File* file, RIFF::Chunk* ck3gnm);              Group(File* file, RIFF::Chunk* ck3gnm);
1326              virtual ~Group();              virtual ~Group();
1327              virtual void UpdateChunks(progress_t* pProgress);              virtual void UpdateChunks(progress_t* pProgress) OVERRIDE;
1328                virtual void DeleteChunks() OVERRIDE;
1329              void MoveAll();              void MoveAll();
1330              friend class File;              friend class File;
1331          private:          private:
# Line 1360  namespace gig { Line 1388  namespace gig {
1388              using DLS::File::Save;              using DLS::File::Save;
1389              using DLS::File::GetFileName;              using DLS::File::GetFileName;
1390              using DLS::File::SetFileName;              using DLS::File::SetFileName;
1391                using DLS::File::GetRiffFile;
1392              // overridden  methods              // overridden  methods
1393              File();              File();
1394              File(RIFF::File* pRIFF);              File(RIFF::File* pRIFF);
# Line 1391  namespace gig { Line 1420  namespace gig {
1420              ScriptGroup* AddScriptGroup();              ScriptGroup* AddScriptGroup();
1421              void        DeleteScriptGroup(ScriptGroup* pGroup);              void        DeleteScriptGroup(ScriptGroup* pGroup);
1422              virtual    ~File();              virtual    ~File();
1423              virtual void UpdateChunks(progress_t* pProgress);              virtual void UpdateChunks(progress_t* pProgress) OVERRIDE;
1424          protected:          protected:
1425              // overridden protected methods from DLS::File              // overridden protected methods from DLS::File
1426              virtual void LoadSamples();              virtual void LoadSamples() OVERRIDE;
1427              virtual void LoadInstruments();              virtual void LoadInstruments() OVERRIDE;
1428              virtual void LoadGroups();              virtual void LoadGroups();
1429              virtual void UpdateFileOffsets();              virtual void UpdateFileOffsets() OVERRIDE;
1430              // own protected methods              // own protected methods
1431              virtual void LoadSamples(progress_t* pProgress);              virtual void LoadSamples(progress_t* pProgress);
1432              virtual void LoadInstruments(progress_t* pProgress);              virtual void LoadInstruments(progress_t* pProgress);

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

  ViewVC Help
Powered by ViewVC