--- libgig/trunk/src/gig.h 2005/02/17 02:22:26 384 +++ libgig/trunk/src/gig.h 2005/06/06 16:50:58 613 @@ -225,6 +225,8 @@ dimension_channelaftertouch = 0x83, ///< Channel Key Pressure dimension_releasetrigger = 0x84, ///< Special dimension for triggering samples on releasing a key. dimension_keyboard = 0x85, ///< Dimension for keyswitching + dimension_roundrobin = 0x86, ///< Different samples triggered each time a note is played, dimension regions selected in sequence + dimension_random = 0x87, ///< Different samples triggered each time a note is played, random order dimension_modwheel = 0x01, ///< Modulation Wheel (MIDI Controller 1) dimension_breath = 0x02, ///< Breath Controller (Coarse, MIDI Controller 2) dimension_foot = 0x04, ///< Foot Pedal (Coarse, MIDI Controller 4) @@ -307,6 +309,27 @@ unsigned long loop_cycles_left; ///< How many times the loop has still to be passed, this value will be decremented with each loop cycle. }; + /** + * @brief Used for indicating the progress of a certain task. + * + * The function pointer argument has to be supplied with a valid + * function of the given signature which will then be called on + * progress changes. An equivalent progress_t structure will be passed + * back as argument to the callback function on each progress change. + * The factor field of the supplied progress_t structure will then + * reflect the current progress as value between 0.0 and 1.0. You might + * want to use the custom field for data needed in your callback + * function. + */ + struct progress_t { + void (*callback)(progress_t*); ///< Callback function pointer which has to be assigned to a function for progress notification. + float factor; ///< Reflects current progress as value between 0.0 and 1.0. + void* custom; ///< This pointer can be used for arbitrary data. + float __range_min; ///< Only for internal usage, do not modify! + float __range_max; ///< Only for internal usage, do not modify! + progress_t(); + }; + // just symbol prototyping class File; class Instrument; @@ -409,6 +432,8 @@ bool SustainDefeat; ///< If true: Sustain pedal will not hold a note. bool MSDecode; ///< Gigastudio flag: defines if Mid Side Recordings should be decoded. uint16_t SampleStartOffset; ///< Number of samples the sample start should be moved (0 - 2000). + double SampleAttenuation; ///< Sample volume (calculated from DLS::Sampler::Gain) + // derived attributes from DLS::Sampler DLS::Sampler::UnityNote; DLS::Sampler::FineTune; @@ -418,6 +443,8 @@ // Methods double GetVelocityAttenuation(uint8_t MIDIKeyVelocity); + double GetVelocityRelease(uint8_t MIDIKeyVelocity); + protected: DimensionRegion(RIFF::List* _3ewl); ~DimensionRegion(); @@ -456,8 +483,10 @@ static uint Instances; ///< Number of DimensionRegion instances. static VelocityTableMap* pVelocityTables; ///< Contains the tables corresponding to the various velocity parameters (VelocityResponseCurve and VelocityResponseDepth). double* pVelocityAttenuationTable; ///< Points to the velocity table corresponding to the velocity parameters of this DimensionRegion. + double* pVelocityReleaseTable; ///< Points to the velocity table corresponding to the release velocity parameters of this DimensionRegion leverage_ctrl_t DecodeLeverageController(_lev_ctrl_t EncodedController); + double* GetVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling); double* CreateVelocityTable(curve_type_t curveType, uint8_t depth, uint8_t scaling); }; @@ -481,6 +510,8 @@ 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 LoopPlayCount; ///< Number of times the loop should be played (only if Loops > 0, a value of 0 = infinite). 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). + uint32_t TruncatedBits; ///< For 24-bit compressed samples only: number of bits truncated during compression (0, 4 or 6) + bool Dithered; ///< For 24-bit compressed samples only: if dithering was used during compression with bit reduction // own methods buffer_t LoadSampleData(); @@ -616,7 +647,7 @@ Region(Instrument* pInstrument, RIFF::List* rgnList); void LoadDimensionRegions(RIFF::List* rgn); - Sample* GetSampleFromWavePool(unsigned int WavePoolTableIndex); + Sample* GetSampleFromWavePool(unsigned int WavePoolTableIndex, progress_t* pProgress = NULL); ~Region(); friend class Instrument; }; @@ -655,7 +686,7 @@ Region* RegionKeyTable[128]; ///< fast lookup for the corresponding Region of a MIDI key int RegionIndex; - Instrument(File* pFile, RIFF::List* insList); + Instrument(File* pFile, RIFF::List* insList, progress_t* pProgress = NULL); ~Instrument(); friend class File; }; @@ -675,11 +706,11 @@ DLS::Resource::GetParent; // overridden methods File(RIFF::File* pRIFF); - Sample* GetFirstSample(); ///< Returns a pointer to the first Sample object of the file, NULL otherwise. + Sample* GetFirstSample(progress_t* pProgress = NULL); ///< Returns a pointer to the first Sample object of the file, NULL otherwise. Sample* GetNextSample(); ///< Returns a pointer to the next Sample object of the file, NULL otherwise. Instrument* GetFirstInstrument(); ///< Returns a pointer to the first Instrument object of the file, NULL otherwise. Instrument* GetNextInstrument(); ///< Returns a pointer to the next Instrument object of the file, NULL otherwise. - Instrument* GetInstrument(uint index); + Instrument* GetInstrument(uint index, progress_t* pProgress = NULL); ~File(); protected: typedef std::list SampleList; @@ -690,8 +721,8 @@ InstrumentList* pInstruments; InstrumentList::iterator InstrumentsIterator; - void LoadSamples(); - void LoadInstruments(); + void LoadSamples(progress_t* pProgress = NULL); + void LoadInstruments(progress_t* pProgress = NULL); friend class Region; }; @@ -702,6 +733,9 @@ void PrintMessage(); }; + String libraryName(); + String libraryVersion(); + } // namespace gig #endif // __GIG_H__