Пример #1
0
/*! @method Render */
OSStatus 	AUPannerBase::BypassRender(AudioUnitRenderActionFlags &		ioActionFlags,
									const AudioTimeStamp &			inTimeStamp,
									UInt32							inNumberFrames)
{
	AudioUnitRenderActionFlags xflags = 0;
	OSStatus result = PullInput(0, xflags, inTimeStamp, inNumberFrames);
	if (result) return false;
	bool isSilent = xflags & kAudioUnitRenderAction_OutputIsSilence;

	AudioBufferList& outputBufferList = GetOutput(0)->GetBufferList();
	AUBufferList::ZeroBuffer(outputBufferList);
	
	if (!isSilent) 
	{
		UInt32 inChannels = GetNumberOfInputChannels();
		UInt32 outChannels = GetNumberOfOutputChannels();
		Float32* bypass = mBypassMatrix();
		for (UInt32 outChan = 0; outChan < outChannels; ++outChan)
		{
			float* outData = GetOutput(0)->GetChannelData(outChan);	
			
			for (UInt32 inChan = 0; inChan < inChannels; ++inChan)
			{
				float* inData = GetInput(0)->GetChannelData(inChan);
				float *amp = bypass + (inChan * outChannels + outChan);
				vDSP_vsma(inData, 1, amp, outData, 1, outData, 1, inNumberFrames);
			}
		}
	}
    return noErr;
}
OSStatus 	SonogramViewDemo::Render(	AudioUnitRenderActionFlags		&ioActionFlags,
												const AudioTimeStamp &			inTimeStamp,
												UInt32							inFramesToProcess )
{
	UInt32 actionFlags = 0;
	OSStatus err = PullInput(0, actionFlags, inTimeStamp, inFramesToProcess);
	if (err) return err;
	
	AUInputElement* inputBus = GetInput(0);
	AUOutputElement* outputBus = GetOutput(0);	
	outputBus->PrepareBuffer(inFramesToProcess); // prepare the output buffer list	
	AudioBufferList& inputBufList = inputBus->GetBufferList();
	
	if (
		mSpectralProcessor->ProcessForwards(inFramesToProcess, &inputBufList)
	){
		
		
		AudioBufferList* sdBufferList = &mSpectralDataBufferList->GetModifiableBufferList(); 
		mSpectralProcessor->GetMagnitude(sdBufferList, mMinAmp, mMaxAmp);
		// copy mNumBins of numbers out
			
		SampleTime s = (SampleTime) (mRenderStamp.mSampleTime);
		mSpectrumBuffer->Store(sdBufferList, 1, s);
		
		mRenderStamp.mSampleTime += 1; 
	}			
	return AUEffectBase::Render(ioActionFlags, inTimeStamp, inFramesToProcess);

}