/[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 1180 by persson, Sat May 12 12:39:25 2007 UTC revision 1301 by persson, Sat Aug 25 09:59:53 2007 UTC
# Line 38  Line 38 
38  # define CHUNK_ID_3EWG  0x33657767  # define CHUNK_ID_3EWG  0x33657767
39  # define CHUNK_ID_EWAV  0x65776176  # define CHUNK_ID_EWAV  0x65776176
40  # define CHUNK_ID_3GNM  0x33676E6D  # define CHUNK_ID_3GNM  0x33676E6D
41    # define CHUNK_ID_EINF  0x65696E66
42    # define CHUNK_ID_3CRC  0x33637263
43  #else  // little endian  #else  // little endian
44  # define LIST_TYPE_3PRG 0x67727033  # define LIST_TYPE_3PRG 0x67727033
45  # define LIST_TYPE_3EWL 0x6C776533  # define LIST_TYPE_3EWL 0x6C776533
# Line 50  Line 52 
52  # define CHUNK_ID_3EWG  0x67776533  # define CHUNK_ID_3EWG  0x67776533
53  # define CHUNK_ID_EWAV  0x76617765  # define CHUNK_ID_EWAV  0x76617765
54  # define CHUNK_ID_3GNM  0x6D6E6733  # define CHUNK_ID_3GNM  0x6D6E6733
55    # define CHUNK_ID_EINF  0x666E6965
56    # define CHUNK_ID_3CRC  0x63726333
57  #endif // WORDS_BIGENDIAN  #endif // WORDS_BIGENDIAN
58    
59  /** Gigasampler specific classes and definitions */  /** Gigasampler specific classes and definitions */
# Line 319  namespace gig { Line 323  namespace gig {
323          progress_t();          progress_t();
324      };      };
325    
326        /** @brief CRC-32 checksum implementation
327         *
328         * This class is used to calculate checksums of the sample data in
329         * a gig file. The checksums are stored in the 3crc chunk of the
330         * gig file and automatically updated when a sample is written
331         * with Sample::Write().
332         */
333        class CRC {
334        private:
335            uint32_t value;
336            static const uint32_t* table;
337            static uint32_t* initTable();
338        public:
339            CRC() {
340                reset();
341            }
342            void reset() {
343                value = 0xffffffff;
344            }
345            void update(unsigned char* buf, int len) {
346                for (int i = 0 ; i < len ; i++) {
347                    value = table[(value ^ buf[i]) & 0xff] ^ (value >> 8);
348                }
349            }
350            uint32_t getValue() {
351                return value ^ 0xffffffff;
352            }
353        };
354    
355      // just symbol prototyping      // just symbol prototyping
356      class File;      class File;
357      class Instrument;      class Instrument;
# Line 445  namespace gig { Line 478  namespace gig {
478          protected:          protected:
479              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.
480              DimensionRegion(RIFF::List* _3ewl);              DimensionRegion(RIFF::List* _3ewl);
481                DimensionRegion(RIFF::List* _3ewl, const DimensionRegion& src);
482             ~DimensionRegion();             ~DimensionRegion();
483              friend class Region;              friend class Region;
484          private:          private:
# Line 559  namespace gig { Line 593  namespace gig {
593              unsigned long        FileNo;                  ///< File number (> 0 when sample is stored in an extension file, 0 when it's in the gig)              unsigned long        FileNo;                  ///< File number (> 0 when sample is stored in an extension file, 0 when it's in the gig)
594              RIFF::Chunk*         pCk3gix;              RIFF::Chunk*         pCk3gix;
595              RIFF::Chunk*         pCkSmpl;              RIFF::Chunk*         pCkSmpl;
596                CRC                  crc;                     ///< CRC-32 checksum of the raw sample data
597    
598              Sample(File* pFile, RIFF::List* waveList, unsigned long WavePoolOffset, unsigned long fileNo = 0);              Sample(File* pFile, RIFF::List* waveList, unsigned long WavePoolOffset, unsigned long fileNo = 0);
599             ~Sample();             ~Sample();
# Line 695  namespace gig { Line 730  namespace gig {
730      /** Parses Gigasampler files and provides abstract access to the data. */      /** Parses Gigasampler files and provides abstract access to the data. */
731      class File : protected DLS::File {      class File : protected DLS::File {
732          public:          public:
733                static const DLS::version_t VERSION_2;
734                static const DLS::version_t VERSION_3;
735    
736              // derived attributes from DLS::Resource              // derived attributes from DLS::Resource
737              DLS::Resource::pInfo;              DLS::Resource::pInfo;
738              DLS::Resource::pDLSID;              DLS::Resource::pDLSID;
# Line 734  namespace gig { Line 772  namespace gig {
772              // own protected methods              // own protected methods
773              virtual void LoadSamples(progress_t* pProgress);              virtual void LoadSamples(progress_t* pProgress);
774              virtual void LoadInstruments(progress_t* pProgress);              virtual void LoadInstruments(progress_t* pProgress);
775                void SetSampleChecksum(Sample* pSample, uint32_t crc);
776              friend class Region;              friend class Region;
777              friend class Sample;              friend class Sample;
778              friend class Group; // so Group can access protected member pRIFF              friend class Group; // so Group can access protected member pRIFF

Legend:
Removed from v.1180  
changed lines
  Added in v.1301

  ViewVC Help
Powered by ViewVC