--- linuxsampler/trunk/src/engines/sfz/SfzSignalUnitRack.h 2011/07/28 08:05:57 2218 +++ linuxsampler/trunk/src/engines/sfz/SfzSignalUnitRack.h 2011/07/28 12:35:49 2219 @@ -26,6 +26,7 @@ #include "../common/SignalUnitRack.h" #include "EG.h" #include "EGADSR.h" +#include "../common/AbstractVoice.h" namespace LinuxSampler { namespace sfz { const int MaxUnitCount = 1000; @@ -52,13 +53,13 @@ }; template - class EGUnit : public SfzSignalUnit { + class EGUnit: public SfzSignalUnit { public: ::sfz::EG* pEGInfo; T EG; EGUnit(SfzSignalUnitRack* rack): SfzSignalUnit(rack), pEGInfo(NULL) { } - EGUnit(const EGUnit& Unit): SfzSignalUnit(Unit.pRack) { Copy(Unit); } + EGUnit(const EGUnit& Unit): SfzSignalUnit(Unit) { Copy(Unit); } void operator=(const EGUnit& Unit) { Copy(Unit); } void Copy(const EGUnit& Unit) { @@ -113,6 +114,34 @@ virtual void Trigger(); }; + class LFOUnit: public SfzSignalUnit { + public: + ::sfz::LFO* pLfoInfo; + LFOSigned lfo; + + LFOUnit(SfzSignalUnitRack* rack): SfzSignalUnit(rack), pLfoInfo(NULL), lfo(1200.0f) { } + LFOUnit(const LFOUnit& Unit): SfzSignalUnit(Unit), lfo(1200.0f) { Copy(Unit); } + void operator=(const LFOUnit& Unit) { Copy(Unit); } + + void Copy(const LFOUnit& Unit) { + pLfoInfo = Unit.pLfoInfo; + + SfzSignalUnit::Copy(Unit); + } + + virtual bool Active() { return true; } + virtual void Trigger(); + virtual void Increment(); + virtual float GetLevel() { return Level; } + }; + + class LFOv2Unit: public LFOUnit { + public: + LFOv2Unit(SfzSignalUnitRack* rack): LFOUnit(rack) { } + + virtual void Trigger(); + }; + class EndpointUnit : public EndpointSignalUnit { @@ -130,8 +159,13 @@ virtual float GetFilterCutoff(); virtual float GetPitch(); virtual float GetResonance(); + virtual float GetPan(); SfzSignalUnitRack* const GetRack(); + + virtual float CalculateResonance(float res) { + return GetResonance() + res; + } }; @@ -148,6 +182,18 @@ // used for optimization - contains only the ones that are modulating pitch FixedArray pitchEGs; + + FixedArray LFOs; + + // used for optimization - contains only the ones that are modulating filter cutoff + FixedArray filLFOs; + + // used for optimization - contains only the ones that are modulating resonance + FixedArray resLFOs; + + // used for optimization - contains only the ones that are modulating pan + FixedArray panLFOs; + public: Voice* const pVoice;