46 #ifndef __AUEffectBase_h__
47 #define __AUEffectBase_h__
50 #include "AUSilentTimeout.h"
57 class AUEffectBase :
public AUBase {
60 AUEffectBase( AudioUnit audioUnit,
61 bool inProcessesInPlace =
true );
66 virtual ComponentResult Initialize();
69 virtual void Cleanup();
73 virtual ComponentResult Reset( AudioUnitScope inScope,
74 AudioUnitElement inElement);
77 virtual ComponentResult GetPropertyInfo (AudioUnitPropertyID inID,
78 AudioUnitScope inScope,
79 AudioUnitElement inElement,
81 Boolean & outWritable);
84 virtual ComponentResult GetProperty (AudioUnitPropertyID inID,
85 AudioUnitScope inScope,
86 AudioUnitElement inElement,
90 virtual ComponentResult SetProperty(AudioUnitPropertyID inID,
91 AudioUnitScope inScope,
92 AudioUnitElement inElement,
97 virtual bool StreamFormatWritable (AudioUnitScope scope,
98 AudioUnitElement element);
101 virtual ComponentResult ChangeStreamFormat (
102 AudioUnitScope inScope,
103 AudioUnitElement inElement,
104 const CAStreamBasicDescription & inPrevFormat,
105 const CAStreamBasicDescription & inNewFormat);
108 virtual ComponentResult Render(AudioUnitRenderActionFlags & ioActionFlags,
109 const AudioTimeStamp & inTimeStamp,
110 UInt32 inNumberFrames);
118 virtual AUKernelBase * NewKernel() {
return NULL; }
121 virtual OSStatus ProcessBufferLists(
122 AudioUnitRenderActionFlags & ioActionFlags,
123 const AudioBufferList & inBuffer,
124 AudioBufferList & outBuffer,
125 UInt32 inFramesToProcess );
128 void MaintainKernels();
132 Float64 GetSampleRate();
135 UInt32 GetNumberOfChannels();
139 void SetParameter( AudioUnitParameterID paramID,
140 AudioUnitParameterValue value)
142 Globals()->SetParameter(paramID, value);
146 AudioUnitParameterValue GetParameter( AudioUnitParameterID paramID )
148 return Globals()->GetParameter(paramID );
153 bool IsBypassEffect () {
return mBypassEffect; }
159 virtual bool ShouldBypassEffect () {
return IsBypassEffect(); }
163 virtual void SetBypassEffect (
bool inFlag) { mBypassEffect = inFlag; }
166 void SetParamHasSampleRateDependency (
bool inFlag)
168 mParamSRDep = inFlag;
172 bool GetParamHasSampleRateDependency ()
const {
return mParamSRDep; }
175 struct ScheduledProcessParams
177 AudioUnitRenderActionFlags *actionFlags;
178 AudioBufferList *inputBufferList;
179 AudioBufferList *outputBufferList;
182 virtual ComponentResult ProcessScheduledSlice(
void *inUserData,
183 UInt32 inStartFrameInBuffer,
184 UInt32 inSliceFramesToProcess,
185 UInt32 inTotalBufferFrames );
188 bool ProcessesInPlace()
const {
return mProcessesInPlace;};
189 void SetProcessesInPlace(
bool inProcessesInPlace) {mProcessesInPlace = inProcessesInPlace;};
191 typedef std::vector<AUKernelBase *> KernelList;
195 KernelList mKernelList;
198 bool IsInputSilent (AudioUnitRenderActionFlags inActionFlags, UInt32 inFramesToProcess)
200 bool inputSilent = (inActionFlags & kAudioUnitRenderAction_OutputIsSilence) != 0;
203 UInt32 silentTimeoutFrames = UInt32(GetSampleRate() * (GetLatency() + GetTailTime()));
204 mSilentTimeout.Process (inFramesToProcess, silentTimeoutFrames, inputSilent);
215 bool mProcessesInPlace;
218 AUSilentTimeout mSilentTimeout;
229 AUKernelBase(AUEffectBase *inAudioUnit ) :
230 mAudioUnit(inAudioUnit), mIsLastKernel(false) { }
233 virtual ~AUKernelBase() { }
236 virtual void Reset() { }
239 virtual void Process(
const AudioSampleType * inSourceP,
240 AudioSampleType * inDestP,
241 UInt32 inFramesToProcess,
242 UInt32 inNumChannels,
243 bool & ioSilence) = 0;
246 Float64 GetSampleRate()
248 return mAudioUnit->GetSampleRate();
252 AudioUnitParameterValue GetParameter (AudioUnitParameterID paramID)
254 return mAudioUnit->GetParameter(paramID);
257 void SetChannelNum (UInt32 inChan) { mChannelNum = inChan; }
258 UInt32 GetChannelNum () {
return mChannelNum; }
260 bool IsLastKernel()
const {
return mIsLastKernel;};
261 void SetLastKernel(
bool inIsLastKernel) {mIsLastKernel = inIsLastKernel;};
265 AUEffectBase * mAudioUnit;
273 #endif // __AUEffectBase_h__