目次 - SDL 3.0 API(機能別) - 再生と録音 - SDL_SetAudioIterationCallbacks

SDL_SetAudioIterationCallbacks

オーディオデバイスの処理の繰り返し時に呼ばれるコールバックを設定する

ヘッダ

SDL3/SDL_audio.h

構文

bool SDL_SetAudioIterationCallbacks(SDL_AudioDeviceID devid, SDL_AudioIterationCallback start, SDL_AudioIterationCallback end, void *userdata);

引数

SDL_AudioDeviceIDdevidオープンしたオーディオデバイス
SDL_AudioIterationCallbackstartiterationの開始で呼ばれるコールバック. NULLも可
SDL_AudioIterationCallbackenditerationの終了で呼ばれるコールバック. NULLも可
void *userdataアプリケーションがコールバックに渡すポインタ. NULLも可

戻り値

(bool) 成功のとき真, 失敗のとき偽を戻す. SDL_GetError()を呼んで詳細を知ることができる.

詳細

ここでは2つのコールバックを設定できる. 1つはデバイスがバインドしたオーディオストリームの処理を開始しようとしたとき, もう1つはデバイスがその処理を終えたとき呼ばれる.

これらのコールバックは, いつでも, どのスレッドからも実行されうる. アプリケーションのデータへのアクセスを直列化する必要がある場合は, ミューテックスやその他のデバイスの直列化を使用する必要がある.

一般的に, これらのコールバックはオーディオデバイスのスレッドの処理が途中でないことを保証してバインドされた複数のオーディオストリームに適用するために使用する. 通常はSDL_LockAudioStream()によるfiner-grained lockの方がより適している.

これらのコールバックには強い時間の制約があり, 可能な限り処理を少なくしてすぐに戻らなければならない. コールバックの実行が長くなるほど音声の欠落や他の問題を引き起こす危険性が高くなる.

この関数はオーディオデバイスの繰り返し処理の間はブロックする. そのため, 既にある実行しようとしているコールバックは, この関数で新しいコールバックを設定して戻る前に実行される.

物理デバイスにはこれらのコールバックは設定できない. SDL_OpenAudioDevice()で生成した論理デバイスに対してのみ設定できる.

コールバック関数としてNULLを設定すると, 以前のコールバックが無効になる. どちらのコールバックも, NULLにすることも, 同じコールバックにすることもできる.

スレッドセーフ

この関数はどのスレッドからも安全に呼べる.

バージョン

SDL 3.4.0以降

SDL Wikiへのリンク

SDL_SetAudioIterationCallbacks - SDL Wiki