32 |
#include "../common/SineLFO.h" |
#include "../common/SineLFO.h" |
33 |
|
|
34 |
namespace LinuxSampler { namespace sfz { |
namespace LinuxSampler { namespace sfz { |
35 |
const int MaxUnitCount = 1000; |
const int MaxUnitCount = 200; |
36 |
const int maxEgCount = 100; // Maximum number of v2 envelope generators |
const int maxEgCount = 30; // Maximum number of v2 envelope generators |
37 |
const int maxLfoCount = 100; // Maximum number of v2 LFOs |
const int maxLfoCount = 30; // Maximum number of v2 LFOs |
38 |
|
|
39 |
class Voice; |
class Voice; |
40 |
class SfzSignalUnitRack; |
class SfzSignalUnitRack; |
70 |
|
|
71 |
virtual void AddSmoothCC(uint8_t Controller, float Influence, short int Curve, float Smooth); |
virtual void AddSmoothCC(uint8_t Controller, float Influence, short int Curve, float Smooth); |
72 |
|
|
73 |
inline int GetCurveCount(); |
int GetCurveCount(); |
74 |
inline ::sfz::Curve* GetCurve(int idx); |
::sfz::Curve* GetCurve(int idx); |
75 |
|
|
76 |
double GetSampleRate(); |
double GetSampleRate(); |
77 |
}; |
}; |
90 |
|
|
91 |
class SmoothCCUnit: public CurveCCUnit { |
class SmoothCCUnit: public CurveCCUnit { |
92 |
protected: |
protected: |
93 |
Smoother Smoothers[128]; |
RTList<Smoother>* pSmoothers; |
94 |
public: |
public: |
95 |
SmoothCCUnit(SfzSignalUnitRack* rack, Listener* l = NULL): CurveCCUnit(rack, l) { } |
SmoothCCUnit(SfzSignalUnitRack* rack, Listener* l = NULL): CurveCCUnit(rack, l), pSmoothers(NULL) { } |
96 |
|
virtual ~SmoothCCUnit(); |
97 |
|
|
98 |
virtual void AddSmoothCC(uint8_t Controller, float Influence, short int Curve, float Smooth); |
virtual void AddSmoothCC(uint8_t Controller, float Influence, short int Curve, float Smooth); |
99 |
|
virtual void RemoveAllCCs() { CurveCCUnit::RemoveAllCCs(); pSmoothers->clear(); } |
100 |
|
virtual void InitCCList(Pool<CC>* pCCPool, Pool<Smoother>* pSmootherPool); |
101 |
|
|
102 |
|
void InitSmoothers(Pool<Smoother>* pSmootherPool); |
103 |
}; |
}; |
104 |
|
|
105 |
|
|
107 |
public: |
public: |
108 |
XFInCCUnit(SfzSignalUnitRack* rack, Listener* l = NULL): CCUnit(rack, l) { } |
XFInCCUnit(SfzSignalUnitRack* rack, Listener* l = NULL): CCUnit(rack, l) { } |
109 |
|
|
110 |
virtual bool Active() { return Ctrls.size() > 0; } |
virtual bool Active() { return !pCtrls->isEmpty(); } |
111 |
virtual void Calculate(); |
virtual void Calculate(); |
112 |
virtual void SetCrossFadeCCs(::sfz::Array<int>& loCCs, ::sfz::Array<int>& hiCCs); |
virtual void SetCrossFadeCCs(::sfz::Array<int>& loCCs, ::sfz::Array<int>& hiCCs); |
113 |
}; |
}; |
272 |
SfzSignalUnit::Copy(Unit); |
SfzSignalUnit::Copy(Unit); |
273 |
} |
} |
274 |
|
|
|
virtual bool Active() { return pLfoInfo->freq > 0; } |
|
275 |
virtual void Trigger(); |
virtual void Trigger(); |
276 |
virtual void Increment(); |
virtual void Increment(); |
277 |
virtual float GetLevel() { return Level; } |
virtual float GetLevel() { return Level; } |
278 |
virtual void ValueChanged(CCSignalUnit* pUnit); |
|
279 |
|
// CCSignalUnit::Listener interface implementation |
280 |
|
virtual void ValueChanged(CCSignalUnit* pUnit); |
281 |
}; |
}; |
282 |
|
|
283 |
class LFOv1Unit: public LFOUnit { |
class LFOv1Unit: public LFOUnit { |
315 |
LFOv2Unit(SfzSignalUnitRack* rack); |
LFOv2Unit(SfzSignalUnitRack* rack); |
316 |
|
|
317 |
virtual void Trigger(); |
virtual void Trigger(); |
318 |
|
virtual bool Active() { return true; } |
319 |
}; |
}; |
320 |
|
|
321 |
class AmpLFOUnit: public LFOv1Unit { |
class AmpLFOUnit: public LFOv1Unit { |
439 |
virtual void Trigger(); |
virtual void Trigger(); |
440 |
virtual void EnterFadeOutStage(); |
virtual void EnterFadeOutStage(); |
441 |
|
|
442 |
|
/** Called when the engine is set and the engine's pools are ready to use. */ |
443 |
|
void InitRTLists(); |
444 |
|
|
445 |
|
/** Invoked when the voice gone inactive. */ |
446 |
|
void Reset(); |
447 |
|
|
448 |
friend class EndpointUnit; |
friend class EndpointUnit; |
449 |
}; |
}; |
450 |
}} // namespace LinuxSampler::sfz |
}} // namespace LinuxSampler::sfz |