/[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 926 by schoenebeck, Tue Oct 24 14:29:16 2006 UTC revision 929 by schoenebeck, Tue Oct 24 22:24:45 2006 UTC
# Line 29  Line 29 
29  #if WORDS_BIGENDIAN  #if WORDS_BIGENDIAN
30  # define LIST_TYPE_3PRG 0x33707267  # define LIST_TYPE_3PRG 0x33707267
31  # define LIST_TYPE_3EWL 0x3365776C  # define LIST_TYPE_3EWL 0x3365776C
32    # define LIST_TYPE_3GRI 0x33677269
33    # define LIST_TYPE_3GNL 0x33676E6C
34  # define CHUNK_ID_SMPL  0x736D706C  # define CHUNK_ID_SMPL  0x736D706C
35  # define CHUNK_ID_3GIX  0x33676978  # define CHUNK_ID_3GIX  0x33676978
36  # define CHUNK_ID_3EWA  0x33657761  # define CHUNK_ID_3EWA  0x33657761
37  # define CHUNK_ID_3LNK  0x336C6E6B  # define CHUNK_ID_3LNK  0x336C6E6B
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
41  #else  // little endian  #else  // little endian
42  # define LIST_TYPE_3PRG 0x67727033  # define LIST_TYPE_3PRG 0x67727033
43  # define LIST_TYPE_3EWL 0x6C776533  # define LIST_TYPE_3EWL 0x6C776533
44    # define LIST_TYPE_3GRI 0x69726733
45    # define LIST_TYPE_3GNL 0x6C6E6733
46  # define CHUNK_ID_SMPL  0x6C706D73  # define CHUNK_ID_SMPL  0x6C706D73
47  # define CHUNK_ID_3GIX  0x78696733  # define CHUNK_ID_3GIX  0x78696733
48  # define CHUNK_ID_3EWA  0x61776533  # define CHUNK_ID_3EWA  0x61776533
49  # define CHUNK_ID_3LNK  0x6B6E6C33  # define CHUNK_ID_3LNK  0x6B6E6C33
50  # define CHUNK_ID_3EWG  0x67776533  # define CHUNK_ID_3EWG  0x67776533
51  # define CHUNK_ID_EWAV  0x76617765  # define CHUNK_ID_EWAV  0x76617765
52    # define CHUNK_ID_3GNM  0x6D6E6733
53  #endif // WORDS_BIGENDIAN  #endif // WORDS_BIGENDIAN
54    
55  /** Gigasampler specific classes and definitions */  /** Gigasampler specific classes and definitions */
# Line 316  namespace gig { Line 322  namespace gig {
322      class Instrument;      class Instrument;
323      class Sample;      class Sample;
324      class Region;      class Region;
325        class Group;
326    
327      /** Encapsulates articulation information of a dimension region.      /** Encapsulates articulation information of a dimension region.
328       *       *
# Line 489  namespace gig { Line 496  namespace gig {
496       */       */
497      class Sample : public DLS::Sample {      class Sample : public DLS::Sample {
498          public:          public:
499              uint16_t       SampleGroup;              Group*         pGroup;            ///< pointer to the Group this sample belongs to, NULL otherwise
500              uint32_t       Manufacturer;      ///< Specifies the MIDI Manufacturer's Association (MMA) Manufacturer code for the sampler intended to receive this file's waveform. If no particular manufacturer is to be specified, a value of 0 should be used.              uint32_t       Manufacturer;      ///< Specifies the MIDI Manufacturer's Association (MMA) Manufacturer code for the sampler intended to receive this file's waveform. If no particular manufacturer is to be specified, a value of 0 should be used.
501              uint32_t       Product;           ///< Specifies the MIDI model ID defined by the manufacturer corresponding to the Manufacturer field. If no particular manufacturer's product is to be specified, a value of 0 should be used.              uint32_t       Product;           ///< Specifies the MIDI model ID defined by the manufacturer corresponding to the Manufacturer field. If no particular manufacturer's product is to be specified, a value of 0 should be used.
502              uint32_t       SamplePeriod;      ///< Specifies the duration of time that passes during the playback of one sample in nanoseconds (normally equal to 1 / Samples Per Second, where Samples Per Second is the value found in the format chunk), don't bother to update this attribute, it won't be saved.              uint32_t       SamplePeriod;      ///< Specifies the duration of time that passes during the playback of one sample in nanoseconds (normally equal to 1 / Samples Per Second, where Samples Per Second is the value found in the format chunk), don't bother to update this attribute, it won't be saved.
# Line 637  namespace gig { Line 644  namespace gig {
644              friend class File;              friend class File;
645      };      };
646    
647      // TODO: <3gnm> chunk not added yet (just contains the names of the sample groups)      /** @brief Group of Gigasampler objects
648         *
649         * Groups help to organize a huge collection of Gigasampler objects.
650         * Groups are not concerned at all for the synthesis, but they help
651         * sound library developers when working on complex instruments with an
652         * instrument editor (as long as that instrument editor supports it ;-).
653         *
654         * At the moment, it seems as only samples can be grouped together in
655         * the Gigasampler format yet. If this is false in the meantime, please
656         * tell us !
657         */
658        class Group {
659            public:
660                String Name; ///< Stores the name of this Group.
661            protected:
662                Group(RIFF::File* file, RIFF::Chunk* ck3gnm);
663                virtual ~Group();
664                virtual void UpdateChunks();
665                friend class File;
666            private:
667                RIFF::File*  pFile;
668                RIFF::Chunk* pNameChunk;
669        };
670    
671      /** Parses Gigasampler files and provides abstract access to the data. */      /** Parses Gigasampler files and provides abstract access to the data. */
672      class File : protected DLS::File {      class File : protected DLS::File {
673          public:          public:
# Line 657  namespace gig { Line 687  namespace gig {
687              File(RIFF::File* pRIFF);              File(RIFF::File* pRIFF);
688              Sample*     GetFirstSample(progress_t* pProgress = NULL); ///< 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.
689              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.
             Instrument* GetFirstInstrument(); ///< Returns a pointer to the first <i>Instrument</i> object of the file, <i>NULL</i> otherwise.  
690              Sample*     AddSample();              Sample*     AddSample();
691              void        DeleteSample(Sample* pSample);              void        DeleteSample(Sample* pSample);
692                Instrument* GetFirstInstrument(); ///< Returns a pointer to the first <i>Instrument</i> object of the file, <i>NULL</i> otherwise.
693              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.
694              Instrument* GetInstrument(uint index, progress_t* pProgress = NULL);              Instrument* GetInstrument(uint index, progress_t* pProgress = NULL);
695              Instrument* AddInstrument();              Instrument* AddInstrument();
696              void        DeleteInstrument(Instrument* pInstrument);              void        DeleteInstrument(Instrument* pInstrument);
697                Group*      GetFirstGroup(); ///< Returns a pointer to the first <i>Group</i> object of the file, <i>NULL</i> otherwise.
698                Group*      GetNextGroup();  ///< Returns a pointer to the next <i>Group</i> object of the file, <i>NULL</i> otherwise.
699                Group*      GetGroup(uint index);
700                Group*      AddGroup();
701                void        DeleteGroup(Group* pGroup);
702                virtual    ~File();
703          protected:          protected:
704              // overridden protected methods from DLS::File              // overridden protected methods from DLS::File
705              virtual void LoadSamples();              virtual void LoadSamples();
706              virtual void LoadInstruments();              virtual void LoadInstruments();
707                virtual void LoadGroups();
708              // own protected methods              // own protected methods
709              virtual void LoadSamples(progress_t* pProgress);              virtual void LoadSamples(progress_t* pProgress);
710              virtual void LoadInstruments(progress_t* pProgress);              virtual void LoadInstruments(progress_t* pProgress);
711              friend class Region;              friend class Region;
712                friend class Sample;
713            private:
714                std::list<Group*>*          pGroups;
715                std::list<Group*>::iterator GroupsIterator;
716      };      };
717    
718      /** 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. */

Legend:
Removed from v.926  
changed lines
  Added in v.929

  ViewVC Help
Powered by ViewVC