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

SDL_AudioStreamCallback

SDL_AudioStreamからデータを受け取ったとき呼ばれるコールバック関数の型

ヘッダ

SDL3/SDL_audio.h

構文

typedef void (SDLCALL *SDL_AudioStreamCallback)(void *userdata, SDL_AudioStream *stream, int additional_amount, int total_amount);

引数

void *userdataアプリケーションが使用するために渡した不透明ポインタ
SDL_AudioStream *streamこのコールバックに関連付けられたオーディオストリーム
intadditional_amount現在必要なデータのバイト数
inttotal_amount要求されたデータの総バイト数

詳細

アプリケーションはオーディオストリームにSDL_PutAudioStreamDataでデータを追加した, またはSDL_GetAudioStreamDataでデータを要求したとき呼ばれるコールバックを登録することができる(任意).

2つの値が提供される. 1つは現在の要求で必要な追加のデータの量(ストリームのデータが十分な場合は0もありうる)で, もう1つは要求される合計量である. 読み込みで呼び出されコールバックで書き込む場合(再生)は, 2つの値は異なる場合がある. 書き込みで呼び出されコールバックで読み込む場合(録音)は, 2つの値は常に同じである.

バイト数はバッファリングや再サンプリングの影響でやや大きい場合があり, 呼び出しごとに変化する場合もある.

このコールバックで必ず何かをしなければならないのではない. 一般的には, これは要求に応じてデータを追加したい/獲得したい場合に便利で, アプリケーションは必要な場合に読み書きを行えるが, システムはコールバックが何もしなくても利用可能なデータがあれば処理を続行する.

スレッドセーフ

このコールバックはあらゆるスレッドで動作しうる. よって, 共通データを保護する必要がある場合は, SDL_LockAudioStreamでロックして直列化する必要がある. このロックはコールバックが呼ばれる前に行われるため, コールバック内で明示的にロックする必要はない.

バージョン

SDL 3.2.0以降

関連項目

SDL Wikiへのリンク

SDL_AudioStreamCallback - SDL Wiki