/[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 1416 by schoenebeck, Sun Oct 14 12:06:32 2007 UTC revision 2394 by schoenebeck, Mon Jan 7 23:23:58 2013 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-2007 by Christian Schoenebeck                      *   *   Copyright (C) 2003-2013 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 31  Line 31 
31  # define LIST_TYPE_3EWL 0x3365776C  # define LIST_TYPE_3EWL 0x3365776C
32  # define LIST_TYPE_3GRI 0x33677269  # define LIST_TYPE_3GRI 0x33677269
33  # define LIST_TYPE_3GNL 0x33676E6C  # define LIST_TYPE_3GNL 0x33676E6C
 # define CHUNK_ID_SMPL  0x736D706C  
34  # define CHUNK_ID_3GIX  0x33676978  # define CHUNK_ID_3GIX  0x33676978
35  # define CHUNK_ID_3EWA  0x33657761  # define CHUNK_ID_3EWA  0x33657761
36  # define CHUNK_ID_3LNK  0x336C6E6B  # define CHUNK_ID_3LNK  0x336C6E6B
# Line 45  Line 44 
44  # define LIST_TYPE_3EWL 0x6C776533  # define LIST_TYPE_3EWL 0x6C776533
45  # define LIST_TYPE_3GRI 0x69726733  # define LIST_TYPE_3GRI 0x69726733
46  # define LIST_TYPE_3GNL 0x6C6E6733  # define LIST_TYPE_3GNL 0x6C6E6733
 # 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
# Line 431  namespace gig { Line 429  namespace gig {
429              uint8_t            DimensionUpperLimits[8];       ///< gig3: defines the upper limit of the dimension values for this dimension region              uint8_t            DimensionUpperLimits[8];       ///< gig3: defines the upper limit of the dimension values for this dimension region
430    
431              // derived attributes from DLS::Sampler              // derived attributes from DLS::Sampler
432              DLS::Sampler::UnityNote;              using DLS::Sampler::UnityNote;
433              DLS::Sampler::FineTune;              using DLS::Sampler::FineTune;
434              DLS::Sampler::Gain;              using DLS::Sampler::Gain;
435              DLS::Sampler::SampleLoops;              using DLS::Sampler::SampleLoops;
436              DLS::Sampler::pSampleLoops;              using DLS::Sampler::pSampleLoops;
437    
438              // own methods              // own methods
439              double GetVelocityAttenuation(uint8_t MIDIKeyVelocity);              double GetVelocityAttenuation(uint8_t MIDIKeyVelocity);
# Line 452  namespace gig { Line 450  namespace gig {
450              void SetVCFVelocityScale(uint8_t scaling);              void SetVCFVelocityScale(uint8_t scaling);
451              Region* GetParent() const;              Region* GetParent() const;
452              // derived methods              // derived methods
453              DLS::Sampler::AddSampleLoop;              using DLS::Sampler::AddSampleLoop;
454              DLS::Sampler::DeleteSampleLoop;              using DLS::Sampler::DeleteSampleLoop;
455              // overridden methods              // overridden methods
456              virtual void SetGain(int32_t gain);              virtual void SetGain(int32_t gain);
457              virtual void UpdateChunks();              virtual void UpdateChunks();
458                virtual void CopyAssign(const DimensionRegion* orig);
459          protected:          protected:
460              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.
461              DimensionRegion(Region* pParent, RIFF::List* _3ewl);              DimensionRegion(Region* pParent, RIFF::List* _3ewl);
# Line 630  namespace gig { Line 629  namespace gig {
629              // overridden methods              // overridden methods
630              virtual void     SetKeyRange(uint16_t Low, uint16_t High);              virtual void     SetKeyRange(uint16_t Low, uint16_t High);
631              virtual void     UpdateChunks();              virtual void     UpdateChunks();
632                virtual void     CopyAssign(const Region* orig);
633          protected:          protected:
634              Region(Instrument* pInstrument, RIFF::List* rgnList);              Region(Instrument* pInstrument, RIFF::List* rgnList);
635              void LoadDimensionRegions(RIFF::List* rgn);              void LoadDimensionRegions(RIFF::List* rgn);
# Line 639  namespace gig { Line 639  namespace gig {
639              friend class Instrument;              friend class Instrument;
640      };      };
641    
642        /** Abstract base class for all MIDI rules. */
643        class MidiRule {
644            public:
645                virtual ~MidiRule() { }
646        };
647    
648        /** MIDI rule for triggering notes by control change events. */
649        class MidiRuleCtrlTrigger : public MidiRule {
650            public:
651                uint8_t ControllerNumber;   ///< MIDI controller number.
652                uint8_t Triggers;           ///< Number of triggers.
653                struct trigger_t {
654                    uint8_t TriggerPoint;   ///< The CC value to pass for the note to be triggered.
655                    bool    Descending;     ///< If the change in CC value should be downwards.
656                    uint8_t VelSensitivity; ///< How sensitive the velocity should be to the speed of the controller change.
657                    uint8_t Key;            ///< Key to trigger.
658                    bool    NoteOff;        ///< If a note off should be triggered instead of a note on.
659                    uint8_t Velocity;       ///< Velocity of the note to trigger. 255 means that velocity should depend on the speed of the controller change.
660                    bool    OverridePedal;  ///< If a note off should be triggered even if the sustain pedal is down.
661                } pTriggers[32];
662    
663            protected:
664                MidiRuleCtrlTrigger(RIFF::Chunk* _3ewg);
665                friend class Instrument;
666        };
667    
668      /** Provides all neccessary information for the synthesis of an <i>Instrument</i>. */      /** Provides all neccessary information for the synthesis of an <i>Instrument</i>. */
669      class Instrument : protected DLS::Instrument {      class Instrument : protected DLS::Instrument {
670          public:          public:
671              // derived attributes from DLS::Resource              // derived attributes from DLS::Resource
672              DLS::Resource::pInfo;              using DLS::Resource::pInfo;
673              DLS::Resource::pDLSID;              using DLS::Resource::pDLSID;
674              // derived attributes from DLS::Instrument              // derived attributes from DLS::Instrument
675              DLS::Instrument::IsDrum;              using DLS::Instrument::IsDrum;
676              DLS::Instrument::MIDIBank;              using DLS::Instrument::MIDIBank;
677              DLS::Instrument::MIDIBankCoarse;              using DLS::Instrument::MIDIBankCoarse;
678              DLS::Instrument::MIDIBankFine;              using DLS::Instrument::MIDIBankFine;
679              DLS::Instrument::MIDIProgram;              using DLS::Instrument::MIDIProgram;
680              DLS::Instrument::Regions;              using DLS::Instrument::Regions;
681              // own attributes              // own attributes
682              int32_t   Attenuation;       ///< in dB              int32_t   Attenuation;       ///< in dB
683              uint16_t  EffectSend;              uint16_t  EffectSend;
# Line 662  namespace gig { Line 688  namespace gig {
688    
689    
690              // derived methods from DLS::Resource              // derived methods from DLS::Resource
691              DLS::Resource::GetParent;              using DLS::Resource::GetParent;
692              // overridden methods              // overridden methods
693              Region*   GetFirstRegion();              Region*   GetFirstRegion();
694              Region*   GetNextRegion();              Region*   GetNextRegion();
695              Region*   AddRegion();              Region*   AddRegion();
696              void      DeleteRegion(Region* pRegion);              void      DeleteRegion(Region* pRegion);
697              virtual void UpdateChunks();              virtual void UpdateChunks();
698                virtual void CopyAssign(const Instrument* orig);
699              // own methods              // own methods
700              Region*   GetRegion(unsigned int Key);              Region*   GetRegion(unsigned int Key);
701                MidiRule* GetMidiRule(int i);
702          protected:          protected:
703              Region*   RegionKeyTable[128]; ///< fast lookup for the corresponding Region of a MIDI key              Region*   RegionKeyTable[128]; ///< fast lookup for the corresponding Region of a MIDI key
704    
# Line 679  namespace gig { Line 707  namespace gig {
707              void UpdateRegionKeyTable();              void UpdateRegionKeyTable();
708              friend class File;              friend class File;
709              friend class Region; // so Region can call UpdateRegionKeyTable()              friend class Region; // so Region can call UpdateRegionKeyTable()
710            private:
711                MidiRule** pMidiRules;
712      };      };
713    
714      /** @brief Group of Gigasampler objects      /** @brief Group of Gigasampler objects
# Line 721  namespace gig { Line 751  namespace gig {
751              static const DLS::version_t VERSION_3;              static const DLS::version_t VERSION_3;
752    
753              // derived attributes from DLS::Resource              // derived attributes from DLS::Resource
754              DLS::Resource::pInfo;              using DLS::Resource::pInfo;
755              DLS::Resource::pDLSID;              using DLS::Resource::pDLSID;
756              // derived attributes from DLS::File              // derived attributes from DLS::File
757              DLS::File::pVersion;              using DLS::File::pVersion;
758              DLS::File::Instruments;              using DLS::File::Instruments;
759    
760              // derived methods from DLS::Resource              // derived methods from DLS::Resource
761              DLS::Resource::GetParent;              using DLS::Resource::GetParent;
762              // derived methods from DLS::File              // derived methods from DLS::File
763              DLS::File::Save;              using DLS::File::Save;
764                using DLS::File::GetFileName;
765              // overridden  methods              // overridden  methods
766              File();              File();
767              File(RIFF::File* pRIFF);              File(RIFF::File* pRIFF);
# Line 742  namespace gig { Line 773  namespace gig {
773              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.
774              Instrument* GetInstrument(uint index, progress_t* pProgress = NULL);              Instrument* GetInstrument(uint index, progress_t* pProgress = NULL);
775              Instrument* AddInstrument();              Instrument* AddInstrument();
776                Instrument* AddDuplicateInstrument(const Instrument* orig);
777              void        DeleteInstrument(Instrument* pInstrument);              void        DeleteInstrument(Instrument* pInstrument);
778              Group*      GetFirstGroup(); ///< Returns a pointer to the first <i>Group</i> object of the file, <i>NULL</i> otherwise.              Group*      GetFirstGroup(); ///< Returns a pointer to the first <i>Group</i> object of the file, <i>NULL</i> otherwise.
779              Group*      GetNextGroup();  ///< Returns a pointer to the next <i>Group</i> object of the file, <i>NULL</i> otherwise.              Group*      GetNextGroup();  ///< Returns a pointer to the next <i>Group</i> object of the file, <i>NULL</i> otherwise.
# Line 749  namespace gig { Line 781  namespace gig {
781              Group*      AddGroup();              Group*      AddGroup();
782              void        DeleteGroup(Group* pGroup);              void        DeleteGroup(Group* pGroup);
783              void        DeleteGroupOnly(Group* pGroup);              void        DeleteGroupOnly(Group* pGroup);
784                void        SetAutoLoad(bool b);
785                bool        GetAutoLoad();
786              virtual    ~File();              virtual    ~File();
787              virtual void UpdateChunks();              virtual void UpdateChunks();
788          protected:          protected:
# Line 766  namespace gig { Line 800  namespace gig {
800          private:          private:
801              std::list<Group*>*          pGroups;              std::list<Group*>*          pGroups;
802              std::list<Group*>::iterator GroupsIterator;              std::list<Group*>::iterator GroupsIterator;
803                bool                        bAutoLoad;
804      };      };
805    
806      /**      /**

Legend:
Removed from v.1416  
changed lines
  Added in v.2394

  ViewVC Help
Powered by ViewVC