bool SDL_SetAudioIterationCallbacks(SDL_AudioDeviceID devid, SDL_AudioIterationCallback start, SDL_AudioIterationCallback end, void *userdata);
| SDL_AudioDeviceID | devid | オープンしたオーディオデバイス |
| SDL_AudioIterationCallback | start | iterationの開始で呼ばれるコールバック. NULLも可 |
| SDL_AudioIterationCallback | end | iterationの終了で呼ばれるコールバック. NULLも可 |
| void * | userdata | アプリケーションがコールバックに渡すポインタ. NULLも可 |
(bool) 成功のとき真, 失敗のとき偽を戻す. SDL_GetError()を呼んで詳細を知ることができる.
ここでは2つのコールバックを設定できる. 1つはデバイスがバインドしたオーディオストリームの処理を開始しようとしたとき, もう1つはデバイスがその処理を終えたとき呼ばれる.
これらのコールバックは, いつでも, どのスレッドからも実行されうる. アプリケーションのデータへのアクセスを直列化する必要がある場合は, ミューテックスやその他のデバイスの直列化を使用する必要がある.
一般的に, これらのコールバックはオーディオデバイスのスレッドの処理が途中でないことを保証してバインドされた複数のオーディオストリームに適用するために使用する. 通常はSDL_LockAudioStream()によるfiner-grained lockの方がより適している.
これらのコールバックには強い時間の制約があり, 可能な限り処理を少なくしてすぐに戻らなければならない. コールバックの実行が長くなるほど音声の欠落や他の問題を引き起こす危険性が高くなる.
この関数はオーディオデバイスの繰り返し処理の間はブロックする. そのため, 既にある実行しようとしているコールバックは, この関数で新しいコールバックを設定して戻る前に実行される.
物理デバイスにはこれらのコールバックは設定できない. SDL_OpenAudioDevice()で生成した論理デバイスに対してのみ設定できる.
コールバック関数としてNULLを設定すると, 以前のコールバックが無効になる. どちらのコールバックも, NULLにすることも, 同じコールバックにすることもできる.
この関数はどのスレッドからも安全に呼べる.