/[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 2226 by iliev, Wed Aug 3 09:12:09 2011 UTC revision 2227 by iliev, Wed Aug 3 17:11:40 2011 UTC
# Line 99  namespace LinuxSampler { namespace sfz { Line 99  namespace LinuxSampler { namespace sfz {
99      }      }
100            
101            
102      LFOUnit::LFOUnit(const LFOUnit& Unit): SfzSignalUnit(Unit), suFadeEG(static_cast<SfzSignalUnitRack*>(Unit.pRack)) {      LFOUnit::LFOUnit(SfzSignalUnitRack* rack)
103            : SfzSignalUnit(rack), pLfoInfo(NULL), pLFO(NULL),
104              suFadeEG(rack), suFreqOnCC(rack, this)
105        { }
106        
107        LFOUnit::LFOUnit(const LFOUnit& Unit)
108            : SfzSignalUnit(Unit), suFadeEG(static_cast<SfzSignalUnitRack*>(Unit.pRack)),
109              suFreqOnCC(static_cast<SfzSignalUnitRack*>(Unit.pRack), this)
110        {
111          Copy(Unit);          Copy(Unit);
112      }      }
113    
# Line 132  namespace LinuxSampler { namespace sfz { Line 140  namespace LinuxSampler { namespace sfz {
140          }          }
141      }      }
142            
143        void LFOUnit::ValueChanged(CCSignalUnit* pUnit) {
144            pLFO->SetFrequency(suFreqOnCC.GetLevel() + pLfoInfo->freq, GetSampleRate());
145        }
146        
147        
148      void LFOv1Unit::Trigger() {      void LFOv1Unit::Trigger() {
149          LFOUnit::Trigger();          LFOUnit::Trigger();
150                    
151          lfo.trigger (          lfo.trigger (
152              pLfoInfo->freq,              pLfoInfo->freq + suFreqOnCC.GetLevel(),
153              start_level_mid,              start_level_mid,
154              1, 0, false, GetSampleRate()              1, 0, false, GetSampleRate()
155          );          );
# Line 166  namespace LinuxSampler { namespace sfz { Line 179  namespace LinuxSampler { namespace sfz {
179          else pLFO = lfos[pLfoInfo->wave];          else pLFO = lfos[pLfoInfo->wave];
180                    
181          pLFO->Trigger (          pLFO->Trigger (
182              pLfoInfo->freq,              pLfoInfo->freq + suFreqOnCC.GetLevel(),
183              start_level_mid,              start_level_mid,
184              1, 0, false, GetSampleRate()              1, 0, false, GetSampleRate()
185          );          );
# Line 210  namespace LinuxSampler { namespace sfz { Line 223  namespace LinuxSampler { namespace sfz {
223          LFOv1Unit::Trigger();          LFOv1Unit::Trigger();
224      }      }
225            
226      CCUnit::CCUnit(SfzSignalUnitRack* rack): CCSignalUnit(rack) { }      CCUnit::CCUnit(SfzSignalUnitRack* rack, Listener* l): CCSignalUnit(rack, l) {
227            pVoice = NULL;
228        }
229            
230      void CCUnit::Trigger() {      void CCUnit::Trigger() {
231          for (int i = 0; i < Ctrls.size(); i++) {          for (int i = 0; i < Ctrls.size(); i++) {
# Line 351  namespace LinuxSampler { namespace sfz { Line 366  namespace LinuxSampler { namespace sfz {
366      {      {
367          suEndpoint.pVoice = suVolEG.pVoice = suFilEG.pVoice = suPitchEG.pVoice = voice;          suEndpoint.pVoice = suVolEG.pVoice = suFilEG.pVoice = suPitchEG.pVoice = voice;
368          suAmpLFO.pVoice = suPitchLFO.pVoice = suFilLFO.pVoice = voice;          suAmpLFO.pVoice = suPitchLFO.pVoice = suFilLFO.pVoice = voice;
369          suPitchLFO.suDepthCC.pVoice = suPitchLFO.suFadeEG.pVoice = voice;          suPitchLFO.suDepthCC.pVoice = suPitchLFO.suFadeEG.pVoice = suPitchLFO.suFreqOnCC.pVoice = voice;
370          suFilLFO.suFadeEG.pVoice = voice;          suFilLFO.suFadeEG.pVoice = suFilLFO.suFreqOnCC.pVoice = voice;
371          suAmpLFO.suFadeEG.pVoice = voice;          suAmpLFO.suFadeEG.pVoice = suAmpLFO.suFreqOnCC.pVoice = voice;
372                    
373          for (int i = 0; i < EGs.capacity(); i++) {          for (int i = 0; i < EGs.capacity(); i++) {
374              EGs[i] = new EGv2Unit(this);              EGs[i] = new EGv2Unit(this);
# Line 365  namespace LinuxSampler { namespace sfz { Line 380  namespace LinuxSampler { namespace sfz {
380              LFOs[i]->pVoice = voice;              LFOs[i]->pVoice = voice;
381              LFOs[i]->suFadeEG.pVoice = voice;              LFOs[i]->suFadeEG.pVoice = voice;
382              LFOs[i]->suPitchOnCC.pVoice = voice;              LFOs[i]->suPitchOnCC.pVoice = voice;
383                LFOs[i]->suFreqOnCC.pVoice = voice;
384          }          }
385      }      }
386            
# Line 420  namespace LinuxSampler { namespace sfz { Line 436  namespace LinuxSampler { namespace sfz {
436                  lfo.pLfoInfo = &(pRegion->lfos[i]);                  lfo.pLfoInfo = &(pRegion->lfos[i]);
437                  LFOs.increment()->Copy(lfo);                  LFOs.increment()->Copy(lfo);
438                  LFOs[LFOs.size() - 1]->suPitchOnCC.SetCCs(pRegion->lfos[i].pitch_oncc);                  LFOs[LFOs.size() - 1]->suPitchOnCC.SetCCs(pRegion->lfos[i].pitch_oncc);
439                    LFOs[LFOs.size() - 1]->suFreqOnCC.SetCCs(pRegion->lfos[i].freq_oncc);
440              } else { std::cerr << "Maximum number of LFOs reached!" << std::endl; break; }              } else { std::cerr << "Maximum number of LFOs reached!" << std::endl; break; }
441                            
442              if (pRegion->lfos[i].pitch != 0 || !pRegion->lfos[i].pitch_oncc.empty()) {              if (pRegion->lfos[i].pitch != 0 || !pRegion->lfos[i].pitch_oncc.empty()) {
# Line 444  namespace LinuxSampler { namespace sfz { Line 461  namespace LinuxSampler { namespace sfz {
461          }          }
462                    
463          suPitchLFO.suDepthCC.SetCCs(pRegion->pitchlfo_depthcc);          suPitchLFO.suDepthCC.SetCCs(pRegion->pitchlfo_depthcc);
464            suPitchLFO.suFreqOnCC.SetCCs(pRegion->pitchlfo_freqcc);
465            
466            suFilLFO.suFreqOnCC.SetCCs(pRegion->fillfo_freqcc);
467            
468            suAmpLFO.suFreqOnCC.SetCCs(pRegion->amplfo_freqcc);
469                    
470          Units.clear();          Units.clear();
471                    
472          Units.add(&suVolEG);          Units.add(&suVolEG);
473          Units.add(&suFilEG);          Units.add(&suFilEG);
474          Units.add(&suPitchEG);          Units.add(&suPitchEG);
475            
476            Units.add(&suPitchLFO.suFreqOnCC); // Don't change order! (should be triggered before the LFO)
477          Units.add(&suPitchLFO);          Units.add(&suPitchLFO);
478          Units.add(&suPitchLFO.suDepthCC);          Units.add(&suPitchLFO.suDepthCC);
479          Units.add(&suPitchLFO.suFadeEG);          Units.add(&suPitchLFO.suFadeEG);
480            
481            Units.add(&suAmpLFO.suFreqOnCC); // Don't change order! (should be triggered before the LFO)
482          Units.add(&suAmpLFO);          Units.add(&suAmpLFO);
483          Units.add(&suAmpLFO.suFadeEG);          Units.add(&suAmpLFO.suFadeEG);
484            
485            Units.add(&suFilLFO.suFreqOnCC); // Don't change order! (should be triggered before the LFO)
486          Units.add(&suFilLFO);          Units.add(&suFilLFO);
487          Units.add(&suFilLFO.suFadeEG);          Units.add(&suFilLFO.suFadeEG);
488                    
# Line 463  namespace LinuxSampler { namespace sfz { Line 491  namespace LinuxSampler { namespace sfz {
491          }          }
492                    
493          for (int i = 0; i < LFOs.size(); i++) {          for (int i = 0; i < LFOs.size(); i++) {
494                Units.add(&(LFOs[i]->suFreqOnCC)); // Don't change order! (should be triggered before the LFO)
495              Units.add(LFOs[i]);              Units.add(LFOs[i]);
496              Units.add(&(LFOs[i]->suFadeEG));              Units.add(&(LFOs[i]->suFadeEG));
497              Units.add(&(LFOs[i]->suPitchOnCC));              Units.add(&(LFOs[i]->suPitchOnCC));

Legend:
Removed from v.2226  
changed lines
  Added in v.2227

  ViewVC Help
Powered by ViewVC