--- libgig/trunk/src/DLS.h 2014/05/10 02:06:58 2543 +++ libgig/trunk/src/DLS.h 2014/12/29 16:25:51 2682 @@ -104,6 +104,7 @@ namespace DLS { typedef std::string String; + typedef RIFF::progress_t progress_t; /** Quadtuple version number ("major.minor.release.build"). */ struct version_t { @@ -199,7 +200,7 @@ conn_trn_convex = 0x0002, conn_trn_switch = 0x0003 } conn_trn_t; - + /** Lower and upper limit of a range. */ struct range_t { uint16_t low; ///< Low value of range. @@ -214,6 +215,15 @@ inline bool operator== (const range_t& other) const { return low == other.low && high == other.high; } + + inline bool overlaps(uint16_t scalar) const { + return low <= scalar && scalar <= high; + } + + inline bool overlaps(const range_t& other) const { + return overlaps(other.low) || overlaps(other.high) || + other.overlaps(low) || other.overlaps(high); + } }; /** Defines Sample Loop Points. */ @@ -267,7 +277,7 @@ Articulation(RIFF::Chunk* artl); virtual ~Articulation(); - virtual void UpdateChunks(); + virtual void UpdateChunks(progress_t* pProgress); protected: RIFF::Chunk* pArticulationCk; uint32_t HeaderSize; @@ -279,7 +289,7 @@ Articulator(RIFF::List* ParentList); Articulation* GetFirstArticulation(); Articulation* GetNextArticulation(); - virtual void UpdateChunks(); + virtual void UpdateChunks(progress_t* pProgress); virtual void CopyAssign(const Articulator* orig); protected: typedef std::list ArticulationList; @@ -321,7 +331,7 @@ Info(RIFF::List* list); void SetFixedStringLengths(const string_length_t* lengths); virtual ~Info(); - virtual void UpdateChunks(); + virtual void UpdateChunks(progress_t* pProgress); virtual void CopyAssign(const Info* orig); private: RIFF::List* pResourceListChunk; @@ -339,7 +349,7 @@ Resource* GetParent() { return pParent; } const Resource* GetParent() const { return pParent; } - virtual void UpdateChunks(); + virtual void UpdateChunks(progress_t* pProgress); void GenerateDLSID(); virtual void CopyAssign(const Resource* orig); protected: @@ -364,7 +374,7 @@ void AddSampleLoop(sample_loop_t* pLoopDef); void DeleteSampleLoop(sample_loop_t* pLoopDef); virtual void SetGain(int32_t gain); - virtual void UpdateChunks(); + virtual void UpdateChunks(progress_t* pProgress); virtual void CopyAssign(const Sampler* orig); protected: RIFF::List* pParentList; @@ -400,7 +410,7 @@ unsigned long SetPos(unsigned long SampleCount, RIFF::stream_whence_t Whence = RIFF::stream_start); unsigned long Read(void* pBuffer, unsigned long SampleCount); unsigned long Write(void* pBuffer, unsigned long SampleCount); - virtual void UpdateChunks(); + virtual void UpdateChunks(progress_t* pProgress); virtual void CopyAssign(const Sample* orig); protected: RIFF::List* pWaveList; @@ -431,7 +441,7 @@ Sample* GetSample(); void SetSample(Sample* pSample); virtual void SetKeyRange(uint16_t Low, uint16_t High); - virtual void UpdateChunks(); + virtual void UpdateChunks(progress_t* pProgress); virtual void CopyAssign(const Region* orig); protected: RIFF::List* pCkRegion; @@ -459,7 +469,7 @@ Region* GetNextRegion(); Region* AddRegion(); void DeleteRegion(Region* pRegion); - virtual void UpdateChunks(); + virtual void UpdateChunks(progress_t* pProgress); virtual void CopyAssign(const Instrument* orig); protected: typedef std::list RegionList; @@ -501,9 +511,9 @@ Instrument* AddInstrument(); void DeleteInstrument(Instrument* pInstrument); RIFF::File* GetExtensionFile(int index); - virtual void UpdateChunks(); - virtual void Save(const String& Path); - virtual void Save(); + virtual void UpdateChunks(progress_t* pProgress); + virtual void Save(const String& Path, progress_t* pProgress = NULL); + virtual void Save(progress_t* pProgress = NULL); virtual ~File(); protected: typedef std::list SampleList; @@ -523,6 +533,7 @@ virtual void LoadSamples(); virtual void LoadInstruments(); + virtual void UpdateFileOffsets(); void __ensureMandatoryChunksExist(); friend class Region; // Region has to look in the wave pool table to get its sample private: