--- linuxsampler/trunk/src/engines/sfz/Voice.h 2010/02/23 18:32:31 2061 +++ linuxsampler/trunk/src/engines/sfz/Voice.h 2011/08/18 11:32:33 2244 @@ -4,7 +4,7 @@ * * * Copyright (C) 2003, 2004 by Benno Senoner and Christian Schoenebeck * * Copyright (C) 2005 - 2008 Christian Schoenebeck * - * Copyright (C) 2009 - 2010 Christian Schoenebeck and Grigor Iliev * + * Copyright (C) 2009 - 2011 Christian Schoenebeck and Grigor Iliev * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -36,6 +36,7 @@ #include "../gig/SynthesisParam.h" #include "EG.h" #include "EGADSR.h" +#include "SfzSignalUnitRack.h" namespace LinuxSampler { namespace sfz { class Engine; @@ -51,6 +52,8 @@ virtual ~Voice(); void SetOutput(AudioOutputDevice* pAudioOutputDevice); void SetEngine(LinuxSampler::Engine* pEngine); + + virtual void VoiceFreed() { SignalRack.Reset(); } protected: virtual SampleInfo GetSampleInfo(); @@ -61,12 +64,13 @@ virtual float GetReleaseTriggerAttenuation(float noteLength); virtual double GetEG1ControllerValue(uint8_t MIDIKeyVelocity); virtual EGInfo CalculateEG1ControllerInfluence(double eg1ControllerValue); - virtual void TriggerEG1(const EGInfo& egInfo, double velrelease, double velocityAttenuation, uint sampleRate, uint8_t velocity); + virtual void TriggerEG1(const EGInfo& egInfo, double velrelease, double velocityAttenuation, uint sampleRate, uint8_t velocity) { } virtual double GetEG2ControllerValue(uint8_t MIDIKeyVelocity); virtual EGInfo CalculateEG2ControllerInfluence(double eg2ControllerValue); - virtual void InitLFO1(); - virtual void InitLFO2(); - virtual void InitLFO3(); + virtual void TriggerEG2(const EGInfo& egInfo, double velrelease, double velocityAttenuation, uint sampleRate, uint8_t velocity) { } + virtual void InitLFO1() { } + virtual void InitLFO2() { } + virtual void InitLFO3() { } virtual float CalculateCutoffBase(uint8_t MIDIKeyVelocity); virtual float CalculateFinalCutoff(float cutoffBase); virtual uint8_t GetVCFCutoffCtrl(); @@ -76,10 +80,16 @@ virtual double GetVelocityAttenuation(uint8_t MIDIKeyVelocity); virtual double GetVelocityRelease(uint8_t MIDIKeyVelocity); virtual double GetSampleAttenuation(); + virtual void ProcessGroupEvent(RTList::Iterator& itEvent); + virtual void SetSampleStartOffset(); + virtual int GetRAMCacheOffset() { return pRegion->pSample->RAMCacheOffset; } private: EG EG1; EGADSR EGADSR1; + EG EG2; + EGADSR EGADSR2; + SfzSignalUnitRack SignalRack; public: // FIXME: just made public for debugging (sanity check in Engine::RenderAudio()), should be changed to private before the final release // Attributes @@ -94,6 +104,18 @@ void processCrossFadeEvent(RTList::Iterator& itEvent); EngineChannel* GetSfzEngineChannel(); + + friend class CCUnit; + friend class XFInCCUnit; + friend class XFOutCCUnit; + friend class AmpEGUnit; + friend class FilEGUnit; + friend class PitchEGUnit; + friend class PitchLFOUnit; + friend class AmpLFOUnit; + friend class FilLFOUnit; + friend class EndpointUnit; + friend class SfzSignalUnitRack; protected: virtual uint8_t CrossfadeAttenuation(uint8_t& CrossfadeControllerValue) {