bool SDL_PutAudioStreamDataNoCopy(SDL_AudioStream *stream, const void *buf, int len, SDL_AudioStreamDataCompleteCallback callback, void *userdata);
| SDL_AudioStream * | stream | オーディオデータを追加するストリーム |
| const void * | buf | 追加するオーディオデータへのポインタ |
| int | len | ストリームに書き込むデータのバイト数 |
| SDL_AudioStreamDataCompleteCallback | callback | ストリームがデータを必要としなくなったとき呼ばれるコールバック. NULLも可 |
| void * | userdata | 私用目的のためコールバックに渡せる不透明ポインタ |
(bool) 成功のとき真, 失敗のとき偽を戻す SDL_GetError()を呼んで詳細を知ることができる.
SDL_PutAudioStreamData()とは異なり, この関数は渡したデータをコピーせず, 代わりにポインタを保存する. つまり, データの追加でメモリの確保とコピーは行われないため, 元のデータはストリームから完全に読み込まれるか, SDL_ClearAudioStream()またはSDL_DestroyAudioStream()が呼ばれて完了するまで, 利用可能な状態を維持する必要がある.
データは, 形式/チャネル数/サンプルレートが, 最後に呼んだSDL_SetAudioStreamFormatまたは変更していないならばストリームを生成したとき指定した形式と一致している必要がある.
ストリームがデータを必要としなくなったとき呼ばれるコールバックを指定することもできる. 一度コールバックが呼ばれると, ストリームが再びデータにアクセスすることはない. このコールバックは, ストリームの消去や破棄を含むどのような理由でもデータが不要になると呼ばれる.
トラッキング情報を保持するための領域の確保は依然として存在するため, この関数は大きなデータのブロックの場合に効果的である. 一度にいくつかのデータを与えるつもりならば, SDL_PutAudioStreamData()を使用してブロックの確保とバッファを行う方がより効果的である.
この関数はどのスレッドからも安全に呼べるが, ストリームにコールバックが設定されている場合は, 呼び出し側のロックが必要になる.