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

SDL_PutAudioStreamDataNoCopy

ストリームにデータをコピーせずに追加する

ヘッダ

SDL3/SDL_audio.h

構文

bool SDL_PutAudioStreamDataNoCopy(SDL_AudioStream *stream, const void *buf, int len, SDL_AudioStreamDataCompleteCallback callback, void *userdata);

引数

SDL_AudioStream *streamオーディオデータを追加するストリーム
const void *buf追加するオーディオデータへのポインタ
intlenストリームに書き込むデータのバイト数
SDL_AudioStreamDataCompleteCallbackcallbackストリームがデータを必要としなくなったとき呼ばれるコールバック. NULLも可
void *userdata私用目的のためコールバックに渡せる不透明ポインタ

戻り値

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

詳細

SDL_PutAudioStreamData()とは異なり, この関数は渡したデータをコピーせず, 代わりにポインタを保存する. つまり, データの追加でメモリの確保とコピーは行われないため, 元のデータはストリームから完全に読み込まれるか, SDL_ClearAudioStream()またはSDL_DestroyAudioStream()が呼ばれて完了するまで, 利用可能な状態を維持する必要がある.

データは, 形式/チャネル数/サンプルレートが, 最後に呼んだSDL_SetAudioStreamFormatまたは変更していないならばストリームを生成したとき指定した形式と一致している必要がある.

ストリームがデータを必要としなくなったとき呼ばれるコールバックを指定することもできる. 一度コールバックが呼ばれると, ストリームが再びデータにアクセスすることはない. このコールバックは, ストリームの消去や破棄を含むどのような理由でもデータが不要になると呼ばれる.

トラッキング情報を保持するための領域の確保は依然として存在するため, この関数は大きなデータのブロックの場合に効果的である. 一度にいくつかのデータを与えるつもりならば, SDL_PutAudioStreamData()を使用してブロックの確保とバッファを行う方がより効果的である.

スレッドセーフ

この関数はどのスレッドからも安全に呼べるが, ストリームにコールバックが設定されている場合は, 呼び出し側のロックが必要になる.

バージョン

SDL 3.4.0以降

関連項目

SDL Wikiへのリンク

SDL_PutAudioStreamDataNoCopy - SDL Wiki