/[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 406 by persson, Wed Feb 23 19:11:07 2005 UTC revision 774 by persson, Sun Sep 18 12:41:56 2005 UTC
# Line 148  namespace gig { Line 148  namespace gig {
148      /** Defines how the filter cutoff frequency is controlled by. */      /** Defines how the filter cutoff frequency is controlled by. */
149      typedef enum {      typedef enum {
150          vcf_cutoff_ctrl_none         = 0x00,          vcf_cutoff_ctrl_none         = 0x00,
151            vcf_cutoff_ctrl_none2        = 0x01,  ///< The difference betwheen none and none2 is unknown
152          vcf_cutoff_ctrl_modwheel     = 0x81,  ///< Modulation Wheel (MIDI Controller 1)          vcf_cutoff_ctrl_modwheel     = 0x81,  ///< Modulation Wheel (MIDI Controller 1)
153          vcf_cutoff_ctrl_effect1      = 0x8c,  ///< Effect Controller 1 (Coarse, MIDI Controller 12)          vcf_cutoff_ctrl_effect1      = 0x8c,  ///< Effect Controller 1 (Coarse, MIDI Controller 12)
154          vcf_cutoff_ctrl_effect2      = 0x8d,  ///< Effect Controller 2 (Coarse, MIDI Controller 13)          vcf_cutoff_ctrl_effect2      = 0x8d,  ///< Effect Controller 2 (Coarse, MIDI Controller 13)
# Line 225  namespace gig { Line 226  namespace gig {
226          dimension_channelaftertouch = 0x83, ///< Channel Key Pressure          dimension_channelaftertouch = 0x83, ///< Channel Key Pressure
227          dimension_releasetrigger    = 0x84, ///< Special dimension for triggering samples on releasing a key.          dimension_releasetrigger    = 0x84, ///< Special dimension for triggering samples on releasing a key.
228          dimension_keyboard          = 0x85, ///< Dimension for keyswitching          dimension_keyboard          = 0x85, ///< Dimension for keyswitching
229            dimension_roundrobin        = 0x86, ///< Different samples triggered each time a note is played, dimension regions selected in sequence
230            dimension_random            = 0x87, ///< Different samples triggered each time a note is played, random order
231          dimension_modwheel          = 0x01, ///< Modulation Wheel (MIDI Controller 1)          dimension_modwheel          = 0x01, ///< Modulation Wheel (MIDI Controller 1)
232          dimension_breath            = 0x02, ///< Breath Controller (Coarse, MIDI Controller 2)          dimension_breath            = 0x02, ///< Breath Controller (Coarse, MIDI Controller 2)
233          dimension_foot              = 0x04, ///< Foot Pedal (Coarse, MIDI Controller 4)          dimension_foot              = 0x04, ///< Foot Pedal (Coarse, MIDI Controller 4)
# Line 267  namespace gig { Line 270  namespace gig {
270          uint8_t      zones;      ///< Number of zones the dimension has.          uint8_t      zones;      ///< Number of zones the dimension has.
271          split_type_t split_type; ///< Intended for internal usage: will be used to convert a dimension value into the corresponding dimension bit number.          split_type_t split_type; ///< Intended for internal usage: will be used to convert a dimension value into the corresponding dimension bit number.
272          range_t*     ranges;     ///< Intended for internal usage: Points to the beginning of a range_t array which reflects the value ranges of each dimension zone (only if custom defined ranges are defined, is NULL otherwise).          range_t*     ranges;     ///< Intended for internal usage: Points to the beginning of a range_t array which reflects the value ranges of each dimension zone (only if custom defined ranges are defined, is NULL otherwise).
273          unsigned int 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.
274      };      };
275    
276      /** Defines which frequencies are filtered by the VCF. */      /** Defines which frequencies are filtered by the VCF. */
# Line 307  namespace gig { Line 310  namespace gig {
310          unsigned long loop_cycles_left;  ///< How many times the loop has still to be passed, this value will be decremented with each loop cycle.          unsigned long loop_cycles_left;  ///< How many times the loop has still to be passed, this value will be decremented with each loop cycle.
311      };      };
312    
313        /**
314         * @brief Used for indicating the progress of a certain task.
315         *
316         * The function pointer argument has to be supplied with a valid
317         * function of the given signature which will then be called on
318         * progress changes. An equivalent progress_t structure will be passed
319         * back as argument to the callback function on each progress change.
320         * The factor field of the supplied progress_t structure will then
321         * reflect the current progress as value between 0.0 and 1.0. You might
322         * want to use the custom field for data needed in your callback
323         * function.
324         */
325        struct progress_t {
326            void (*callback)(progress_t*); ///< Callback function pointer which has to be assigned to a function for progress notification.
327            float factor;                  ///< Reflects current progress as value between 0.0 and 1.0.
328            void* custom;                  ///< This pointer can be used for arbitrary data.
329            float __range_min;             ///< Only for internal usage, do not modify!
330            float __range_max;             ///< Only for internal usage, do not modify!
331            progress_t();
332        };
333    
334      // just symbol prototyping      // just symbol prototyping
335      class File;      class File;
336      class Instrument;      class Instrument;
# Line 380  namespace gig { Line 404  namespace gig {
404              bool               VCFEnabled;                    ///< If filter should be used.              bool               VCFEnabled;                    ///< If filter should be used.
405              vcf_type_t         VCFType;                       ///< Defines the general filter characteristic (lowpass, highpass, bandpass, etc.).              vcf_type_t         VCFType;                       ///< Defines the general filter characteristic (lowpass, highpass, bandpass, etc.).
406              vcf_cutoff_ctrl_t  VCFCutoffController;           ///< Specifies which external controller has influence on the filter cutoff frequency.              vcf_cutoff_ctrl_t  VCFCutoffController;           ///< Specifies which external controller has influence on the filter cutoff frequency.
407                bool               VCFCutoffControllerInvert;     ///< Inverts values coming from the defined cutoff controller
408              uint8_t            VCFCutoff;                     ///< Max. cutoff frequency.              uint8_t            VCFCutoff;                     ///< Max. cutoff frequency.
409              curve_type_t       VCFVelocityCurve;              ///< Defines a transformation curve for the incoming velocity values, affecting the VCF.              curve_type_t       VCFVelocityCurve;              ///< Defines a transformation curve for the incoming velocity values, affecting the VCF.
410              uint8_t            VCFVelocityScale;              ///< (0-127) Amount velocity controls VCF cutoff frequency (only if no other VCF cutoff controller is defined).              uint8_t            VCFVelocityScale;              ///< (0-127) Amount velocity controls VCF cutoff frequency (only if no other VCF cutoff controller is defined, otherwise this is the minimum cutoff).
411              uint8_t            VCFVelocityDynamicRange;       ///< 0x04 = lowest, 0x00 = highest              uint8_t            VCFVelocityDynamicRange;       ///< 0x04 = lowest, 0x00 = highest
412              uint8_t            VCFResonance;                  ///< Firm internal filter resonance weight.              uint8_t            VCFResonance;                  ///< Firm internal filter resonance weight.
413              bool               VCFResonanceDynamic;           ///< If <i>true</i>: Increases the resonance Q according to changes of controllers that actually control the VCF cutoff frequency (EG2, ext. VCF MIDI controller).              bool               VCFResonanceDynamic;           ///< If <i>true</i>: Increases the resonance Q according to changes of controllers that actually control the VCF cutoff frequency (EG2, ext. VCF MIDI controller).
# Line 420  namespace gig { Line 445  namespace gig {
445    
446              // Methods              // Methods
447              double GetVelocityAttenuation(uint8_t MIDIKeyVelocity);              double GetVelocityAttenuation(uint8_t MIDIKeyVelocity);
448                double GetVelocityRelease(uint8_t MIDIKeyVelocity);
449                double GetVelocityCutoff(uint8_t MIDIKeyVelocity);
450    
451          protected:          protected:
452              DimensionRegion(RIFF::List* _3ewl);              DimensionRegion(RIFF::List* _3ewl);
453             ~DimensionRegion();             ~DimensionRegion();
# Line 458  namespace gig { Line 486  namespace gig {
486              static uint              Instances;                  ///< Number of DimensionRegion instances.              static uint              Instances;                  ///< Number of DimensionRegion instances.
487              static VelocityTableMap* pVelocityTables;            ///< Contains the tables corresponding to the various velocity parameters (VelocityResponseCurve and VelocityResponseDepth).              static VelocityTableMap* pVelocityTables;            ///< Contains the tables corresponding to the various velocity parameters (VelocityResponseCurve and VelocityResponseDepth).
488              double*                  pVelocityAttenuationTable;  ///< Points to the velocity table corresponding to the velocity parameters of this DimensionRegion.              double*                  pVelocityAttenuationTable;  ///< Points to the velocity table corresponding to the velocity parameters of this DimensionRegion.
489                double*                  pVelocityReleaseTable;      ///< Points to the velocity table corresponding to the release velocity parameters of this DimensionRegion
490                double*                  pVelocityCutoffTable;       ///< Points to the velocity table corresponding to the filter velocity parameters of this DimensionRegion
491    
492              leverage_ctrl_t DecodeLeverageController(_lev_ctrl_t EncodedController);              leverage_ctrl_t DecodeLeverageController(_lev_ctrl_t EncodedController);
493                double* GetVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling);
494              double* CreateVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling);              double* CreateVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling);
495      };      };
496    
# Line 483  namespace gig { Line 514  namespace gig {
514              uint32_t       LoopFraction;      ///< The fractional value specifies a fraction of a sample at which to loop (only if Loops > 0). This allows a loop to be fine tuned at a resolution greater than one sample. A value of 0 means no fraction, a value of 0x80000000 means 1/2 of a sample length. 0xFFFFFFFF is the smallest fraction of a sample that can be represented.              uint32_t       LoopFraction;      ///< The fractional value specifies a fraction of a sample at which to loop (only if Loops > 0). This allows a loop to be fine tuned at a resolution greater than one sample. A value of 0 means no fraction, a value of 0x80000000 means 1/2 of a sample length. 0xFFFFFFFF is the smallest fraction of a sample that can be represented.
515              uint32_t       LoopPlayCount;     ///< Number of times the loop should be played (only if Loops > 0, a value of 0 = infinite).              uint32_t       LoopPlayCount;     ///< Number of times the loop should be played (only if Loops > 0, a value of 0 = infinite).
516              bool           Compressed;        ///< If the sample wave is compressed (probably just interesting for instrument and sample editors, as this library already handles the decompression in it's sample access methods anyway).              bool           Compressed;        ///< If the sample wave is compressed (probably just interesting for instrument and sample editors, as this library already handles the decompression in it's sample access methods anyway).
517                uint32_t       TruncatedBits;     ///< For 24-bit compressed samples only: number of bits truncated during compression (0, 4 or 6)
518                bool           Dithered;          ///< For 24-bit compressed samples only: if dithering was used during compression with bit reduction
519    
520              // own methods              // own methods
521              buffer_t      LoadSampleData();              buffer_t      LoadSampleData();
# Line 509  namespace gig { Line 542  namespace gig {
542              unsigned long        WorstCaseFrameSize;      ///< For compressed samples only: size (in bytes) of the largest possible sample frame.              unsigned long        WorstCaseFrameSize;      ///< For compressed samples only: size (in bytes) of the largest possible sample frame.
543              unsigned long        SamplesPerFrame;         ///< For compressed samples only: number of samples in a full sample frame.              unsigned long        SamplesPerFrame;         ///< For compressed samples only: number of samples in a full sample frame.
544              buffer_t             RAMCache;                ///< Buffers samples (already uncompressed) in RAM.              buffer_t             RAMCache;                ///< Buffers samples (already uncompressed) in RAM.
545                unsigned long        FileNo;                  ///< File number (> 0 when sample is stored in an extension file, 0 when it's in the gig)
546    
547              Sample(File* pFile, RIFF::List* waveList, unsigned long WavePoolOffset);              Sample(File* pFile, RIFF::List* waveList, unsigned long WavePoolOffset, unsigned long fileNo = 0);
548             ~Sample();             ~Sample();
549              /**              /**
550               * Swaps the order of the data words in the given memory area               * Swaps the order of the data words in the given memory area
# Line 618  namespace gig { Line 652  namespace gig {
652    
653              Region(Instrument* pInstrument, RIFF::List* rgnList);              Region(Instrument* pInstrument, RIFF::List* rgnList);
654              void LoadDimensionRegions(RIFF::List* rgn);              void LoadDimensionRegions(RIFF::List* rgn);
655              Sample* GetSampleFromWavePool(unsigned int WavePoolTableIndex);              Sample* GetSampleFromWavePool(unsigned int WavePoolTableIndex, progress_t* pProgress = NULL);
656             ~Region();             ~Region();
657              friend class Instrument;              friend class Instrument;
658      };      };
# Line 657  namespace gig { Line 691  namespace gig {
691              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
692              int       RegionIndex;              int       RegionIndex;
693    
694              Instrument(File* pFile, RIFF::List* insList);              Instrument(File* pFile, RIFF::List* insList, progress_t* pProgress = NULL);
695             ~Instrument();             ~Instrument();
696              friend class File;              friend class File;
697      };      };
# Line 677  namespace gig { Line 711  namespace gig {
711              DLS::Resource::GetParent;              DLS::Resource::GetParent;
712              // overridden  methods              // overridden  methods
713              File(RIFF::File* pRIFF);              File(RIFF::File* pRIFF);
714              Sample*     GetFirstSample();     ///< Returns a pointer to the first <i>Sample</i> object of the file, <i>NULL</i> otherwise.              Sample*     GetFirstSample(progress_t* pProgress = NULL); ///< Returns a pointer to the first <i>Sample</i> object of the file, <i>NULL</i> otherwise.
715              Sample*     GetNextSample();      ///< Returns a pointer to the next <i>Sample</i> object of the file, <i>NULL</i> otherwise.              Sample*     GetNextSample();      ///< Returns a pointer to the next <i>Sample</i> object of the file, <i>NULL</i> otherwise.
716              Instrument* GetFirstInstrument(); ///< Returns a pointer to the first <i>Instrument</i> object of the file, <i>NULL</i> otherwise.              Instrument* GetFirstInstrument(); ///< Returns a pointer to the first <i>Instrument</i> object of the file, <i>NULL</i> otherwise.
717              Instrument* GetNextInstrument();  ///< Returns a pointer to the next <i>Instrument</i> object of the file, <i>NULL</i> otherwise.              Instrument* GetNextInstrument();  ///< Returns a pointer to the next <i>Instrument</i> object of the file, <i>NULL</i> otherwise.
718              Instrument* GetInstrument(uint index);              Instrument* GetInstrument(uint index, progress_t* pProgress = NULL);
719             ~File();             ~File();
720          protected:          protected:
721              typedef std::list<Sample*>     SampleList;              typedef std::list<Sample*>     SampleList;
# Line 692  namespace gig { Line 726  namespace gig {
726              InstrumentList*          pInstruments;              InstrumentList*          pInstruments;
727              InstrumentList::iterator InstrumentsIterator;              InstrumentList::iterator InstrumentsIterator;
728    
729              void LoadSamples();              void LoadSamples(progress_t* pProgress = NULL);
730              void LoadInstruments();              void LoadInstruments(progress_t* pProgress = NULL);
731              friend class Region;              friend class Region;
732    
733                std::list<RIFF::File*> ExtensionFiles;
734      };      };
735    
736      /** Will be thrown whenever a gig specific error occurs while trying to access a Gigasampler File. */      /** Will be thrown whenever a gig specific error occurs while trying to access a Gigasampler File. */
# Line 704  namespace gig { Line 740  namespace gig {
740              void PrintMessage();              void PrintMessage();
741      };      };
742    
743        String libraryName();
744        String libraryVersion();
745    
746  } // namespace gig  } // namespace gig
747    
748  #endif // __GIG_H__  #endif // __GIG_H__

Legend:
Removed from v.406  
changed lines
  Added in v.774

  ViewVC Help
Powered by ViewVC