/[svn]/libgig/trunk/src/DLS.h
ViewVC logotype

Diff of /libgig/trunk/src/DLS.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2329 by schoenebeck, Mon Mar 12 14:59:10 2012 UTC revision 2682 by schoenebeck, Mon Dec 29 16:25:51 2014 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-2010 by Christian Schoenebeck                      *   *   Copyright (C) 2003-2014 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 104  Line 104 
104  namespace DLS {  namespace DLS {
105    
106      typedef std::string String;      typedef std::string String;
107        typedef RIFF::progress_t progress_t;
108    
109      /** Quadtuple version number ("major.minor.release.build"). */      /** Quadtuple version number ("major.minor.release.build"). */
110      struct version_t {      struct version_t {
# Line 199  namespace DLS { Line 200  namespace DLS {
200          conn_trn_convex  = 0x0002,          conn_trn_convex  = 0x0002,
201          conn_trn_switch  = 0x0003          conn_trn_switch  = 0x0003
202      } conn_trn_t;      } conn_trn_t;
203        
204      /** Lower and upper limit of a range. */      /** Lower and upper limit of a range. */
205      struct range_t {      struct range_t {
206          uint16_t low;  ///< Low value of range.          uint16_t low;  ///< Low value of range.
207          uint16_t high; ///< High value of range.          uint16_t high; ///< High value of range.
208    
209            inline bool operator< (const range_t& other) const {
210                if (low < other.low) return true;
211                if (low > other.low) return false;
212                return high < other.high;
213            }
214    
215            inline bool operator== (const range_t& other) const {
216                return low == other.low && high == other.high;
217            }
218    
219            inline bool overlaps(uint16_t scalar) const {
220                return low <= scalar && scalar <= high;
221            }
222    
223            inline bool overlaps(const range_t& other) const {
224                return overlaps(other.low) || overlaps(other.high) ||
225                       other.overlaps(low) || other.overlaps(high);
226            }
227      };      };
228    
229      /** Defines Sample Loop Points. */      /** Defines Sample Loop Points. */
# Line 257  namespace DLS { Line 277  namespace DLS {
277    
278              Articulation(RIFF::Chunk* artl);              Articulation(RIFF::Chunk* artl);
279              virtual ~Articulation();              virtual ~Articulation();
280              virtual void UpdateChunks();              virtual void UpdateChunks(progress_t* pProgress);
281          protected:          protected:
282              RIFF::Chunk* pArticulationCk;              RIFF::Chunk* pArticulationCk;
283              uint32_t     HeaderSize;              uint32_t     HeaderSize;
# Line 269  namespace DLS { Line 289  namespace DLS {
289              Articulator(RIFF::List* ParentList);              Articulator(RIFF::List* ParentList);
290              Articulation* GetFirstArticulation();              Articulation* GetFirstArticulation();
291              Articulation* GetNextArticulation();              Articulation* GetNextArticulation();
292              virtual void  UpdateChunks();              virtual void  UpdateChunks(progress_t* pProgress);
293                virtual void  CopyAssign(const Articulator* orig);
294          protected:          protected:
295              typedef std::list<Articulation*> ArticulationList;              typedef std::list<Articulation*> ArticulationList;
296              RIFF::List*                 pParentList;              RIFF::List*                 pParentList;
# Line 310  namespace DLS { Line 331  namespace DLS {
331              Info(RIFF::List* list);              Info(RIFF::List* list);
332              void SetFixedStringLengths(const string_length_t* lengths);              void SetFixedStringLengths(const string_length_t* lengths);
333              virtual ~Info();              virtual ~Info();
334              virtual void UpdateChunks();              virtual void UpdateChunks(progress_t* pProgress);
335                virtual void CopyAssign(const Info* orig);
336          private:          private:
337              RIFF::List*            pResourceListChunk;              RIFF::List*            pResourceListChunk;
338              const string_length_t* pFixedStringLengths; ///< List of IDs and string lengths for strings that should be stored in a fixed length format. This is used for gig files, not for ordinary DLS files.              const string_length_t* pFixedStringLengths; ///< List of IDs and string lengths for strings that should be stored in a fixed length format. This is used for gig files, not for ordinary DLS files.
# Line 326  namespace DLS { Line 348  namespace DLS {
348              dlsid_t* pDLSID; ///< Points to a <i>dlsid_t</i> structure if the file provided a DLS ID else is <i>NULL</i>.              dlsid_t* pDLSID; ///< Points to a <i>dlsid_t</i> structure if the file provided a DLS ID else is <i>NULL</i>.
349    
350              Resource* GetParent() { return pParent; }              Resource* GetParent() { return pParent; }
351              virtual void UpdateChunks();              const Resource* GetParent() const { return pParent; }
352                virtual void UpdateChunks(progress_t* pProgress);
353              void GenerateDLSID();              void GenerateDLSID();
354                virtual void CopyAssign(const Resource* orig);
355          protected:          protected:
356              Resource* pParent;              Resource* pParent;
357              RIFF::List* pResourceList;              RIFF::List* pResourceList;
# Line 350  namespace DLS { Line 374  namespace DLS {
374              void AddSampleLoop(sample_loop_t* pLoopDef);              void AddSampleLoop(sample_loop_t* pLoopDef);
375              void DeleteSampleLoop(sample_loop_t* pLoopDef);              void DeleteSampleLoop(sample_loop_t* pLoopDef);
376              virtual void SetGain(int32_t gain);              virtual void SetGain(int32_t gain);
377              virtual void UpdateChunks();              virtual void UpdateChunks(progress_t* pProgress);
378                virtual void CopyAssign(const Sampler* orig);
379          protected:          protected:
380              RIFF::List*    pParentList;              RIFF::List*    pParentList;
381              uint32_t       uiHeaderSize;              uint32_t       uiHeaderSize;
# Line 380  namespace DLS { Line 405  namespace DLS {
405    
406              void*         LoadSampleData();              void*         LoadSampleData();
407              void          ReleaseSampleData();              void          ReleaseSampleData();
408              unsigned long GetSize();              unsigned long GetSize() const;
409              void          Resize(int iNewSize);              void          Resize(int iNewSize);
410              unsigned long SetPos(unsigned long SampleCount, RIFF::stream_whence_t Whence = RIFF::stream_start);              unsigned long SetPos(unsigned long SampleCount, RIFF::stream_whence_t Whence = RIFF::stream_start);
411              unsigned long Read(void* pBuffer, unsigned long SampleCount);              unsigned long Read(void* pBuffer, unsigned long SampleCount);
412              unsigned long Write(void* pBuffer, unsigned long SampleCount);              unsigned long Write(void* pBuffer, unsigned long SampleCount);
413              virtual void  UpdateChunks();              virtual void  UpdateChunks(progress_t* pProgress);
414                virtual void  CopyAssign(const Sample* orig);
415          protected:          protected:
416              RIFF::List*   pWaveList;              RIFF::List*   pWaveList;
417              RIFF::Chunk*  pCkData;              RIFF::Chunk*  pCkData;
# Line 394  namespace DLS { Line 420  namespace DLS {
420    
421              Sample(File* pFile, RIFF::List* waveList, unsigned long WavePoolOffset);              Sample(File* pFile, RIFF::List* waveList, unsigned long WavePoolOffset);
422              virtual ~Sample();              virtual ~Sample();
423                void CopyAssignCore(const Sample* orig);
424              friend class File;              friend class File;
425              friend class Region; // Region has to compare the wave pool offset to get its sample              friend class Region; // Region has to compare the wave pool offset to get its sample
426      };      };
# Line 414  namespace DLS { Line 441  namespace DLS {
441              Sample*     GetSample();              Sample*     GetSample();
442              void        SetSample(Sample* pSample);              void        SetSample(Sample* pSample);
443              virtual void SetKeyRange(uint16_t Low, uint16_t High);              virtual void SetKeyRange(uint16_t Low, uint16_t High);
444              virtual void UpdateChunks();              virtual void UpdateChunks(progress_t* pProgress);
445                virtual void CopyAssign(const Region* orig);
446          protected:          protected:
447              RIFF::List* pCkRegion;              RIFF::List* pCkRegion;
448              uint32_t    WavePoolTableIndex; // index in the wave pool table to the sample wave this region is linked to              uint32_t    WavePoolTableIndex; // index in the wave pool table to the sample wave this region is linked to
# Line 441  namespace DLS { Line 469  namespace DLS {
469              Region*  GetNextRegion();              Region*  GetNextRegion();
470              Region*  AddRegion();              Region*  AddRegion();
471              void     DeleteRegion(Region* pRegion);              void     DeleteRegion(Region* pRegion);
472              virtual void UpdateChunks();              virtual void UpdateChunks(progress_t* pProgress);
473                virtual void CopyAssign(const Instrument* orig);
474          protected:          protected:
475              typedef std::list<Region*> RegionList;              typedef std::list<Region*> RegionList;
476              struct midi_locale_t {              struct midi_locale_t {
# Line 454  namespace DLS { Line 483  namespace DLS {
483              RegionList::iterator RegionsIterator;              RegionList::iterator RegionsIterator;
484    
485              Instrument(File* pFile, RIFF::List* insList);              Instrument(File* pFile, RIFF::List* insList);
486                void CopyAssignCore(const Instrument* orig);
487              virtual void LoadRegions();              virtual void LoadRegions();
488              virtual ~Instrument();              virtual ~Instrument();
489              friend class File;              friend class File;
# Line 471  namespace DLS { Line 501  namespace DLS {
501              File();              File();
502              File(RIFF::File* pRIFF);              File(RIFF::File* pRIFF);
503              String      GetFileName();              String      GetFileName();
504                void        SetFileName(const String& name);
505              Sample*     GetFirstSample();     ///< Returns a pointer to the first <i>Sample</i> object of the file, <i>NULL</i> otherwise.              Sample*     GetFirstSample();     ///< Returns a pointer to the first <i>Sample</i> object of the file, <i>NULL</i> otherwise.
506              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.
507              Sample*     AddSample();              Sample*     AddSample();
# Line 480  namespace DLS { Line 511  namespace DLS {
511              Instrument* AddInstrument();              Instrument* AddInstrument();
512              void        DeleteInstrument(Instrument* pInstrument);              void        DeleteInstrument(Instrument* pInstrument);
513              RIFF::File* GetExtensionFile(int index);              RIFF::File* GetExtensionFile(int index);
514              virtual void UpdateChunks();              virtual void UpdateChunks(progress_t* pProgress);
515              virtual void Save(const String& Path);              virtual void Save(const String& Path, progress_t* pProgress = NULL);
516              virtual void Save();              virtual void Save(progress_t* pProgress = NULL);
517              virtual ~File();              virtual ~File();
518          protected:          protected:
519              typedef std::list<Sample*>     SampleList;              typedef std::list<Sample*>     SampleList;
# Line 502  namespace DLS { Line 533  namespace DLS {
533    
534              virtual void LoadSamples();              virtual void LoadSamples();
535              virtual void LoadInstruments();              virtual void LoadInstruments();
536                virtual void UpdateFileOffsets();
537              void __ensureMandatoryChunksExist();              void __ensureMandatoryChunksExist();
538              friend class Region; // Region has to look in the wave pool table to get its sample              friend class Region; // Region has to look in the wave pool table to get its sample
539          private:          private:

Legend:
Removed from v.2329  
changed lines
  Added in v.2682

  ViewVC Help
Powered by ViewVC