/[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 929 by schoenebeck, Tue Oct 24 22:24:45 2006 UTC revision 1070 by persson, Mon Mar 5 17:42:35 2007 UTC
# Line 1  Line 1 
1  /***************************************************************************  /***************************************************************************
2   *                                                                         *   *                                                                         *
3   *   libgig - C++ cross-platform Gigasampler format file loader library    *   *   libgig - C++ cross-platform Gigasampler format file access library    *
4   *                                                                         *   *                                                                         *
5   *   Copyright (C) 2003-2006 by Christian Schoenebeck                      *   *   Copyright (C) 2003-2006 by Christian Schoenebeck                      *
6   *                              <cuse@users.sourceforge.net>               *   *                              <cuse@users.sourceforge.net>               *
# Line 338  namespace gig { Line 338  namespace gig {
338       */       */
339      class DimensionRegion : protected DLS::Sampler {      class DimensionRegion : protected DLS::Sampler {
340          public:          public:
341              uint8_t            VelocityUpperLimit;            ///< Defines the upper velocity value limit of a velocity split (only if an user defined limit was set, thus a value not equal to 128/NumberOfSplits, else this value is 0).              uint8_t            VelocityUpperLimit;            ///< Defines the upper velocity value limit of a velocity split (only if an user defined limit was set, thus a value not equal to 128/NumberOfSplits, else this value is 0). Only for gig2, otherwise the DimensionUpperLimts are used instead.
342              Sample*            pSample;                       ///< Points to the Sample which is assigned to the dimension region.              Sample*            pSample;                       ///< Points to the Sample which is assigned to the dimension region.
343              // Sample Amplitude EG/LFO              // Sample Amplitude EG/LFO
344              uint16_t           EG1PreAttack;                  ///< Preattack value of the sample amplitude EG (0 - 1000 permille).              uint16_t           EG1PreAttack;                  ///< Preattack value of the sample amplitude EG (0 - 1000 permille).
# Line 422  namespace gig { Line 422  namespace gig {
422              bool               MSDecode;                      ///< Gigastudio flag: defines if Mid Side Recordings should be decoded.              bool               MSDecode;                      ///< Gigastudio flag: defines if Mid Side Recordings should be decoded.
423              uint16_t           SampleStartOffset;             ///< Number of samples the sample start should be moved (0 - 2000).              uint16_t           SampleStartOffset;             ///< Number of samples the sample start should be moved (0 - 2000).
424              double             SampleAttenuation;             ///< Sample volume (calculated from DLS::Sampler::Gain)              double             SampleAttenuation;             ///< Sample volume (calculated from DLS::Sampler::Gain)
425                uint8_t            DimensionUpperLimits[8];       ///< gig3: defines the upper limit of the dimension values for this dimension region
426    
427              // derived attributes from DLS::Sampler              // derived attributes from DLS::Sampler
428              DLS::Sampler::UnityNote;              DLS::Sampler::UnityNote;
# Line 496  namespace gig { Line 497  namespace gig {
497       */       */
498      class Sample : public DLS::Sample {      class Sample : public DLS::Sample {
499          public:          public:
             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 533  namespace gig { Line 533  namespace gig {
533              unsigned long Read(void* pBuffer, unsigned long SampleCount, buffer_t* pExternalDecompressionBuffer = NULL);              unsigned long Read(void* pBuffer, unsigned long SampleCount, buffer_t* pExternalDecompressionBuffer = NULL);
534              unsigned long ReadAndLoop(void* pBuffer, unsigned long SampleCount, playback_state_t* pPlaybackState, DimensionRegion* pDimRgn, buffer_t* pExternalDecompressionBuffer = NULL);              unsigned long ReadAndLoop(void* pBuffer, unsigned long SampleCount, playback_state_t* pPlaybackState, DimensionRegion* pDimRgn, buffer_t* pExternalDecompressionBuffer = NULL);
535              unsigned long Write(void* pBuffer, unsigned long SampleCount);              unsigned long Write(void* pBuffer, unsigned long SampleCount);
536                Group*        GetGroup() const;
537              virtual void  UpdateChunks();              virtual void  UpdateChunks();
538          protected:          protected:
539              static unsigned int  Instances;               ///< Number of instances of class Sample.              static unsigned int  Instances;               ///< Number of instances of class Sample.
540              static buffer_t      InternalDecompressionBuffer; ///< Buffer used for decompression as well as for truncation of 24 Bit -> 16 Bit samples.              static buffer_t      InternalDecompressionBuffer; ///< Buffer used for decompression as well as for truncation of 24 Bit -> 16 Bit samples.
541                Group*               pGroup;                  ///< pointer to the Group this sample belongs to (always not-NULL)
542              unsigned long        FrameOffset;             ///< Current offset (sample points) in current sample frame (for decompression only).              unsigned long        FrameOffset;             ///< Current offset (sample points) in current sample frame (for decompression only).
543              unsigned long*       FrameTable;              ///< For positioning within compressed samples only: stores the offset values for each frame.              unsigned long*       FrameTable;              ///< For positioning within compressed samples only: stores the offset values for each frame.
544              unsigned long        SamplePos;               ///< For compressed samples only: stores the current position (in sample points).              unsigned long        SamplePos;               ///< For compressed samples only: stores the current position (in sample points).
# Line 576  namespace gig { Line 578  namespace gig {
578              void ScanCompressedSample();              void ScanCompressedSample();
579              friend class File;              friend class File;
580              friend class Region;              friend class Region;
581                friend class Group; // allow to modify protected member pGroup
582      };      };
583    
584      // TODO: <3dnl> list not used yet - not important though (just contains optional descriptions for the dimensions)      // TODO: <3dnl> list not used yet - not important though (just contains optional descriptions for the dimensions)
# Line 654  namespace gig { Line 657  namespace gig {
657       * At the moment, it seems as only samples can be grouped together in       * At the moment, it seems as only samples can be grouped together in
658       * the Gigasampler format yet. If this is false in the meantime, please       * the Gigasampler format yet. If this is false in the meantime, please
659       * tell us !       * tell us !
660         *
661         * A sample is always assigned to exactly one Group. This also means
662         * there is always at least one Group in a .gig file, no matter if you
663         * created one yet or not.
664       */       */
665      class Group {      class Group {
666          public:          public:
667              String Name; ///< Stores the name of this Group.              String Name; ///< Stores the name of this Group.
668    
669                Sample* GetFirstSample();
670                Sample* GetNextSample();
671                void AddSample(Sample* pSample);
672          protected:          protected:
673              Group(RIFF::File* file, RIFF::Chunk* ck3gnm);              Group(File* file, RIFF::Chunk* ck3gnm);
674              virtual ~Group();              virtual ~Group();
675              virtual void UpdateChunks();              virtual void UpdateChunks();
676                void MoveAll();
677              friend class File;              friend class File;
678          private:          private:
679              RIFF::File*  pFile;              File*        pFile;
680              RIFF::Chunk* pNameChunk;              RIFF::Chunk* pNameChunk;
681      };      };
682    
# Line 710  namespace gig { Line 722  namespace gig {
722              virtual void LoadInstruments(progress_t* pProgress);              virtual void LoadInstruments(progress_t* pProgress);
723              friend class Region;              friend class Region;
724              friend class Sample;              friend class Sample;
725                friend class Group; // so Group can access protected member pRIFF
726          private:          private:
727              std::list<Group*>*          pGroups;              std::list<Group*>*          pGroups;
728              std::list<Group*>::iterator GroupsIterator;              std::list<Group*>::iterator GroupsIterator;

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

  ViewVC Help
Powered by ViewVC