バージョン3のAudioUnitを作成するためのサンプルコードは、実装がレンダリング処理のためにファンクションブロックを返す必要があることを示しています。このブロックは、チェーン内の前の AxudioUnitのサンプルをpullInputBlock
経由で取得し、処理されたサンプルを出力バッファに供給します。さらにユニットがチェインを下っていない場合、出力バッファをいくつか用意しなければなりません。ここでAudioUnitのサブクラスからのコードの抜粋は以下のとおりです。バージョン3 AudioUnits:internalRenderBlockの最小フレーム数
- (AUInternalRenderBlock)internalRenderBlock {
/*
Capture in locals to avoid ObjC member lookups.
*/
// Specify captured objects are mutable.
__block FilterDSPKernel *state = &_kernel;
__block BufferedInputBus *input = &_inputBus;
return Block_copy(^AUAudioUnitStatus(
AudioUnitRenderActionFlags *actionFlags,
const AudioTimeStamp *timestamp,
AVAudioFrameCount frameCount,
NSInteger outputBusNumber,
AudioBufferList *outputData,
const AURenderEvent *realtimeEventListHead,
AURenderPullInputBlock pullInputBlock) {
...
});
処理はこのブロックを呼び出す前にframeCount
を知る必要がない場合、これは大丈夫ですが、多くのアプリケーションがために、このブロックの前にframeCount
を知る必要がありませんメモリを割り当て、処理パラメータを準備するなど。frameCount
が既知の場合にのみ、frameCount
のサンプルを出力するだけで出力バッファを累積することができます。動作させるには、このフレーム数より大きなサイズで処理を初期化する必要があります。 frameCount
の最小値を指定または取得する方法、または強制的に特定の値にする方法はありますか?オーディオユニットコールバックが可変frameCountsを扱うことができなければならない、IOSの下https://github.com/WildDylan/appleSample/blob/master/AudioUnitV3ExampleABasicAudioUnitExtensionandHostImplementation/FilterDemoFramework/FilterDemo.mm
正しい方向に私を指摘してくれてありがとうが、私はOSXにも興味があります(私はAPIがさまざまなOSで非常に異なっていたことは知らなかった)。 OSX上で動作するアプリケーションのためにこれをどこに設定するのですか? – mondaugen
私が作業している間にこれをここに置いてください:AUDeferredRendererが私を助けることができるようです。 – mondaugen