/[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 829 by schoenebeck, Sat Jan 14 14:07:47 2006 UTC revision 840 by persson, Sun Feb 26 13:00:08 2006 UTC
# Line 29  Line 29 
29  #include <gig.h>  #include <gig.h>
30    
31  #include "../../common/RTMath.h"  #include "../../common/RTMath.h"
 #include "../../common/RingBuffer.h"  
32  #include "../../common/Pool.h"  #include "../../common/Pool.h"
33  #include "../../drivers/audio/AudioOutputDevice.h"  #include "../../drivers/audio/AudioOutputDevice.h"
34  #include "../common/BiquadFilter.h"  #include "../common/BiquadFilter.h"
# Line 42  Line 41 
41  #include "Filter.h"  #include "Filter.h"
42  #include "../common/LFOBase.h"  #include "../common/LFOBase.h"
43  #include "SynthesisParam.h"  #include "SynthesisParam.h"
44    #include "SmoothVolume.h"
45    
46  // include the appropriate (unsigned) triangle LFO implementation  // include the appropriate (unsigned) triangle LFO implementation
47  #if CONFIG_UNSIGNED_TRIANG_ALGO == INT_MATH_SOLUTION  #if CONFIG_UNSIGNED_TRIANG_ALGO == INT_MATH_SOLUTION
# Line 104  namespace LinuxSampler { namespace gig { Line 104  namespace LinuxSampler { namespace gig {
104                  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
105                  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
106              };              };
107                
108              // Attributes              // Attributes
109              type_t       Type;         ///< Voice Type              type_t       Type;         ///< Voice Type
110              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 136  namespace LinuxSampler { namespace gig {
136              // Attributes              // Attributes
137              EngineChannel*              pEngineChannel;              EngineChannel*              pEngineChannel;
138              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.
139              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.
140              float                       PanLeft;              float                       VolumeRight;        ///< Right channel volume. This factor is calculated when the voice is triggered and doesn't change after that.
141              float                       PanRight;              SmoothVolume                CrossfadeSmoother;  ///< Crossfade volume, updated by crossfade CC events
142              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
143                SmoothVolume                PanLeftSmoother;    ///< Left channel volume, updated by CC 10 (pan) events
144                SmoothVolume                PanRightSmoother;   ///< Right channel volume, updated by CC 10 (pan) events
145              double                      Pos;                ///< Current playback position in sample              double                      Pos;                ///< Current playback position in sample
146              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
147              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 173  namespace LinuxSampler { namespace gig {
173              Pool<Event>::Iterator       itKillEvent;         ///< Event which caused this voice to be killed              Pool<Event>::Iterator       itKillEvent;         ///< Event which caused this voice to be killed
174          //private:          //private:
175              int                         SynthesisMode;              int                         SynthesisMode;
             float                       fFinalVolume;  
176              float                       fFinalCutoff;              float                       fFinalCutoff;
177              float                       fFinalResonance;              float                       fFinalResonance;
178              SynthesisParam              finalSynthesisParameters;              SynthesisParam              finalSynthesisParameters;
# Line 191  namespace LinuxSampler { namespace gig { Line 192  namespace LinuxSampler { namespace gig {
192              void processCutoffEvent(RTList<Event>::Iterator& itEvent);              void processCutoffEvent(RTList<Event>::Iterator& itEvent);
193              void processResonanceEvent(RTList<Event>::Iterator& itEvent);              void processResonanceEvent(RTList<Event>::Iterator& itEvent);
194    
195              inline float CrossfadeAttenuation(uint8_t& CrossfadeControllerValue) {              inline uint8_t CrossfadeAttenuation(uint8_t& CrossfadeControllerValue) {
196                  float att = (!pDimRgn->Crossfade.out_end) ? CrossfadeControllerValue / 127.0f /* 0,0,0,0 means no crossfade defined */                  uint8_t c = std::max(CrossfadeControllerValue, pDimRgn->AttenuationControllerThreshold);
197                            : (CrossfadeControllerValue < pDimRgn->Crossfade.in_end) ?                  c = (!pDimRgn->Crossfade.out_end) ? c /* 0,0,0,0 means no crossfade defined */
198                                  ((CrossfadeControllerValue <= pDimRgn->Crossfade.in_start) ? 0.0f                            : (c < pDimRgn->Crossfade.in_end) ?
199                                  : float(CrossfadeControllerValue - pDimRgn->Crossfade.in_start) / float(pDimRgn->Crossfade.in_end - pDimRgn->Crossfade.in_start))                                  ((c <= pDimRgn->Crossfade.in_start) ? 0
200                            : (CrossfadeControllerValue <= pDimRgn->Crossfade.out_start) ? 1.0f                                  : 127 * (c - pDimRgn->Crossfade.in_start) / (pDimRgn->Crossfade.in_end - pDimRgn->Crossfade.in_start))
201                            : (CrossfadeControllerValue < pDimRgn->Crossfade.out_end) ? float(pDimRgn->Crossfade.out_end - CrossfadeControllerValue) / float(pDimRgn->Crossfade.out_end - pDimRgn->Crossfade.out_start)                            : (c <= pDimRgn->Crossfade.out_start) ? 127
202                            : 0.0f;                            : (c < pDimRgn->Crossfade.out_end) ? 127 * (pDimRgn->Crossfade.out_end - c) / (pDimRgn->Crossfade.out_end - pDimRgn->Crossfade.out_start)
203                  return pDimRgn->InvertAttenuationController ? 1 - att : att;                            : 0;
204                    return pDimRgn->InvertAttenuationController ? 127 - c : c;
205              }              }
206    
207              inline float Constrain(float ValueToCheck, float Min, float Max) {              inline float Constrain(float ValueToCheck, float Min, float Max) {

Legend:
Removed from v.829  
changed lines
  Added in v.840

  ViewVC Help
Powered by ViewVC