--- linuxsampler/trunk/src/engines/sf2/Voice.h 2011/07/09 16:44:27 2203 +++ linuxsampler/trunk/src/engines/sf2/Voice.h 2011/07/11 17:52:01 2205 @@ -37,6 +37,7 @@ #include "../common/VoiceBase.h" #include "../gig/SynthesisParam.h" #include "../sfz/EGADSR.h" +#include "SF2SignalUnitRack.h" namespace LinuxSampler { namespace sf2 { class Engine; @@ -52,6 +53,7 @@ virtual ~Voice(); void SetOutput(AudioOutputDevice* pAudioOutputDevice); void SetEngine(LinuxSampler::Engine* pEngine); + virtual SignalUnitRack* GetSignalUnitRack(); protected: virtual SampleInfo GetSampleInfo(); @@ -78,11 +80,13 @@ virtual double GetVelocityRelease(uint8_t MIDIKeyVelocity); virtual double GetSampleAttenuation(); virtual void ProcessGroupEvent(RTList::Iterator& itEvent); + virtual void AboutToTrigger(); private: ::LinuxSampler::sfz::EGADSR EG1; ::LinuxSampler::gig::EGADSR EG2; // TODO: use sfz v1 instead of gig ::sf2::Region* pPresetRegion; + SF2SignalUnitRack SignalRack; public: // FIXME: just made public for debugging (sanity check in Engine::RenderAudio()), should be changed to private before the final release // Attributes @@ -98,6 +102,13 @@ EngineChannel* GetSf2EngineChannel(); + friend class EGUnit; + friend class VolEGUnit; + friend class ModEGUnit; + friend class VibLfoUnit; + friend class EndpointUnit; + friend class SF2SignalUnitRack; + protected: virtual uint8_t CrossfadeAttenuation(uint8_t& CrossfadeControllerValue) { /*uint8_t c = std::max(CrossfadeControllerValue, pRegion->AttenuationControllerThreshold);