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

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

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

revision 2176 by persson, Sun May 1 15:19:38 2011 UTC revision 2218 by iliev, Thu Jul 28 08:05:57 2011 UTC
# Line 31  Line 31 
31    
32  namespace LinuxSampler { namespace sfz {  namespace LinuxSampler { namespace sfz {
33    
34      Voice::Voice() {      typedef LinuxSampler::VoiceBase<EngineChannel, ::sfz::Region, Sample, DiskThread> SfzVoice;
35        Voice::Voice(): SignalRack(this), SfzVoice(&SignalRack) {
36          pEngine     = NULL;          pEngine     = NULL;
37      }      }
38    
# Line 71  namespace LinuxSampler { namespace sfz { Line 72  namespace LinuxSampler { namespace sfz {
72          ri.UnityNote = pRegion->pitch_keycenter;          ri.UnityNote = pRegion->pitch_keycenter;
73          ri.FineTune  = pRegion->tune + pRegion->transpose * 100;          ri.FineTune  = pRegion->tune + pRegion->transpose * 100;
74          ri.Pan       = int(pRegion->pan * 0.63); // convert from -100..100 to -64..63          ri.Pan       = int(pRegion->pan * 0.63); // convert from -100..100 to -64..63
75          ri.SampleStartOffset = 0; // TODO:          ri.SampleStartOffset = pRegion->offset ? *(pRegion->offset) : 0;
   
         ri.EG1PreAttack        = pRegion->ampeg_start * 10;  
         ri.EG1Attack           = pRegion->ampeg_attack;  
         ri.EG1Hold             = pRegion->ampeg_hold;  
         ri.EG1Decay1           = pRegion->ampeg_decay;  
         ri.EG1Decay2           = pRegion->ampeg_decay;  
         ri.EG1Sustain          = pRegion->ampeg_sustain * 10;  
         ri.EG1InfiniteSustain  = true;  
         ri.EG1Release          = pRegion->ampeg_release;  
76    
77          ri.EG2PreAttack        = pRegion->fileg_start * 10;          ri.EG2PreAttack        = pRegion->fileg_start * 10;
78          ri.EG2Attack           = pRegion->fileg_attack;          ri.EG2Attack           = pRegion->fileg_attack;
# Line 261  namespace LinuxSampler { namespace sfz { Line 253  namespace LinuxSampler { namespace sfz {
253    
254          // otherwise use the v1 EGADSR          // otherwise use the v1 EGADSR
255          pEG1 = &EGADSR1;          pEG1 = &EGADSR1;
256          EGADSR1.trigger(uint(RgnInfo.EG1PreAttack),          EGADSR1.trigger(uint(pRegion->ampeg_start * 10),
257                          std::max(0.0, RgnInfo.EG1Attack + pRegion->ampeg_vel2attack * velrelease),                          std::max(0.0, pRegion->ampeg_attack + pRegion->ampeg_vel2attack * velrelease),
258                          std::max(0.0, RgnInfo.EG1Hold + pRegion->ampeg_vel2hold * velrelease),                          std::max(0.0, pRegion->ampeg_hold + pRegion->ampeg_vel2hold * velrelease),
259                          std::max(0.0, RgnInfo.EG1Decay1 + pRegion->ampeg_vel2decay * velrelease),                          std::max(0.0, pRegion->ampeg_decay + pRegion->ampeg_vel2decay * velrelease),
260                          uint(std::min(std::max(0.0, RgnInfo.EG1Sustain + 10 * pRegion->ampeg_vel2sustain * velrelease), 1000.0)),                          uint(std::min(std::max(0.0, 10 * (pRegion->ampeg_sustain + pRegion->ampeg_vel2sustain * velrelease)), 1000.0)),
261                          std::max(0.0, RgnInfo.EG1Release + pRegion->ampeg_vel2release * velrelease),                          std::max(0.0, pRegion->ampeg_release + pRegion->ampeg_vel2release * velrelease),
262                          sampleRate / CONFIG_DEFAULT_SUBFRAGMENT_SIZE);                          sampleRate / CONFIG_DEFAULT_SUBFRAGMENT_SIZE);
263      }      }
264    
# Line 526  namespace LinuxSampler { namespace sfz { Line 518  namespace LinuxSampler { namespace sfz {
518                  EnterReleaseStage();                  EnterReleaseStage();
519              } else {              } else {
520                  // kill the voice fast                  // kill the voice fast
521                  pEG1->enterFadeOutStage();                  SignalRack.EnterFadeOutStage();
522              }              }
523          }          }
524      }      }
525        
526        void Voice::SetSampleStartOffset() {
527            if (DiskVoice && RgnInfo.SampleStartOffset > pSample->MaxOffset) {
528                // The offset is applied to the RAM buffer
529                finalSynthesisParameters.dPos = 0;
530                Pos = 0;
531            } else {
532                finalSynthesisParameters.dPos = RgnInfo.SampleStartOffset; // offset where we should start playback of sample
533                Pos = RgnInfo.SampleStartOffset;
534            }
535        }
536    
537  }} // namespace LinuxSampler::sfz  }} // namespace LinuxSampler::sfz

Legend:
Removed from v.2176  
changed lines
  Added in v.2218

  ViewVC Help
Powered by ViewVC