/[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 2045 by persson, Sun Jan 10 13:22:19 2010 UTC revision 2061 by persson, Tue Feb 23 18:32:31 2010 UTC
# Line 3  Line 3 
3   *   LinuxSampler - modular, streaming capable sampler                     *   *   LinuxSampler - modular, streaming capable sampler                     *
4   *                                                                         *   *                                                                         *
5   *   Copyright (C) 2003, 2004 by Benno Senoner and Christian Schoenebeck   *   *   Copyright (C) 2003, 2004 by Benno Senoner and Christian Schoenebeck   *
6   *   Copyright (C) 2005-2008 Christian Schoenebeck                         *   *   Copyright (C) 2005 - 2008 Christian Schoenebeck                       *
7   *   Copyright (C) 2009-2010 Christian Schoenebeck and Grigor Iliev        *   *   Copyright (C) 2009 - 2010 Christian Schoenebeck and Grigor Iliev      *
8   *                                                                         *   *                                                                         *
9   *   This program is free software; you can redistribute it and/or modify  *   *   This program is free software; you can redistribute it and/or modify  *
10   *   it under the terms of the GNU General Public License as published by  *   *   it under the terms of the GNU General Public License as published by  *
# Line 76  namespace LinuxSampler { namespace sfz { Line 76  namespace LinuxSampler { namespace sfz {
76          ri.EG1Hold             = pRegion->ampeg_hold;          ri.EG1Hold             = pRegion->ampeg_hold;
77          ri.EG1Decay1           = pRegion->ampeg_decay;          ri.EG1Decay1           = pRegion->ampeg_decay;
78          ri.EG1Decay2           = pRegion->ampeg_decay;          ri.EG1Decay2           = pRegion->ampeg_decay;
79          ri.EG1Sustain          = pRegion->ampeg_sustain;          ri.EG1Sustain          = pRegion->ampeg_sustain * 10;
80          ri.EG1InfiniteSustain  = true;          ri.EG1InfiniteSustain  = true;
81          ri.EG1Release          = pRegion->ampeg_release;          ri.EG1Release          = pRegion->ampeg_release;
82    
83          ri.EG2PreAttack        = pRegion->fileg_start;          ri.EG2PreAttack        = pRegion->fileg_start * 10;
84          ri.EG2Attack           = pRegion->fileg_attack;          ri.EG2Attack           = pRegion->fileg_attack;
85          //ri.EG2Hold             = pRegion->fileg_hold; // TODO:          //ri.EG2Hold             = pRegion->fileg_hold; // TODO:
86          ri.EG2Decay1           = pRegion->fileg_decay;          ri.EG2Decay1           = pRegion->fileg_decay;
87          ri.EG2Decay2           = pRegion->fileg_decay;          ri.EG2Decay2           = pRegion->fileg_decay;
88          ri.EG2Sustain          = pRegion->fileg_sustain;          ri.EG2Sustain          = pRegion->fileg_sustain * 10;
89          ri.EG2InfiniteSustain  = true;          ri.EG2InfiniteSustain  = true;
90          ri.EG2Release          = pRegion->fileg_release;          ri.EG2Release          = pRegion->fileg_release;
91    
# Line 95  namespace LinuxSampler { namespace sfz { Line 95  namespace LinuxSampler { namespace sfz {
95          ri.VCFType       = ::gig::vcf_type_lowpass; // TODO:          ri.VCFType       = ::gig::vcf_type_lowpass; // TODO:
96          ri.VCFResonance  = 0; // TODO:          ri.VCFResonance  = 0; // TODO:
97    
98          ri.ReleaseTriggerDecay = 0;          // rt_decay is in dB. Precalculate a suitable value for exp in
99            // GetReleaseTriggerAttenuation: -ln(10) / 20 * rt_decay
100            ri.ReleaseTriggerDecay = -0.115129254649702 * pRegion->rt_decay;
101    
102          return ri;          return ri;
103      }      }
# Line 202  namespace LinuxSampler { namespace sfz { Line 204  namespace LinuxSampler { namespace sfz {
204          return eg;          return eg;
205      }      }
206    
207      double Voice::GetEG2ControllerValue(uint8_t MIDIKeyVelocity) {      void Voice::TriggerEG1(const EGInfo& egInfo, double velrelease, double velocityAttenuation, uint sampleRate, uint8_t velocity) {
208    
209            // TODO: controller modulation
210    
211            // first check if there is a v2 EG for amplitude
212            for (int i = 0 ; i < pRegion->eg.size() ; i++) {
213                if (pRegion->eg[i].amplitude > 0) {
214                    // TODO: actually use the value of the amplitude parameter
215                    pEG1 = &EG1;
216                    EG1.trigger(pRegion->eg[i], sampleRate / CONFIG_DEFAULT_SUBFRAGMENT_SIZE, velocity);
217                    return;
218                }
219            }
220    
221            // otherwise use the v1 EGADSR
222            pEG1 = &EGADSR1;
223            EGADSR1.trigger(uint(RgnInfo.EG1PreAttack),
224                            RgnInfo.EG1Attack,
225                            RgnInfo.EG1Hold,
226                            RgnInfo.EG1Decay1,
227                            uint(RgnInfo.EG1Sustain),
228                            RgnInfo.EG1Release,
229                            sampleRate / CONFIG_DEFAULT_SUBFRAGMENT_SIZE);
230         }
231    
232         double Voice::GetEG2ControllerValue(uint8_t MIDIKeyVelocity) {
233          /*double eg2controllervalue = 0;          /*double eg2controllervalue = 0;
234          switch (pRegion->EG2Controller.type) {          switch (pRegion->EG2Controller.type) {
235              case ::gig::eg2_ctrl_t::type_none: // no controller defined              case ::gig::eg2_ctrl_t::type_none: // no controller defined
# Line 467  namespace LinuxSampler { namespace sfz { Line 494  namespace LinuxSampler { namespace sfz {
494          return 0;          return 0;
495      }      }
496    
497        float Voice::GetReleaseTriggerAttenuation(float noteLength) {
498            // pow(10, -rt_decay * noteLength / 20):
499            return expf(RgnInfo.ReleaseTriggerDecay * noteLength);
500        }
501    
502  }} // namespace LinuxSampler::sfz  }} // namespace LinuxSampler::sfz

Legend:
Removed from v.2045  
changed lines
  Added in v.2061

  ViewVC Help
Powered by ViewVC