/[svn]/linuxsampler/trunk/src/engines/sfz/SfzSignalUnitRack.cpp
ViewVC logotype

Diff of /linuxsampler/trunk/src/engines/sfz/SfzSignalUnitRack.cpp

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

revision 2219 by iliev, Thu Jul 28 12:35:49 2011 UTC revision 2220 by iliev, Thu Jul 28 15:47:51 2011 UTC
# Line 36  namespace LinuxSampler { namespace sfz { Line 36  namespace LinuxSampler { namespace sfz {
36            
37      void EGv1Unit::Trigger() {      void EGv1Unit::Trigger() {
38          ::sfz::Region* const pRegion = pVoice->pRegion;          ::sfz::Region* const pRegion = pVoice->pRegion;
39            
40          // the length of the decay and release curves are dependent on the velocity          // the length of the decay and release curves are dependent on the velocity
41          const double velrelease = 1 / pVoice->GetVelocityRelease(pVoice->MIDIVelocity);          const double velrelease = 1 / pVoice->GetVelocityRelease(pVoice->MIDIVelocity);
42    
43            // set the delay trigger
44            uiDelayTrigger = (pRegion->ampeg_delay + pRegion->ampeg_vel2delay * velrelease) * GetSampleRate();
45            
46          EG.trigger(uint(pRegion->ampeg_start * 10),          EG.trigger(uint(pRegion->ampeg_start * 10),
47                     std::max(0.0, pRegion->ampeg_attack + pRegion->ampeg_vel2attack * velrelease),                     std::max(0.0, pRegion->ampeg_attack + pRegion->ampeg_vel2attack * velrelease),
48                     std::max(0.0, pRegion->ampeg_hold + pRegion->ampeg_vel2hold * velrelease),                     std::max(0.0, pRegion->ampeg_hold + pRegion->ampeg_vel2hold * velrelease),
# Line 48  namespace LinuxSampler { namespace sfz { Line 52  namespace LinuxSampler { namespace sfz {
52                     GetSampleRate());                     GetSampleRate());
53      }      }
54            
55        
56      void EGv2Unit::Trigger() {      void EGv2Unit::Trigger() {
57          EG.trigger(*pEGInfo, GetSampleRate(), pVoice->MIDIVelocity);          EG.trigger(*pEGInfo, GetSampleRate(), pVoice->MIDIVelocity);
58      }      }
59            
60        
61        void PitchEGUnit::Trigger() {
62            ::sfz::Region* const pRegion = pVoice->pRegion;
63            depth = pRegion->pitcheg_depth;
64            
65            // the length of the decay and release curves are dependent on the velocity
66            const double velrelease = 1 / pVoice->GetVelocityRelease(pVoice->MIDIVelocity);
67    
68            // set the delay trigger
69            uiDelayTrigger = (pRegion->pitcheg_delay + pRegion->pitcheg_vel2delay * velrelease) * GetSampleRate();
70            
71            EG.trigger(uint(pRegion->pitcheg_start * 10),
72                       std::max(0.0, pRegion->pitcheg_attack + pRegion->pitcheg_vel2attack * velrelease),
73                       std::max(0.0, pRegion->pitcheg_hold + pRegion->pitcheg_vel2hold * velrelease),
74                       std::max(0.0, pRegion->pitcheg_decay + pRegion->pitcheg_vel2decay * velrelease),
75                       uint(std::min(std::max(0.0, 10 * (pRegion->pitcheg_sustain + pRegion->pitcheg_vel2sustain * velrelease)), 1000.0)),
76                       std::max(0.0, pRegion->pitcheg_release + pRegion->pitcheg_vel2release * velrelease),
77                       GetSampleRate());
78        }
79        
80    
81      void LFOUnit::Increment() {      void LFOUnit::Increment() {
82          if (DelayStage()) return;          if (DelayStage()) return;
# Line 66  namespace LinuxSampler { namespace sfz { Line 91  namespace LinuxSampler { namespace sfz {
91          Level = 0;          Level = 0;
92                    
93          // set the delay trigger          // set the delay trigger
94           uiDelayTrigger = pLfoInfo->delay * GetSampleRate();          uiDelayTrigger = pLfoInfo->delay * GetSampleRate();
95      }      }
96            
97      void LFOv2Unit::Trigger() {      void LFOv2Unit::Trigger() {
# Line 131  namespace LinuxSampler { namespace sfz { Line 156  namespace LinuxSampler { namespace sfz {
156      }      }
157            
158      float EndpointUnit::GetPitch() {      float EndpointUnit::GetPitch() {
159          return 1;          EGv1Unit* u = &(GetRack()->suPitchEG);
160            double pitchEg = u->Active() ? RTMath::CentsToFreqRatioUnlimited(u->GetLevel() * u->depth) : 1;
161            return pitchEg;
162      }      }
163            
164      float EndpointUnit::GetResonance() {      float EndpointUnit::GetResonance() {
# Line 165  namespace LinuxSampler { namespace sfz { Line 192  namespace LinuxSampler { namespace sfz {
192            
193            
194      SfzSignalUnitRack::SfzSignalUnitRack(Voice* voice)      SfzSignalUnitRack::SfzSignalUnitRack(Voice* voice)
195          : SignalUnitRack(MaxUnitCount), pVoice(voice), suEndpoint(this), suVolEG(this),          : SignalUnitRack(MaxUnitCount), pVoice(voice), suEndpoint(this), suVolEG(this), suPitchEG(this),
196          EGs(maxEgCount), volEGs(maxEgCount), pitchEGs(maxEgCount),          EGs(maxEgCount), volEGs(maxEgCount), pitchEGs(maxEgCount),
197          LFOs(maxLfoCount), filLFOs(maxLfoCount), resLFOs(maxLfoCount), panLFOs(maxLfoCount)          LFOs(maxLfoCount), filLFOs(maxLfoCount), resLFOs(maxLfoCount), panLFOs(maxLfoCount)
198      {      {
199          suEndpoint.pVoice = suVolEG.pVoice = voice;          suEndpoint.pVoice = suVolEG.pVoice = suPitchEG.pVoice = voice;
200                    
201          for (int i = 0; i < EGs.capacity(); i++) {          for (int i = 0; i < EGs.capacity(); i++) {
202              EGs[i] = new EGv2Unit(this);              EGs[i] = new EGv2Unit(this);
# Line 253  namespace LinuxSampler { namespace sfz { Line 280  namespace LinuxSampler { namespace sfz {
280          Units.clear();          Units.clear();
281                    
282          Units.add(&suVolEG);          Units.add(&suVolEG);
283            Units.add(&suPitchEG);
284                    
285          for (int i = 0; i < EGs.size(); i++) {          for (int i = 0; i < EGs.size(); i++) {
286              Units.add(EGs[i]);              Units.add(EGs[i]);

Legend:
Removed from v.2219  
changed lines
  Added in v.2220

  ViewVC Help
Powered by ViewVC