/[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 877 by persson, Sun Jun 25 13:54:17 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"
 #include "../common/BiquadFilter.h"  
34  #include "Engine.h"  #include "Engine.h"
35  #include "EngineChannel.h"  #include "EngineChannel.h"
36  #include "Stream.h"  #include "Stream.h"
# Line 42  Line 40 
40  #include "Filter.h"  #include "Filter.h"
41  #include "../common/LFOBase.h"  #include "../common/LFOBase.h"
42  #include "SynthesisParam.h"  #include "SynthesisParam.h"
43    #include "SmoothVolume.h"
44    
45  // include the appropriate (unsigned) triangle LFO implementation  // include the appropriate (unsigned) triangle LFO implementation
46  #if CONFIG_UNSIGNED_TRIANG_ALGO == INT_MATH_SOLUTION  #if CONFIG_UNSIGNED_TRIANG_ALGO == INT_MATH_SOLUTION
# Line 104  namespace LinuxSampler { namespace gig { Line 103  namespace LinuxSampler { namespace gig {
103                  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
104                  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
105              };              };
106                
107              // Attributes              // Attributes
108              type_t       Type;         ///< Voice Type              type_t       Type;         ///< Voice Type
109              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 135  namespace LinuxSampler { namespace gig {
135              // Attributes              // Attributes
136              EngineChannel*              pEngineChannel;              EngineChannel*              pEngineChannel;
137              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.
138              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.
139              float                       PanLeft;              float                       VolumeRight;        ///< Right channel volume. This factor is calculated when the voice is triggered and doesn't change after that.
140              float                       PanRight;              SmoothVolume                CrossfadeSmoother;  ///< Crossfade volume, updated by crossfade CC events
141              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
142                SmoothVolume                PanLeftSmoother;    ///< Left channel volume, updated by CC 10 (pan) events
143                SmoothVolume                PanRightSmoother;   ///< Right channel volume, updated by CC 10 (pan) events
144              double                      Pos;                ///< Current playback position in sample              double                      Pos;                ///< Current playback position in sample
145              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
146              float                       PitchBend;          ///< Current pitch value of the pitchbend wheel              float                       PitchBend;          ///< Current pitch value of the pitchbend wheel
# Line 159  namespace LinuxSampler { namespace gig { Line 160  namespace LinuxSampler { namespace gig {
160              EGDecay                     EG3;                ///< Envelope Generator 3 (Pitch)              EGDecay                     EG3;                ///< Envelope Generator 3 (Pitch)
161              midi_ctrl                   VCFCutoffCtrl;              midi_ctrl                   VCFCutoffCtrl;
162              midi_ctrl                   VCFResonanceCtrl;              midi_ctrl                   VCFResonanceCtrl;
             static const float          FILTER_CUTOFF_COEFF;  
163              LFOUnsigned*                pLFO1;               ///< Low Frequency Oscillator 1 (Amplification)              LFOUnsigned*                pLFO1;               ///< Low Frequency Oscillator 1 (Amplification)
164              LFOUnsigned*                pLFO2;               ///< Low Frequency Oscillator 2 (Filter cutoff frequency)              LFOUnsigned*                pLFO2;               ///< Low Frequency Oscillator 2 (Filter cutoff frequency)
165              LFOSigned*                  pLFO3;               ///< Low Frequency Oscillator 3 (Pitch)              LFOSigned*                  pLFO3;               ///< Low Frequency Oscillator 3 (Pitch)
# Line 171  namespace LinuxSampler { namespace gig { Line 171  namespace LinuxSampler { namespace gig {
171              Pool<Event>::Iterator       itKillEvent;         ///< Event which caused this voice to be killed              Pool<Event>::Iterator       itKillEvent;         ///< Event which caused this voice to be killed
172          //private:          //private:
173              int                         SynthesisMode;              int                         SynthesisMode;
             float                       fFinalVolume;  
174              float                       fFinalCutoff;              float                       fFinalCutoff;
175              float                       fFinalResonance;              float                       fFinalResonance;
176              SynthesisParam              finalSynthesisParameters;              SynthesisParam              finalSynthesisParameters;
# Line 191  namespace LinuxSampler { namespace gig { Line 190  namespace LinuxSampler { namespace gig {
190              void processCutoffEvent(RTList<Event>::Iterator& itEvent);              void processCutoffEvent(RTList<Event>::Iterator& itEvent);
191              void processResonanceEvent(RTList<Event>::Iterator& itEvent);              void processResonanceEvent(RTList<Event>::Iterator& itEvent);
192    
193              inline float CrossfadeAttenuation(uint8_t& CrossfadeControllerValue) {              inline uint8_t CrossfadeAttenuation(uint8_t& CrossfadeControllerValue) {
194                  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);
195                            : (CrossfadeControllerValue < pDimRgn->Crossfade.in_end) ?                  c = (!pDimRgn->Crossfade.out_end) ? c /* 0,0,0,0 means no crossfade defined */
196                                  ((CrossfadeControllerValue <= pDimRgn->Crossfade.in_start) ? 0.0f                            : (c < pDimRgn->Crossfade.in_end) ?
197                                  : float(CrossfadeControllerValue - pDimRgn->Crossfade.in_start) / float(pDimRgn->Crossfade.in_end - pDimRgn->Crossfade.in_start))                                  ((c <= pDimRgn->Crossfade.in_start) ? 0
198                            : (CrossfadeControllerValue <= pDimRgn->Crossfade.out_start) ? 1.0f                                  : 127 * (c - pDimRgn->Crossfade.in_start) / (pDimRgn->Crossfade.in_end - pDimRgn->Crossfade.in_start))
199                            : (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
200                            : 0.0f;                            : (c < pDimRgn->Crossfade.out_end) ? 127 * (pDimRgn->Crossfade.out_end - c) / (pDimRgn->Crossfade.out_end - pDimRgn->Crossfade.out_start)
201                  return pDimRgn->InvertAttenuationController ? 1 - att : att;                            : 0;
202                    return pDimRgn->InvertAttenuationController ? 127 - c : c;
203              }              }
204    
205              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.877

  ViewVC Help
Powered by ViewVC