/[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 2334 by persson, Sat Mar 17 06:18:52 2012 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-2012 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();
# Line 639  namespace gig { Line 637  namespace gig {
637              friend class Instrument;              friend class Instrument;
638      };      };
639    
640        /** Abstract base class for all MIDI rules. */
641        class MidiRule {
642            public:
643                virtual ~MidiRule() { }
644        };
645    
646        /** MIDI rule for triggering notes by control change events. */
647        class MidiRuleCtrlTrigger : public MidiRule {
648            public:
649                uint8_t ControllerNumber;   ///< MIDI controller number.
650                uint8_t Triggers;           ///< Number of triggers.
651                struct trigger_t {
652                    uint8_t TriggerPoint;   ///< The CC value to pass for the note to be triggered.
653                    bool    Descending;     ///< If the change in CC value should be downwards.
654                    uint8_t VelSensitivity; ///< How sensitive the velocity should be to the speed of the controller change.
655                    uint8_t Key;            ///< Key to trigger.
656                    bool    NoteOff;        ///< If a note off should be triggered instead of a note on.
657                    uint8_t Velocity;       ///< Velocity of the note to trigger. 255 means that velocity should depend on the speed of the controller change.
658                    bool    OverridePedal;  ///< If a note off should be triggered even if the sustain pedal is down.
659                } pTriggers[32];
660    
661            protected:
662                MidiRuleCtrlTrigger(RIFF::Chunk* _3ewg);
663                friend class Instrument;
664        };
665    
666      /** Provides all neccessary information for the synthesis of an <i>Instrument</i>. */      /** Provides all neccessary information for the synthesis of an <i>Instrument</i>. */
667      class Instrument : protected DLS::Instrument {      class Instrument : protected DLS::Instrument {
668          public:          public:
669              // derived attributes from DLS::Resource              // derived attributes from DLS::Resource
670              DLS::Resource::pInfo;              using DLS::Resource::pInfo;
671              DLS::Resource::pDLSID;              using DLS::Resource::pDLSID;
672              // derived attributes from DLS::Instrument              // derived attributes from DLS::Instrument
673              DLS::Instrument::IsDrum;              using DLS::Instrument::IsDrum;
674              DLS::Instrument::MIDIBank;              using DLS::Instrument::MIDIBank;
675              DLS::Instrument::MIDIBankCoarse;              using DLS::Instrument::MIDIBankCoarse;
676              DLS::Instrument::MIDIBankFine;              using DLS::Instrument::MIDIBankFine;
677              DLS::Instrument::MIDIProgram;              using DLS::Instrument::MIDIProgram;
678              DLS::Instrument::Regions;              using DLS::Instrument::Regions;
679              // own attributes              // own attributes
680              int32_t   Attenuation;       ///< in dB              int32_t   Attenuation;       ///< in dB
681              uint16_t  EffectSend;              uint16_t  EffectSend;
# Line 662  namespace gig { Line 686  namespace gig {
686    
687    
688              // derived methods from DLS::Resource              // derived methods from DLS::Resource
689              DLS::Resource::GetParent;              using DLS::Resource::GetParent;
690              // overridden methods              // overridden methods
691              Region*   GetFirstRegion();              Region*   GetFirstRegion();
692              Region*   GetNextRegion();              Region*   GetNextRegion();
# Line 671  namespace gig { Line 695  namespace gig {
695              virtual void UpdateChunks();              virtual void UpdateChunks();
696              // own methods              // own methods
697              Region*   GetRegion(unsigned int Key);              Region*   GetRegion(unsigned int Key);
698                MidiRule* GetMidiRule(int i);
699          protected:          protected:
700              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
701    
# Line 679  namespace gig { Line 704  namespace gig {
704              void UpdateRegionKeyTable();              void UpdateRegionKeyTable();
705              friend class File;              friend class File;
706              friend class Region; // so Region can call UpdateRegionKeyTable()              friend class Region; // so Region can call UpdateRegionKeyTable()
707            private:
708                MidiRule** pMidiRules;
709      };      };
710    
711      /** @brief Group of Gigasampler objects      /** @brief Group of Gigasampler objects
# Line 721  namespace gig { Line 748  namespace gig {
748              static const DLS::version_t VERSION_3;              static const DLS::version_t VERSION_3;
749    
750              // derived attributes from DLS::Resource              // derived attributes from DLS::Resource
751              DLS::Resource::pInfo;              using DLS::Resource::pInfo;
752              DLS::Resource::pDLSID;              using DLS::Resource::pDLSID;
753              // derived attributes from DLS::File              // derived attributes from DLS::File
754              DLS::File::pVersion;              using DLS::File::pVersion;
755              DLS::File::Instruments;              using DLS::File::Instruments;
756    
757              // derived methods from DLS::Resource              // derived methods from DLS::Resource
758              DLS::Resource::GetParent;              using DLS::Resource::GetParent;
759              // derived methods from DLS::File              // derived methods from DLS::File
760              DLS::File::Save;              using DLS::File::Save;
761                using DLS::File::GetFileName;
762              // overridden  methods              // overridden  methods
763              File();              File();
764              File(RIFF::File* pRIFF);              File(RIFF::File* pRIFF);
# Line 749  namespace gig { Line 777  namespace gig {
777              Group*      AddGroup();              Group*      AddGroup();
778              void        DeleteGroup(Group* pGroup);              void        DeleteGroup(Group* pGroup);
779              void        DeleteGroupOnly(Group* pGroup);              void        DeleteGroupOnly(Group* pGroup);
780                void        SetAutoLoad(bool b);
781                bool        GetAutoLoad();
782              virtual    ~File();              virtual    ~File();
783              virtual void UpdateChunks();              virtual void UpdateChunks();
784          protected:          protected:
# Line 766  namespace gig { Line 796  namespace gig {
796          private:          private:
797              std::list<Group*>*          pGroups;              std::list<Group*>*          pGroups;
798              std::list<Group*>::iterator GroupsIterator;              std::list<Group*>::iterator GroupsIterator;
799                bool                        bAutoLoad;
800      };      };
801    
802      /**      /**

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

  ViewVC Help
Powered by ViewVC