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

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

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

revision 831 by persson, Sat Jan 28 16:55:30 2006 UTC revision 832 by persson, Sun Feb 5 10:24:05 2006 UTC
# Line 42  Line 42 
42  #include "Filter.h"  #include "Filter.h"
43  #include "../common/LFOBase.h"  #include "../common/LFOBase.h"
44  #include "SynthesisParam.h"  #include "SynthesisParam.h"
45    #include "SmoothVolume.h"
46    
47  // include the appropriate (unsigned) triangle LFO implementation  // include the appropriate (unsigned) triangle LFO implementation
48  #if CONFIG_UNSIGNED_TRIANG_ALGO == INT_MATH_SOLUTION  #if CONFIG_UNSIGNED_TRIANG_ALGO == INT_MATH_SOLUTION
# Line 104  namespace LinuxSampler { namespace gig { Line 105  namespace LinuxSampler { namespace gig {
105                  type_release_trigger_required,  ///< If the key of this voice will be released, it causes a release triggered voice to be spawned                  type_release_trigger_required,  ///< If the key of this voice will be released, it causes a release triggered voice to be spawned
106                  type_release_trigger            ///< Release triggered voice which cannot be killed by releasing its key                  type_release_trigger            ///< Release triggered voice which cannot be killed by releasing its key
107              };              };
108                
109              // Attributes              // Attributes
110              type_t       Type;         ///< Voice Type              type_t       Type;         ///< Voice Type
111              int          MIDIKey;      ///< MIDI key number of the key that triggered the voice              int          MIDIKey;      ///< MIDI key number of the key that triggered the voice
# Line 136  namespace LinuxSampler { namespace gig { Line 137  namespace LinuxSampler { namespace gig {
137              // Attributes              // Attributes
138              EngineChannel*              pEngineChannel;              EngineChannel*              pEngineChannel;
139              Engine*                     pEngine;            ///< Pointer to the sampler engine, to be able to access the event lists.              Engine*                     pEngine;            ///< Pointer to the sampler engine, to be able to access the event lists.
140              float                       Volume;             ///< Volume level of the voice              float                       VolumeLeft;         ///< Left channel volume. This factor is calculated when the voice is triggered and doesn't change after that.
141              float                       PanLeft;              float                       VolumeRight;        ///< Right channel volume. This factor is calculated when the voice is triggered and doesn't change after that.
142              float                       PanRight;              SmoothVolume                CrossfadeSmoother;  ///< Crossfade volume, updated by crossfade CC events
143              float                       CrossfadeVolume;    ///< Current attenuation level caused by a crossfade (only if a crossfade is defined of course)              SmoothVolume                VolumeSmoother;     ///< Volume, updated by CC 7 (volume) events
144                SmoothVolume                PanLeftSmoother;    ///< Left channel volume, updated by CC 10 (pan) events
145                SmoothVolume                PanRightSmoother;   ///< Right channel volume, updated by CC 10 (pan) events
146              double                      Pos;                ///< Current playback position in sample              double                      Pos;                ///< Current playback position in sample
147              float                       PitchBase;          ///< Basic pitch depth, stays the same for the whole life time of the voice              float                       PitchBase;          ///< Basic pitch depth, stays the same for the whole life time of the voice
148              float                       PitchBend;          ///< Current pitch value of the pitchbend wheel              float                       PitchBend;          ///< Current pitch value of the pitchbend wheel
# Line 171  namespace LinuxSampler { namespace gig { Line 174  namespace LinuxSampler { namespace gig {
174              Pool<Event>::Iterator       itKillEvent;         ///< Event which caused this voice to be killed              Pool<Event>::Iterator       itKillEvent;         ///< Event which caused this voice to be killed
175          //private:          //private:
176              int                         SynthesisMode;              int                         SynthesisMode;
             float                       fFinalVolume;  
177              float                       fFinalCutoff;              float                       fFinalCutoff;
178              float                       fFinalResonance;              float                       fFinalResonance;
179              SynthesisParam              finalSynthesisParameters;              SynthesisParam              finalSynthesisParameters;
# Line 190  namespace LinuxSampler { namespace gig { Line 192  namespace LinuxSampler { namespace gig {
192              void processCrossFadeEvent(RTList<Event>::Iterator& itEvent);              void processCrossFadeEvent(RTList<Event>::Iterator& itEvent);
193              void processCutoffEvent(RTList<Event>::Iterator& itEvent);              void processCutoffEvent(RTList<Event>::Iterator& itEvent);
194              void processResonanceEvent(RTList<Event>::Iterator& itEvent);              void processResonanceEvent(RTList<Event>::Iterator& itEvent);
             float getVolume();  
195    
196              inline float CrossfadeAttenuation(uint8_t& CrossfadeControllerValue) {              inline uint8_t CrossfadeAttenuation(uint8_t& CrossfadeControllerValue) {
197                  uint8_t c = std::max(CrossfadeControllerValue, pDimRgn->AttenuationControllerThreshold);                  uint8_t c = std::max(CrossfadeControllerValue, pDimRgn->AttenuationControllerThreshold);
198                  float att = (!pDimRgn->Crossfade.out_end) ? c / 127.0f /* 0,0,0,0 means no crossfade defined */                  c = (!pDimRgn->Crossfade.out_end) ? c /* 0,0,0,0 means no crossfade defined */
199                            : (c < pDimRgn->Crossfade.in_end) ?                            : (c < pDimRgn->Crossfade.in_end) ?
200                                  ((c <= pDimRgn->Crossfade.in_start) ? 0.0f                                  ((c <= pDimRgn->Crossfade.in_start) ? 0
201                                  : float(c - pDimRgn->Crossfade.in_start) / float(pDimRgn->Crossfade.in_end - pDimRgn->Crossfade.in_start))                                  : 127 * (c - pDimRgn->Crossfade.in_start) / (pDimRgn->Crossfade.in_end - pDimRgn->Crossfade.in_start))
202                            : (c <= pDimRgn->Crossfade.out_start) ? 1.0f                            : (c <= pDimRgn->Crossfade.out_start) ? 127
203                            : (c < pDimRgn->Crossfade.out_end) ? float(pDimRgn->Crossfade.out_end - c) / float(pDimRgn->Crossfade.out_end - pDimRgn->Crossfade.out_start)                            : (c < pDimRgn->Crossfade.out_end) ? 127 * (pDimRgn->Crossfade.out_end - c) / (pDimRgn->Crossfade.out_end - pDimRgn->Crossfade.out_start)
204                            : 0.0f;                            : 0;
205                  return pDimRgn->InvertAttenuationController ? 1 - att : att;                  return pDimRgn->InvertAttenuationController ? 127 - c : c;
206              }              }
207    
208              inline float Constrain(float ValueToCheck, float Min, float Max) {              inline float Constrain(float ValueToCheck, float Min, float Max) {

Legend:
Removed from v.831  
changed lines
  Added in v.832

  ViewVC Help
Powered by ViewVC