bool SDL_SetAudioStreamPutCallback(SDL_AudioStream *stream, SDL_AudioStreamCallback callback, void *userdata);
| SDL_AudioStream * | stream | コールバックを設定するオーディオストリーム |
| SDL_AudioStreamCallback | callback | ストリームにデータを追加したとき呼ばれるコールバック関数 |
| void * | userdata | アプリケーションがコールバックに渡すポインタ |
(bool) 成功のとき真, 失敗のとき偽を戻す.
SDL_GetError()を呼んで詳細を知ることができる.
失敗するのはstreamがNULLの場合のみである.
このコールバックはストリームにデータを追加した後で呼ばれ, コールバックによるデータの変更を可能にしている.
コールバックが呼ばれた最中にSDL_GetAudioStreamData()を呼んでオーディオデータを得ることもできる(任意).
コールバックのadditional_amount引数は, 呼び出し側が渡した未処理の(ストリームの出力形式の)データのおおまかなバイト数であり, 安全のため少なく推定されている場合がある.
この値はストリーム内の既にデータがある場合, 利用可能なデータの量よりも少ない場合がある.
また, ストリームが再サンプリングのためにバッファを維持する必要がある場合, 呼び出し側が渡した量よりも少ないことがある.
そのため, コールバックは0バイトを渡すことや, 呼び出されるたびに渡す量が異なる可能性がある.
コールバックは, 現在の呼び出して渡された量の代わりに, SDL_GetAudioStreamAvailableでストリームから読み出し可能な総量を得ることもできる.
このコールバックで全てのデータを読み出す必要はない. 少ない, またはまったく読み出さないことも認められる. 読み出されなかったデータは, 単に次のアクセスのためにストリーム内に残る.
オーディオストリームの消去や掃き出しではこのコールバックは呼ばれない.
この関数はストリームのロックを取得するため, 既存の処理中のコールバック(要求と追加)は新しいコールバックを設定する前に処理を完了する.
この関数にNULLを渡すとコールバックは無効になる.
この関数はどのスレッドからも安全に呼べる.