Re: Process and Render
Re: Process and Render
- Subject: Re: Process and Render
- From: Aristotel Digenis <email@hidden>
- Date: Tue, 22 Jun 2004 14:49:44 +0100
Thank you for that.
I have had sucess using ProcessBufferList(). This is the first time I am
using bufferlists so I have one question about that.
In inBufferList.mBuffers[0].mData mData is an array correct? So I
should be able to do the following
inBufferList.mBuffers[0].mData[number] = something;
But this does not seem to work. However I can copy mData to a new array
as I have done bellow. For the time being I am working around this by
doing the following:
OSStatus BProc::ProcessBufferLists(AudioUnitRenderActionFlags& iFlags,
const AudioBufferList& inBufferList, AudioBufferList& outBufferList,
UInt32 iFrames)
{
float *W = new float[iFrames];
float *X = new float[iFrames];
float *Y = new float[iFrames];
float *Z = new float[iFrames];
W = (float*) inBufferList.mBuffers[0].mData;
X = (float*) inBufferList.mBuffers[1].mData;
Y = (float*) inBufferList.mBuffers[2].mData;
Z = (float*) inBufferList.mBuffers[3].mData;
for(UInt32 i = 0; i < iFrames; i++)
{
W[i] = W[i] * fValue_Rotate;
X[i] = X[i] * fValue_Rotate;
Y[i] = Y[i] * fValue_Rotate;
Z[i] = Z[i] * fValue_Rotate;
}
outBufferList.mBuffers[0].mData = W;
outBufferList.mBuffers[1].mData = X;
outBufferList.mBuffers[2].mData = Y;
outBufferList.mBuffers[3].mData = Z;
return noErr;
}
Is there a way avoid the extra code and read a specific array slot of a
specific buffer array of a bufferlist? Such as:
inBufferList.mBuffers[0].mData[number] = something;
Thank you...
William Stewart wrote:
>
AudioUnitRender is the API
>
>
In AUBase (from AUDispatch) the API calls Render, which then drills
>
down some levels... Ultimately everything below here is implementation
>
detail
>
>
In AUEffectBase we specialise this some more because most effects
>
process N-N channels = so we introduced the Kernel classes... If you
>
don't want to use Kernels, then you can overide ProcessBufferList (the
>
method in AUEffectBase that calls through to the kernels)
>
>
Bill
>
>
On 21/06/2004, at 2:45 AM, Aristotel Digenis wrote:
>
>
Goodmorning,
>
>
Over the weekend I have gone over the documentation of the SDK and
>
have some more questions.
>
>
It appears that when processing N to N number of channels where
>
there is no interaction between the channels for the processing,
>
then we implement a new AUKernelBase and the processing for each
>
of the N channels happens inside the Kernel. An example of this
>
would be a gain plug-in where we have one slider for
>
amplitude...we can put in 10 channels and we will output 10
>
channels out, all amplified by the same ratio set by the slider.
>
>
If the processing of N to N channels requires that the data from
>
one channel can affect the other channel, then we implement
>
ProcessBufferLists()? This function internally calls
>
AUKernelBases? I have not managed to find enough information on
>
this or how it is implemented.
>
>
Then there is AudioUnitRender() which doesn't seem to be intended
>
for plugins (AUEffectBase type of Audio Units). To add to the
>
confusion i have also come accross Render(), DoRender(),
>
DoRenderBus(), DoRenderSlice()
>
>
Could somebody who does understand the differences and uses help
>
me out please?
>
>
Thank you in advance!!!
>
>
Aristotel Digenis wrote:
>
>
Hello again,
>
>
As I have been using the SDK's SampleEffectUnit example to
>
learn AUs and adapt it to my needs, I have notices that the
>
Process() function is declared within a class inside the
>
SampleEffectUnit class as shown below.
>
>
class SampleEffectUnit : public AUEffectBase
>
{
>
public:
>
SampleEffectUnit(AudioUnit component);
>
virtual AUKernelBase * NewKernel() { return new
>
SampleEffectKernel(this); }
>
virtual ComponentResult GetParameterValueStrings();
>
virtual ComponentResult GetParameterInfo();
>
virtual ComponentResult GetPropertyInfo();
>
virtual ComponentResult GetProperty();
>
virtual ComponentResult GetPresets() const;
>
virtual OSStatus NewFactoryPresetSet ();
>
virtual ComponentResult Version() { return
>
kSampleEffectUnitVersion; }
>
>
protected:
>
class SampleEffectKernel : public AUKernelBase
>
{
>
public:
>
SampleEffectKernel(AUEffectBase *inAudioUnit ):
>
AUKernelBase(inAudioUnit){}
>
>
virtual void Process();
>
virtual void Reset();
>
}; };
>
>
I understand the purpose of the AUKernelBase but then I saw
>
the source code of AirSynth where the Process() function is
>
not declared inside a seperate AUKernel class. Instead the
>
Process function is declared inside the AirySynth class. I
>
tried to move the Process() function of my plug in out of the
>
SampleEffectKernel class and inside the SampleEffectUnit
>
class, but this results in no processing taking place. Does
>
the fact that AirySynth is a MusicDevice make a difference? Do
>
MusicDevices have different processing structure to Effect Units?
>
>
Also, use SetParameter() functions in my constructor to set
>
the initial values of my sliders. This works fine and the
>
sliders do have an effect on the processing. Having read the
>
API documentation I thought it would be better to use
>
Initialize() to set these parameters, and so I declared the
>
Initialize() function after the SampleEffectUnit constructor
>
and moved the SetParameter() functions inside the Initialze()
>
function. This compiles and the sliders/parameters are set
>
just fine. However when the sliders are changed, the
>
processing this does is not affected. Did I misunderstand what
>
the Initialize() function is for?
>
>
Thank you in advance...
>
>
>
--
>
Aristotel Digenis
>
email@hidden
>
http://www.digenis.ws
>
_______________________________________________
>
coreaudio-api mailing list | email@hidden
>
Help/Unsubscribe/Archives:
>
http://www.lists.apple.com/mailman/listinfo/coreaudio-api
>
Do not post admin requests to the list. They will be ignored.
>
>
>
--
>
mailto:email@hidden
>
tel: +1 408 974 4056
>
>
__________________________________________________________________________
>
>
Culture Ship Names:
>
Ravished By The Sheer Implausibility Of That Last Statement [GSV]
>
I said, I've Got A Big Stick [OU]
>
Inappropiate Response [OU]
>
Far Over The Borders Of Insanity And Still Accelerating [Eccentric]
>
__________________________________________________________________________
_______________________________________________
coreaudio-api mailing list | email@hidden
Help/Unsubscribe/Archives:
http://www.lists.apple.com/mailman/listinfo/coreaudio-api
Do not post admin requests to the list. They will be ignored.