/[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 2232 by iliev, Mon Aug 8 13:40:04 2011 UTC revision 2235 by iliev, Wed Aug 10 19:40:39 2011 UTC
# Line 44  namespace LinuxSampler { namespace sfz { Line 44  namespace LinuxSampler { namespace sfz {
44      }      }
45            
46            
47        EGv2Unit::EGv2Unit(SfzSignalUnitRack* rack)
48            : EGUnit< ::LinuxSampler::sfz::EG>(rack),
49              suAmpOnCC(rack), suVolOnCC(rack), suPitchOnCC(rack), suCutoffOnCC(rack), suResOnCC(rack)
50        { }
51        
52      void EGv2Unit::Trigger() {      void EGv2Unit::Trigger() {
53          egInfo = *pEGInfo;          egInfo = *pEGInfo;
54          for (int i = 0; i < egInfo.node.size(); i++) {          for (int i = 0; i < egInfo.node.size(); i++) {
# Line 134  namespace LinuxSampler { namespace sfz { Line 139  namespace LinuxSampler { namespace sfz {
139            
140      LFOUnit::LFOUnit(SfzSignalUnitRack* rack)      LFOUnit::LFOUnit(SfzSignalUnitRack* rack)
141          : SfzSignalUnit(rack), pLfoInfo(NULL), pLFO(NULL),          : SfzSignalUnit(rack), pLfoInfo(NULL), pLFO(NULL),
142            suFadeEG(rack), suFreqOnCC(rack, this)            suFadeEG(rack), suFreqOnCC(rack, this), suDepthOnCC(rack)
143      { }      { }
144            
145      LFOUnit::LFOUnit(const LFOUnit& Unit)      LFOUnit::LFOUnit(const LFOUnit& Unit)
146          : SfzSignalUnit(Unit), suFadeEG(static_cast<SfzSignalUnitRack*>(Unit.pRack)),          : SfzSignalUnit(Unit), suFadeEG(static_cast<SfzSignalUnitRack*>(Unit.pRack)),
147            suFreqOnCC(static_cast<SfzSignalUnitRack*>(Unit.pRack), this)            suFreqOnCC(static_cast<SfzSignalUnitRack*>(Unit.pRack), this),
148              suDepthOnCC(static_cast<SfzSignalUnitRack*>(Unit.pRack))
149      {      {
150          Copy(Unit);          Copy(Unit);
151      }      }
# Line 158  namespace LinuxSampler { namespace sfz { Line 164  namespace LinuxSampler { namespace sfz {
164          Level = 0;          Level = 0;
165                    
166          // set the delay trigger          // set the delay trigger
167          uiDelayTrigger = pLfoInfo->delay * GetSampleRate();          uiDelayTrigger = (pLfoInfo->delay + GetInfluence(pLfoInfo->delay_oncc)) * GetSampleRate();
168          if(pLfoInfo->fade != 0 || !pLfoInfo->fade_oncc.empty()) {          if(pLfoInfo->fade != 0 || !pLfoInfo->fade_oncc.empty()) {
169              float f = pLfoInfo->fade;              float f = pLfoInfo->fade;
170              f += GetInfluence(pLfoInfo->fade_oncc);              f += GetInfluence(pLfoInfo->fade_oncc);
# Line 190  namespace LinuxSampler { namespace sfz { Line 196  namespace LinuxSampler { namespace sfz {
196      LFOv2Unit::LFOv2Unit(SfzSignalUnitRack* rack)      LFOv2Unit::LFOv2Unit(SfzSignalUnitRack* rack)
197          : LFOUnit(rack), lfos(8), lfo0(1200.0f), lfo1(1200.0f), lfo2(1200.0f),          : LFOUnit(rack), lfos(8), lfo0(1200.0f), lfo1(1200.0f), lfo2(1200.0f),
198            lfo3(1200.0f), lfo4(1200.0f), lfo5(1200.0f), lfo6(1200.0f), lfo7(1200.0f),            lfo3(1200.0f), lfo4(1200.0f), lfo5(1200.0f), lfo6(1200.0f), lfo7(1200.0f),
199            suPitchOnCC(rack)            suVolOnCC(rack), suPitchOnCC(rack), suPanOnCC(rack), suCutoffOnCC(rack), suResOnCC(rack)
200      {      {
201          lfos.add(&lfo0);          lfos.add(&lfo0);
202          lfos.add(&lfo1);          lfos.add(&lfo1);
# Line 334  namespace LinuxSampler { namespace sfz { Line 340  namespace LinuxSampler { namespace sfz {
340          for (int i = 0; i < GetRack()->volEGs.size(); i++) {          for (int i = 0; i < GetRack()->volEGs.size(); i++) {
341              EGv2Unit* eg = GetRack()->volEGs[i];              EGv2Unit* eg = GetRack()->volEGs[i];
342              if (!eg->Active()) continue;              if (!eg->Active()) continue;
             vol += eg->GetLevel() * (eg->pEGInfo->amplitude / 100.0f);  
343                            
344                float dB = eg->suVolOnCC.Active() ? eg->suVolOnCC.GetLevel() : -200;
345                if (dB < -144) dB = eg->pEGInfo->volume;
346                else if (eg->pEGInfo->volume >= -144) dB += eg->pEGInfo->volume;
347                
348                float amp = eg->suAmpOnCC.Active() ? eg->suAmpOnCC.GetLevel() : 0;
349                amp = (amp + eg->pEGInfo->amplitude) / 100.0f;
350                
351                if (dB >= -144) {
352                    if (amp == 0 && eg->suAmpOnCC.GetCCCount() == 0) amp = 1.0f;
353                    amp *= ::sf2::ToRatio(dB * 10.0);
354                }
355                
356                vol += amp * eg->GetLevel();
357          }          }
358                    
359          AmpLFOUnit* u = &(GetRack()->suAmpLFO);          AmpLFOUnit* u = &(GetRack()->suAmpLFO);
360          vol *= u->Active() ? ::sf2::ToRatio((u->GetLevel() * u->pLfoInfo->volume) * 10.0) : 1;          CCSignalUnit* u2 = &(GetRack()->suAmpLFO.suDepthOnCC);
361            float f = u2->Active() ? u2->GetLevel() : 0;
362            vol *= u->Active() ? ::sf2::ToRatio((u->GetLevel() * (u->pLfoInfo->volume + f) * 10.0)) : 1;
363                    
364          vol *= ::sf2::ToRatio(GetRack()->suVolOnCC.GetLevel() * 10.0);          vol *= ::sf2::ToRatio(GetRack()->suVolOnCC.GetLevel() * 10.0);
365                    
366            for (int i = 0; i < GetRack()->volLFOs.size(); i++) {
367                LFOv2Unit* lfo = GetRack()->volLFOs[i];
368                if (!lfo->Active()) continue;
369                
370                float f = lfo->suVolOnCC.Active() ? lfo->suVolOnCC.GetLevel() : 0;
371                vol *= ::sf2::ToRatio(lfo->GetLevel() * (lfo->pLfoInfo->volume + f) * 10.0);
372            }
373            
374          return vol;          return vol;
375      }      }
376            
# Line 350  namespace LinuxSampler { namespace sfz { Line 378  namespace LinuxSampler { namespace sfz {
378          float val;          float val;
379                    
380          FilLFOUnit* u = &(GetRack()->suFilLFO);          FilLFOUnit* u = &(GetRack()->suFilLFO);
381          val = u->Active() ? RTMath::CentsToFreqRatioUnlimited(u->GetLevel() * u->pLfoInfo->cutoff) : 1;          CCSignalUnit* u1 = &(GetRack()->suFilLFO.suDepthOnCC);
382            float f = u1->Active() ? u1->GetLevel() : 0;
383            val = u->Active() ? RTMath::CentsToFreqRatioUnlimited(u->GetLevel() * (u->pLfoInfo->cutoff + f)) : 1;
384                    
385          FilEGUnit* u2 = &(GetRack()->suFilEG);          FilEGUnit* u2 = &(GetRack()->suFilEG);
386          val *= u2->Active() ? RTMath::CentsToFreqRatioUnlimited(u2->GetLevel() * u2->depth) : 1;          val *= u2->Active() ? RTMath::CentsToFreqRatioUnlimited(u2->GetLevel() * u2->depth) : 1;
387                    
388            for (int i = 0; i < GetRack()->filEGs.size(); i++) {
389                EGv2Unit* eg = GetRack()->filEGs[i];
390                if (!eg->Active()) continue;
391                
392                float f = eg->suCutoffOnCC.Active() ? eg->suCutoffOnCC.GetLevel() : 0;
393                f = eg->GetLevel() * (eg->pEGInfo->cutoff + f);
394                val *= RTMath::CentsToFreqRatioUnlimited(f);
395            }
396            
397          for (int i = 0; i < GetRack()->filLFOs.size(); i++) {          for (int i = 0; i < GetRack()->filLFOs.size(); i++) {
398              LFOv2Unit* lfo = GetRack()->filLFOs[i];              LFOv2Unit* lfo = GetRack()->filLFOs[i];
399              if (!lfo->Active()) continue;              if (!lfo->Active()) continue;
400                            
401              float f = lfo->GetLevel() * lfo->pLfoInfo->cutoff;              float f = lfo->suCutoffOnCC.Active() ? lfo->suCutoffOnCC.GetLevel() : 0;
402                f = lfo->GetLevel() * (lfo->pLfoInfo->cutoff + f);
403              val *= RTMath::CentsToFreqRatioUnlimited(f);              val *= RTMath::CentsToFreqRatioUnlimited(f);
404          }          }
405                    
406          return val;          return val;
407      }      }
408            
409        float EndpointUnit::CalculateFilterCutoff(float cutoff) {
410             cutoff *= GetFilterCutoff();
411             float maxCutoff = 0.49 * pVoice->GetSampleRate();
412             return cutoff > maxCutoff ? maxCutoff : cutoff;
413        }
414        
415      float EndpointUnit::GetPitch() {      float EndpointUnit::GetPitch() {
416          double p;          double p;
417          EGv1Unit* u = &(GetRack()->suPitchEG);          EGv1Unit* u = &(GetRack()->suPitchEG);
418          p = u->Active() ? RTMath::CentsToFreqRatioUnlimited(u->GetLevel() * u->depth) : 1;          p = u->Active() ? RTMath::CentsToFreqRatioUnlimited(u->GetLevel() * u->depth) : 1;
419                    
420            for (int i = 0; i < GetRack()->pitchEGs.size(); i++) {
421                EGv2Unit* eg = GetRack()->pitchEGs[i];
422                if (!eg->Active()) continue;
423                
424                float f = eg->suPitchOnCC.Active() ? eg->suPitchOnCC.GetLevel() : 0;
425                p *= RTMath::CentsToFreqRatioUnlimited(eg->GetLevel() * (eg->pEGInfo->pitch + f));
426            }
427            
428          PitchLFOUnit* u2 = &(GetRack()->suPitchLFO);          PitchLFOUnit* u2 = &(GetRack()->suPitchLFO);
429          CCSignalUnit* u3 = &(GetRack()->suPitchLFO.suDepthCC);          CCSignalUnit* u3 = &(GetRack()->suPitchLFO.suDepthOnCC);
430          float f = u3->Active() ? u3->GetLevel() : 0;          float f = u3->Active() ? u3->GetLevel() : 0;
431          p *= u2->Active() ? RTMath::CentsToFreqRatioUnlimited(u2->GetLevel() * (u2->pLfoInfo->pitch + f)) : 1;          p *= u2->Active() ? RTMath::CentsToFreqRatioUnlimited(u2->GetLevel() * (u2->pLfoInfo->pitch + f)) : 1;
432                    
# Line 390  namespace LinuxSampler { namespace sfz { Line 444  namespace LinuxSampler { namespace sfz {
444      float EndpointUnit::GetResonance() {      float EndpointUnit::GetResonance() {
445           float val = 0;           float val = 0;
446                    
447            for (int i = 0; i < GetRack()->resEGs.size(); i++) {
448                EGv2Unit* eg = GetRack()->resEGs[i];
449                if (!eg->Active()) continue;
450                
451                float f = eg->suResOnCC.Active() ? eg->suResOnCC.GetLevel() : 0;
452                val += eg->GetLevel() * (eg->pEGInfo->resonance + f);
453            }
454            
455          for (int i = 0; i < GetRack()->resLFOs.size(); i++) {          for (int i = 0; i < GetRack()->resLFOs.size(); i++) {
456              LFOv2Unit* lfo = GetRack()->resLFOs[i];              LFOv2Unit* lfo = GetRack()->resLFOs[i];
457              if (!lfo->Active()) continue;              if (!lfo->Active()) continue;
458                            
459              val += lfo->GetLevel() * lfo->pLfoInfo->resonance;              float f = lfo->suResOnCC.Active() ? lfo->suResOnCC.GetLevel() : 0;
460                val += lfo->GetLevel() * (lfo->pLfoInfo->resonance + f);
461          }          }
462                    
463          return val;          return val;
# Line 407  namespace LinuxSampler { namespace sfz { Line 470  namespace LinuxSampler { namespace sfz {
470              LFOv2Unit* lfo = GetRack()->panLFOs[i];              LFOv2Unit* lfo = GetRack()->panLFOs[i];
471              if (!lfo->Active()) continue;              if (!lfo->Active()) continue;
472                            
473              pan += lfo->GetLevel() * lfo->pLfoInfo->pan;              float f = lfo->suPanOnCC.Active() ? lfo->suPanOnCC.GetLevel() : 0;
474                pan += lfo->GetLevel() * (lfo->pLfoInfo->pan + f);
475          }          }
476                    
477          if(pan < -100) return -100;          if(pan < -100) return -100;
# Line 419  namespace LinuxSampler { namespace sfz { Line 483  namespace LinuxSampler { namespace sfz {
483            
484      SfzSignalUnitRack::SfzSignalUnitRack(Voice* voice)      SfzSignalUnitRack::SfzSignalUnitRack(Voice* voice)
485          : SignalUnitRack(MaxUnitCount), pVoice(voice), suEndpoint(this), suVolEG(this), suFilEG(this), suPitchEG(this),          : SignalUnitRack(MaxUnitCount), pVoice(voice), suEndpoint(this), suVolEG(this), suFilEG(this), suPitchEG(this),
486          EGs(maxEgCount), volEGs(maxEgCount), pitchEGs(maxEgCount), suVolOnCC(this),          EGs(maxEgCount), volEGs(maxEgCount), pitchEGs(maxEgCount), filEGs(maxEgCount), resEGs(maxEgCount), suVolOnCC(this),
487          suAmpLFO(this), suPitchLFO(this), suFilLFO(this),          suAmpLFO(this), suPitchLFO(this), suFilLFO(this),
488          LFOs(maxLfoCount), pitchLFOs(maxLfoCount), filLFOs(maxLfoCount), resLFOs(maxLfoCount), panLFOs(maxLfoCount)          LFOs(maxLfoCount), volLFOs(maxLfoCount), pitchLFOs(maxLfoCount),
489            filLFOs(maxLfoCount), resLFOs(maxLfoCount), panLFOs(maxLfoCount)
490      {      {
491          suEndpoint.pVoice = suVolEG.pVoice = suFilEG.pVoice = suPitchEG.pVoice = voice;          suEndpoint.pVoice = suVolEG.pVoice = suFilEG.pVoice = suPitchEG.pVoice = voice;
492          suAmpLFO.pVoice = suPitchLFO.pVoice = suFilLFO.pVoice = suVolOnCC.pVoice = voice;          suAmpLFO.pVoice = suPitchLFO.pVoice = suFilLFO.pVoice = suVolOnCC.pVoice = voice;
493          suPitchLFO.suDepthCC.pVoice = suPitchLFO.suFadeEG.pVoice = suPitchLFO.suFreqOnCC.pVoice = voice;          suPitchLFO.suDepthOnCC.pVoice = suPitchLFO.suFadeEG.pVoice = suPitchLFO.suFreqOnCC.pVoice = voice;
494          suFilLFO.suFadeEG.pVoice = suFilLFO.suFreqOnCC.pVoice = voice;          suFilLFO.suFadeEG.pVoice = suFilLFO.suDepthOnCC.pVoice = suFilLFO.suFreqOnCC.pVoice = voice;
495          suAmpLFO.suFadeEG.pVoice = suAmpLFO.suFreqOnCC.pVoice = voice;          suAmpLFO.suFadeEG.pVoice = suAmpLFO.suDepthOnCC.pVoice = suAmpLFO.suFreqOnCC.pVoice = voice;
496                    
497          for (int i = 0; i < EGs.capacity(); i++) {          for (int i = 0; i < EGs.capacity(); i++) {
498              EGs[i] = new EGv2Unit(this);              EGs[i] = new EGv2Unit(this);
499              EGs[i]->pVoice = voice;              EGs[i]->pVoice = voice;
500                EGs[i]->suAmpOnCC.pVoice = voice;
501                EGs[i]->suVolOnCC.pVoice = voice;
502                EGs[i]->suPitchOnCC.pVoice = voice;
503                EGs[i]->suCutoffOnCC.pVoice = voice;
504                EGs[i]->suResOnCC.pVoice = voice;
505          }          }
506                    
507          for (int i = 0; i < LFOs.capacity(); i++) {          for (int i = 0; i < LFOs.capacity(); i++) {
508              LFOs[i] = new LFOv2Unit(this);              LFOs[i] = new LFOv2Unit(this);
509              LFOs[i]->pVoice = voice;              LFOs[i]->pVoice = voice;
510              LFOs[i]->suFadeEG.pVoice = voice;              LFOs[i]->suFadeEG.pVoice = voice;
511                LFOs[i]->suVolOnCC.pVoice = voice;
512              LFOs[i]->suPitchOnCC.pVoice = voice;              LFOs[i]->suPitchOnCC.pVoice = voice;
513              LFOs[i]->suFreqOnCC.pVoice = voice;              LFOs[i]->suFreqOnCC.pVoice = voice;
514                LFOs[i]->suPanOnCC.pVoice = voice;
515                LFOs[i]->suCutoffOnCC.pVoice = voice;
516                LFOs[i]->suResOnCC.pVoice = voice;
517          }          }
518      }      }
519            
# Line 457  namespace LinuxSampler { namespace sfz { Line 531  namespace LinuxSampler { namespace sfz {
531          EGs.clear();          EGs.clear();
532          volEGs.clear();          volEGs.clear();
533          pitchEGs.clear();          pitchEGs.clear();
534            filEGs.clear();
535            resEGs.clear();
536                    
537          LFOs.clear();          LFOs.clear();
538            volLFOs.clear();
539          pitchLFOs.clear();          pitchLFOs.clear();
540          filLFOs.clear();          filLFOs.clear();
541          resLFOs.clear();          resLFOs.clear();
# Line 475  namespace LinuxSampler { namespace sfz { Line 552  namespace LinuxSampler { namespace sfz {
552                  EGv2Unit eg(this);                  EGv2Unit eg(this);
553                  eg.pEGInfo = &(pRegion->eg[i]);                  eg.pEGInfo = &(pRegion->eg[i]);
554                  EGs.increment()->Copy(eg);                  EGs.increment()->Copy(eg);
555                    EGs[EGs.size() - 1]->suAmpOnCC.SetCCs(pRegion->eg[i].amplitude_oncc);
556                    EGs[EGs.size() - 1]->suVolOnCC.SetCCs(pRegion->eg[i].volume_oncc);
557                    EGs[EGs.size() - 1]->suPitchOnCC.SetCCs(pRegion->eg[i].pitch_oncc);
558                    EGs[EGs.size() - 1]->suCutoffOnCC.SetCCs(pRegion->eg[i].cutoff_oncc);
559                    EGs[EGs.size() - 1]->suResOnCC.SetCCs(pRegion->eg[i].resonance_oncc);
560              } else { std::cerr << "Maximum number of EGs reached!" << std::endl; break; }              } else { std::cerr << "Maximum number of EGs reached!" << std::endl; break; }
561                            
562              if (pRegion->eg[i].amplitude > 0) {              if ( pRegion->eg[i].amplitude > 0 || !pRegion->eg[i].amplitude_oncc.empty() ||
563                     pRegion->eg[i].volume > -145 || !pRegion->eg[i].volume_oncc.empty()
564                ) {
565                  if(volEGs.size() < volEGs.capacity()) volEGs.add(EGs[EGs.size() - 1]);                  if(volEGs.size() < volEGs.capacity()) volEGs.add(EGs[EGs.size() - 1]);
566                  else std::cerr << "Maximum number of EGs reached!" << std::endl;                  else std::cerr << "Maximum number of EGs reached!" << std::endl;
567              }              }
568                
569                if (pRegion->eg[i].cutoff != 0 || !pRegion->eg[i].cutoff_oncc.empty()) {
570                    if(filEGs.size() < filEGs.capacity()) filEGs.add(EGs[EGs.size() - 1]);
571                    else std::cerr << "Maximum number of EGs reached!" << std::endl;
572                }
573                
574                if (pRegion->eg[i].resonance != 0 || !pRegion->eg[i].resonance_oncc.empty()) {
575                    if(resEGs.size() < resEGs.capacity()) resEGs.add(EGs[EGs.size() - 1]);
576                    else std::cerr << "Maximum number of EGs reached!" << std::endl;
577                }
578                
579                if (pRegion->eg[i].pitch != 0 || !pRegion->eg[i].pitch_oncc.empty()) {
580                    if(pitchEGs.size() < pitchEGs.capacity()) pitchEGs.add(EGs[EGs.size() - 1]);
581                    else std::cerr << "Maximum number of EGs reached!" << std::endl;
582                }
583          }          }
584                    
585          if (pRegion->ampeg_sustain == -1) {          if (pRegion->ampeg_sustain == -1) {
# Line 496  namespace LinuxSampler { namespace sfz { Line 595  namespace LinuxSampler { namespace sfz {
595                  LFOv2Unit lfo(this);                  LFOv2Unit lfo(this);
596                  lfo.pLfoInfo = &(pRegion->lfos[i]);                  lfo.pLfoInfo = &(pRegion->lfos[i]);
597                  LFOs.increment()->Copy(lfo);                  LFOs.increment()->Copy(lfo);
598                    LFOs[LFOs.size() - 1]->suVolOnCC.SetCCs(pRegion->lfos[i].volume_oncc);
599                  LFOs[LFOs.size() - 1]->suPitchOnCC.SetCCs(pRegion->lfos[i].pitch_oncc);                  LFOs[LFOs.size() - 1]->suPitchOnCC.SetCCs(pRegion->lfos[i].pitch_oncc);
600                  LFOs[LFOs.size() - 1]->suFreqOnCC.SetCCs(pRegion->lfos[i].freq_oncc);                  LFOs[LFOs.size() - 1]->suFreqOnCC.SetCCs(pRegion->lfos[i].freq_oncc);
601                    LFOs[LFOs.size() - 1]->suPanOnCC.SetCCs(pRegion->lfos[i].pan_oncc);
602                    LFOs[LFOs.size() - 1]->suCutoffOnCC.SetCCs(pRegion->lfos[i].cutoff_oncc);
603                    LFOs[LFOs.size() - 1]->suResOnCC.SetCCs(pRegion->lfos[i].resonance_oncc);
604              } else { std::cerr << "Maximum number of LFOs reached!" << std::endl; break; }              } else { std::cerr << "Maximum number of LFOs reached!" << std::endl; break; }
605                            
606                if (pRegion->lfos[i].volume != 0 || !pRegion->lfos[i].volume_oncc.empty()) {
607                    if(volLFOs.size() < volLFOs.capacity()) volLFOs.add(LFOs[LFOs.size() - 1]);
608                    else std::cerr << "Maximum number of LFOs reached!" << std::endl;
609                }
610                
611              if (pRegion->lfos[i].pitch != 0 || !pRegion->lfos[i].pitch_oncc.empty()) {              if (pRegion->lfos[i].pitch != 0 || !pRegion->lfos[i].pitch_oncc.empty()) {
612                  if(pitchLFOs.size() < pitchLFOs.capacity()) pitchLFOs.add(LFOs[LFOs.size() - 1]);                  if(pitchLFOs.size() < pitchLFOs.capacity()) pitchLFOs.add(LFOs[LFOs.size() - 1]);
613                  else std::cerr << "Maximum number of LFOs reached!" << std::endl;                  else std::cerr << "Maximum number of LFOs reached!" << std::endl;
614              }              }
615                            
616              if (pRegion->lfos[i].cutoff != 0) {              if (pRegion->lfos[i].cutoff != 0 || !pRegion->lfos[i].cutoff_oncc.empty()) {
617                  if(filLFOs.size() < filLFOs.capacity()) filLFOs.add(LFOs[LFOs.size() - 1]);                  if(filLFOs.size() < filLFOs.capacity()) filLFOs.add(LFOs[LFOs.size() - 1]);
618                  else std::cerr << "Maximum number of LFOs reached!" << std::endl;                  else std::cerr << "Maximum number of LFOs reached!" << std::endl;
619              }              }
620                            
621              if (pRegion->lfos[i].resonance != 0) {              if (pRegion->lfos[i].resonance != 0 || !pRegion->lfos[i].resonance_oncc.empty()) {
622                  if(resLFOs.size() < resLFOs.capacity()) resLFOs.add(LFOs[LFOs.size() - 1]);                  if(resLFOs.size() < resLFOs.capacity()) resLFOs.add(LFOs[LFOs.size() - 1]);
623                  else std::cerr << "Maximum number of LFOs reached!" << std::endl;                  else std::cerr << "Maximum number of LFOs reached!" << std::endl;
624              }              }
625                            
626              if (pRegion->lfos[i].pan != 0) {              if (pRegion->lfos[i].pan != 0 || !pRegion->lfos[i].pan_oncc.empty()) {
627                  if(panLFOs.size() < panLFOs.capacity()) panLFOs.add(LFOs[LFOs.size() - 1]);                  if(panLFOs.size() < panLFOs.capacity()) panLFOs.add(LFOs[LFOs.size() - 1]);
628                  else std::cerr << "Maximum number of LFOs reached!" << std::endl;                  else std::cerr << "Maximum number of LFOs reached!" << std::endl;
629              }              }
630          }          }
631                    
632          suPitchLFO.suDepthCC.SetCCs(pRegion->pitchlfo_depthcc);          suPitchLFO.suDepthOnCC.SetCCs(pRegion->pitchlfo_depthcc);
633          suPitchLFO.suFreqOnCC.SetCCs(pRegion->pitchlfo_freqcc);          suPitchLFO.suFreqOnCC.SetCCs(pRegion->pitchlfo_freqcc);
634                    
635            suFilLFO.suDepthOnCC.SetCCs(pRegion->fillfo_depthcc);
636          suFilLFO.suFreqOnCC.SetCCs(pRegion->fillfo_freqcc);          suFilLFO.suFreqOnCC.SetCCs(pRegion->fillfo_freqcc);
637                    
638            suAmpLFO.suDepthOnCC.SetCCs(pRegion->amplfo_depthcc);
639          suAmpLFO.suFreqOnCC.SetCCs(pRegion->amplfo_freqcc);          suAmpLFO.suFreqOnCC.SetCCs(pRegion->amplfo_freqcc);
640                    
641          Units.clear();          Units.clear();
# Line 538  namespace LinuxSampler { namespace sfz { Line 648  namespace LinuxSampler { namespace sfz {
648                    
649          Units.add(&suPitchLFO.suFreqOnCC); // Don't change order! (should be triggered before the LFO)          Units.add(&suPitchLFO.suFreqOnCC); // Don't change order! (should be triggered before the LFO)
650          Units.add(&suPitchLFO);          Units.add(&suPitchLFO);
651          Units.add(&suPitchLFO.suDepthCC);          Units.add(&suPitchLFO.suDepthOnCC);
652          Units.add(&suPitchLFO.suFadeEG);          Units.add(&suPitchLFO.suFadeEG);
653                    
654          Units.add(&suAmpLFO.suFreqOnCC); // Don't change order! (should be triggered before the LFO)          Units.add(&suAmpLFO.suFreqOnCC); // Don't change order! (should be triggered before the LFO)
655            Units.add(&suAmpLFO.suDepthOnCC);
656          Units.add(&suAmpLFO);          Units.add(&suAmpLFO);
657          Units.add(&suAmpLFO.suFadeEG);          Units.add(&suAmpLFO.suFadeEG);
658                    
659          Units.add(&suFilLFO.suFreqOnCC); // Don't change order! (should be triggered before the LFO)          Units.add(&suFilLFO.suFreqOnCC); // Don't change order! (should be triggered before the LFO)
660            Units.add(&suFilLFO.suDepthOnCC);
661          Units.add(&suFilLFO);          Units.add(&suFilLFO);
662          Units.add(&suFilLFO.suFadeEG);          Units.add(&suFilLFO.suFadeEG);
663                    
664          for (int i = 0; i < EGs.size(); i++) {          for (int i = 0; i < EGs.size(); i++) {
665              Units.add(EGs[i]);              Units.add(EGs[i]);
666                Units.add(&(EGs[i]->suAmpOnCC));
667                Units.add(&(EGs[i]->suVolOnCC));
668                Units.add(&(EGs[i]->suPitchOnCC));
669                Units.add(&(EGs[i]->suCutoffOnCC));
670                Units.add(&(EGs[i]->suResOnCC));
671          }          }
672                    
673          for (int i = 0; i < LFOs.size(); i++) {          for (int i = 0; i < LFOs.size(); i++) {
674              Units.add(&(LFOs[i]->suFreqOnCC)); // Don't change order! (should be triggered before the LFO)              Units.add(&(LFOs[i]->suFreqOnCC)); // Don't change order! (should be triggered before the LFO)
675              Units.add(LFOs[i]);              Units.add(LFOs[i]);
676              Units.add(&(LFOs[i]->suFadeEG));              Units.add(&(LFOs[i]->suFadeEG));
677                Units.add(&(LFOs[i]->suVolOnCC));
678              Units.add(&(LFOs[i]->suPitchOnCC));              Units.add(&(LFOs[i]->suPitchOnCC));
679                Units.add(&(LFOs[i]->suPanOnCC));
680                Units.add(&(LFOs[i]->suCutoffOnCC));
681                Units.add(&(LFOs[i]->suResOnCC));
682          }          }
683                    
684          Units.add(&suEndpoint);          Units.add(&suEndpoint);

Legend:
Removed from v.2232  
changed lines
  Added in v.2235

  ViewVC Help
Powered by ViewVC