LoginSignup
25
26

More than 5 years have passed since last update.

Audio Unitのコールバック関数を登録する方法3種の比較

Last updated at Posted at 2013-02-23

Audio Unit で、コールバック関数を登録するための方法が何通りかあって、何だかややこしかったので整理してみました。

AudioUnitSetProperty

まず一番基本的なものである AudioUnitSetProperty から。

AURenderCallbackStruct callbackStruct;
callbackStruct.inputProc = renderCallback;
callbackStruct.inputProcRefCon = &audioDataInfo;
AudioUnitSetProperty(hogeUnit,             // 対象となるAudio Unit
                     kAudioUnitProperty_SetRenderCallback,
                     kAudioUnitScope_Input,     // スコープ
                     0,                         // バスナンバー
                     &callbackStruct,           // AURenderCallBackStruct構造体へのポインタ
                     sizeof(callbackStruct)     // AURenderCallBackStruct構造体のサイズ
                     );

AudioUnitSetProperty は Audio Unit に対して各種プロパティをセットするための関数です。ここでは {対象となるAudio Unit}{スコープ}{バスナンバー} に対して kAudioUnitProperty_SetRenderCallback というプロパティに AURenderCallBackStruct 型の値を指定しています。

引数は多いですが、そのぶん暗黙的な部分がなくてわかりやすいです。

AUGraphSetNodeInputCallback

こちらは AUGraph の特定のノードの入力に対してコールバック関数を指定するための関数。

AURenderCallbackStruct callbackStruct;
callbackStruct.inputProc = renderCallback;
callbackStruct.inputProcRefCon = &audioDataInfo;
AUGraphSetNodeInputCallback(processingGraph,    // 対象となるAUGraph
                            hogeNode,      // 対象となるAUNode
                            0,                  // バスナンバー
                            &callbackStruct     // AURenderCallBackStruct構造体へのポインタ
                            );

暗黙的にスコープは kAudioUnitScope_Input、構造体のサイズは AURenderCallBackStruct のサイズなので、AudioUnitSetProperty と比較するとこれら2つ分の引数が省略されています。

AUGraphAddRenderNotify

こちらは AUGraph がレンダリングを行った際に通知を受けるコールバック関数を登録するための関数。

AUGraphAddRenderNotify(processingGraph,
                       renderCallback,
                       (__bridge void *)(self));

これを使用した場合、AUGraph の最後、たとえば Remote IO Unit でスピーカー出力している場合は、その出力時に通知を受け、コールバックが呼ばれるようになります。

AURenderCallbackStruct 構造体を介さず直接コールバック関数と、コールバック関数で参照するデータ(inputProcRefCon にセットしていたもの)を渡します。

25
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
26