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

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

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

revision 2218 by iliev, Thu Jul 28 08:05:57 2011 UTC revision 2221 by iliev, Thu Jul 28 17:17:42 2011 UTC
# Line 26  Line 26 
26  #include "../common/SignalUnitRack.h"  #include "../common/SignalUnitRack.h"
27  #include "EG.h"  #include "EG.h"
28  #include "EGADSR.h"  #include "EGADSR.h"
29    #include "../common/AbstractVoice.h"
30    
31  namespace LinuxSampler { namespace sfz {  namespace LinuxSampler { namespace sfz {
32      const int MaxUnitCount = 1000;      const int MaxUnitCount = 1000;
# Line 52  namespace LinuxSampler { namespace sfz { Line 53  namespace LinuxSampler { namespace sfz {
53      };      };
54            
55      template <class T>      template <class T>
56      class EGUnit : public SfzSignalUnit {      class EGUnit: public SfzSignalUnit {
57          public:          public:
58              ::sfz::EG* pEGInfo;              ::sfz::EG* pEGInfo;
59              T EG;              T EG;
60    
61              EGUnit(SfzSignalUnitRack* rack): SfzSignalUnit(rack), pEGInfo(NULL) { }              EGUnit(SfzSignalUnitRack* rack): SfzSignalUnit(rack), pEGInfo(NULL) { }
62              EGUnit(const EGUnit& Unit): SfzSignalUnit(Unit.pRack) { Copy(Unit); }              EGUnit(const EGUnit& Unit): SfzSignalUnit(Unit) { Copy(Unit); }
63              void operator=(const EGUnit& Unit) { Copy(Unit); }              void operator=(const EGUnit& Unit) { Copy(Unit); }
64                            
65              void Copy(const EGUnit& Unit) {              void Copy(const EGUnit& Unit) {
# Line 68  namespace LinuxSampler { namespace sfz { Line 69  namespace LinuxSampler { namespace sfz {
69              }              }
70    
71              virtual bool  Active() { return EG.active(); }              virtual bool  Active() { return EG.active(); }
72              virtual float GetLevel() { return EG.getLevel(); }              virtual float GetLevel() { return DelayStage() ? 0 : EG.getLevel(); }
73                            
74              virtual void EnterReleaseStage() { EG.update(EG::event_release, GetSampleRate()); }              virtual void EnterReleaseStage() { EG.update(EG::event_release, GetSampleRate()); }
75              virtual void CancelRelease() { EG.update(EG::event_cancel_release, GetSampleRate()); }              virtual void CancelRelease() { EG.update(EG::event_cancel_release, GetSampleRate()); }
# Line 103  namespace LinuxSampler { namespace sfz { Line 104  namespace LinuxSampler { namespace sfz {
104            
105      class EGv1Unit: public EGUnit<EGADSR> {      class EGv1Unit: public EGUnit<EGADSR> {
106          public:          public:
107              EGv1Unit(SfzSignalUnitRack* rack): EGUnit<EGADSR>(rack) { }              int depth;
108                EGv1Unit(SfzSignalUnitRack* rack): EGUnit<EGADSR>(rack), depth(0) { }
109              virtual void Trigger();              virtual void Trigger();
110      };      };
111            
# Line 113  namespace LinuxSampler { namespace sfz { Line 115  namespace LinuxSampler { namespace sfz {
115              virtual void Trigger();              virtual void Trigger();
116      };      };
117            
118        class PitchEGUnit: public EGv1Unit {
119            public:
120                PitchEGUnit(SfzSignalUnitRack* rack): EGv1Unit(rack) { }
121                virtual void Trigger();
122        };
123        
124        class LFOUnit: public SfzSignalUnit {
125            public:
126                ::sfz::LFO* pLfoInfo;
127                LFOSigned lfo;
128                
129                LFOUnit(SfzSignalUnitRack* rack): SfzSignalUnit(rack), pLfoInfo(NULL), lfo(1200.0f) { }
130                LFOUnit(const LFOUnit& Unit): SfzSignalUnit(Unit), lfo(1200.0f) { Copy(Unit); }
131                void operator=(const LFOUnit& Unit) { Copy(Unit); }
132                
133                void Copy(const LFOUnit& Unit) {
134                    pLfoInfo = Unit.pLfoInfo;
135                    
136                    SfzSignalUnit::Copy(Unit);
137                }
138                
139                virtual bool  Active() { return true; }
140                virtual void  Trigger();
141                virtual void  Increment();
142                virtual float GetLevel() { return Level; }
143        };
144        
145        class LFOv1Unit: public LFOUnit {
146            public:
147                ::sfz::LFO lfoInfo;
148                
149                LFOv1Unit(SfzSignalUnitRack* rack): LFOUnit(rack) { pLfoInfo = &lfoInfo; }
150                
151                virtual void Trigger();
152        };
153        
154        class LFOv2Unit: public LFOUnit {
155            public:
156                LFOv2Unit(SfzSignalUnitRack* rack): LFOUnit(rack) { }
157                
158                virtual void Trigger();
159        };
160        
161        class AmpLFOUnit: public LFOv1Unit {
162            public:
163                AmpLFOUnit(SfzSignalUnitRack* rack): LFOv1Unit(rack) { }
164                
165                virtual void Trigger();
166        };
167        
168        class PitchLFOUnit: public LFOv1Unit {
169            public:
170                PitchLFOUnit(SfzSignalUnitRack* rack): LFOv1Unit(rack) { }
171                
172                virtual void Trigger();
173        };
174        
175        class FilLFOUnit: public LFOv1Unit {
176            public:
177                FilLFOUnit(SfzSignalUnitRack* rack): LFOv1Unit(rack) { }
178                
179                virtual void Trigger();
180        };
181        
182            
183            
184      class EndpointUnit : public EndpointSignalUnit {      class EndpointUnit : public EndpointSignalUnit {
# Line 130  namespace LinuxSampler { namespace sfz { Line 196  namespace LinuxSampler { namespace sfz {
196              virtual float GetFilterCutoff();              virtual float GetFilterCutoff();
197              virtual float GetPitch();              virtual float GetPitch();
198              virtual float GetResonance();              virtual float GetResonance();
199                virtual float GetPan();
200                            
201              SfzSignalUnitRack* const GetRack();              SfzSignalUnitRack* const GetRack();
202                
203                virtual float CalculateResonance(float res) {
204                    return GetResonance() + res;
205                }
206      };      };
207            
208            
# Line 139  namespace LinuxSampler { namespace sfz { Line 210  namespace LinuxSampler { namespace sfz {
210          private:          private:
211              EndpointUnit  suEndpoint;              EndpointUnit  suEndpoint;
212              EGv1Unit      suVolEG;              EGv1Unit      suVolEG;
213                PitchEGUnit   suPitchEG;
214                
215                AmpLFOUnit   suAmpLFO;
216                PitchLFOUnit suPitchLFO;
217                FilLFOUnit   suFilLFO;
218                            
219              FixedArray<EGv2Unit*> EGs;              FixedArray<EGv2Unit*> EGs;
220                            
# Line 148  namespace LinuxSampler { namespace sfz { Line 224  namespace LinuxSampler { namespace sfz {
224              // used for optimization - contains only the ones that are modulating pitch              // used for optimization - contains only the ones that are modulating pitch
225              FixedArray<EGv2Unit*> pitchEGs;              FixedArray<EGv2Unit*> pitchEGs;
226                            
227                
228                FixedArray<LFOv2Unit*> LFOs;
229                
230                // used for optimization - contains only the ones that are modulating filter cutoff
231                FixedArray<LFOv2Unit*> filLFOs;
232                
233                // used for optimization - contains only the ones that are modulating resonance
234                FixedArray<LFOv2Unit*> resLFOs;
235                
236                // used for optimization - contains only the ones that are modulating pan
237                FixedArray<LFOv2Unit*> panLFOs;
238                
239    
240          public:          public:
241              Voice* const pVoice;              Voice* const pVoice;

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

  ViewVC Help
Powered by ViewVC