/[svn]/linuxsampler/trunk/src/engines/gig/EGADSR.h
ViewVC logotype

Diff of /linuxsampler/trunk/src/engines/gig/EGADSR.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 239 by schoenebeck, Sun Sep 12 14:48:19 2004 UTC revision 688 by schoenebeck, Thu Jul 14 12:25:20 2005 UTC
# Line 3  Line 3 
3   *   LinuxSampler - modular, streaming capable sampler                     *   *   LinuxSampler - modular, streaming capable sampler                     *
4   *                                                                         *   *                                                                         *
5   *   Copyright (C) 2003, 2004 by Benno Senoner and Christian Schoenebeck   *   *   Copyright (C) 2003, 2004 by Benno Senoner and Christian Schoenebeck   *
6     *   Copyright (C) 2005 Christian Schoenebeck                              *
7   *                                                                         *   *                                                                         *
8   *   This program is free software; you can redistribute it and/or modify  *   *   This program is free software; you can redistribute it and/or modify  *
9   *   it under the terms of the GNU General Public License as published by  *   *   it under the terms of the GNU General Public License as published by  *
# Line 27  Line 28 
28    
29  #include "../../common/global.h"  #include "../../common/global.h"
30  #include "../../common/RTMath.h"  #include "../../common/RTMath.h"
31  #include "../../common/RTELMemoryPool.h"  #include "../../common/Pool.h"
32  #include "../common/Event.h"  #include "../common/Event.h"
33  #include "Manipulator.h"  #include "Manipulator.h"
34  #include "Engine.h"  #include "Engine.h"
35    
 #define EG_ENVELOPE_LIMIT       0.001  
 #define EG_MIN_RELEASE_TIME     0.005  
   
36  namespace LinuxSampler { namespace gig {  namespace LinuxSampler { namespace gig {
37    
38  /**  /**
# Line 49  class EGADSR { Line 47  class EGADSR {
47          enum stage_t {          enum stage_t {
48              stage_attack,              stage_attack,
49              stage_attack_hold,              stage_attack_hold,
50                stage_decay1_init,
51              stage_decay1,              stage_decay1,
52                stage_decay1_part2_init,
53                stage_decay1_part2,
54                stage_decay2_init,
55              stage_decay2,              stage_decay2,
56              stage_sustain,              stage_sustain,
57                stage_release_init,
58              stage_release,              stage_release,
59                stage_release_part2_init,
60                stage_release_part2,
61                stage_fadeout,
62              stage_end              stage_end
63          };          };
64    
65          EGADSR(gig::Engine* pEngine, Event::destination_t ModulationDestination);          EGADSR(gig::Engine* pEngine, Event::destination_t ModulationDestination);
66          void Process(uint TotalSamples, RTEList<Event>* pEvents, Event* pTriggerEvent, double SamplePos, double CurrentPitch, Event* pKillEvent = NULL);          void Process(uint TotalSamples, RTList<Event>* pEvents, RTList<Event>::Iterator itTriggerEvent, double SamplePos, double CurrentPitch, RTList<Event>::Iterator itKillEvent = RTList<Event>::Iterator());
67          void Trigger(uint PreAttack, double AttackTime, bool HoldAttack, long LoopStart, double Decay1Time, double Decay2Time, bool InfiniteSustain, uint SustainLevel, double ReleaseTime, uint Delay);          void Trigger(uint PreAttack, double AttackTime, bool HoldAttack, long LoopStart, double Decay1Time, double Decay2Time, bool InfiniteSustain, uint SustainLevel, double ReleaseTime, uint Delay, float Volume);
68            void CalculateFadeOutCoeff(float FadeOutTime, float SampleRate);
69          inline EGADSR::stage_t GetStage() { return Stage; }          inline EGADSR::stage_t GetStage() { return Stage; }
70      protected:      protected:
71          gig::Engine* pEngine;          gig::Engine* pEngine;
# Line 71  class EGADSR { Line 78  class EGADSR {
78          bool    HoldAttack;          bool    HoldAttack;
79          long    LoopStart;          long    LoopStart;
80          float   Decay1Coeff;          float   Decay1Coeff;
81            float   Decay1Coeff2;
82            float   Decay1Coeff3;
83            float   Decay1Level2;
84            float   Decay1Slope;
85          long    Decay1StepsLeft;   ///< number of sample points in Decay1 stage          long    Decay1StepsLeft;   ///< number of sample points in Decay1 stage
86          float   Decay2Coeff;          float   Decay2Coeff;
87            long    Decay2StepsLeft;
88          bool    InfiniteSustain;          bool    InfiniteSustain;
89          float   SustainLevel;          float   SustainLevel;
90          float   ReleaseCoeff;          float   ReleaseCoeff;
91            float   ReleaseCoeff2;
92            float   ReleaseCoeff3;
93            float   ReleaseLevel2;
94            float   ReleaseSlope;
95          long    ReleaseStepsLeft;  ///< number of sample points til end of release stage          long    ReleaseStepsLeft;  ///< number of sample points til end of release stage
96          bool    ReleasePostponed;  ///< If a "release" event occured in the previous audio fragment, but wasn't processed yet.          bool    ReleasePostponed;  ///< If a "release" event occured in the previous audio fragment, but wasn't processed yet.
97          const static float EndCoeff;          float   ExpOffset;
98      private:          float   FadeOutCoeff;      ///< very fast ramp down for e.g. voice stealing
         static float CalculateEndCoeff();  
99  };  };
100    
101  }} // namespace LinuxSampler::gig  }} // namespace LinuxSampler::gig

Legend:
Removed from v.239  
changed lines
  Added in v.688

  ViewVC Help
Powered by ViewVC