/*! @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); }