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

SDL_LoadWAV_IO

WAVファイルをメモリに読み込む

ヘッダ

SDL3/SDL_audio.h

構文

bool SDL_LoadWAV_IO(SDL_IOStream *src, bool closeio, SDL_AudioSpec *spec, Uint8 **audio_buf, Uint32 *audio_len);

引数

SDL_IOStream *srcWAVEデータの読込元
boolcloseio真のときエラーであってもsrcから戻る前にSDL_CloseIO()が呼ばれる
SDL_AudioSpec *spec成功した場合のWAVEファイルの詳細な形式の代入先へのポインタ
Uint8 **audio_bufこの関数が確保した領域のオーディオデータへのポインタの代入先へのポインタ
Uint32 *audio_lenオーディオデータのバイト数の代入先へのポインタ

戻り値

(bool) 成功のとき真を戻す. audio_bufには確保されたオーディオデータが書き込まれたバッファへのポインタが代入され, audio_lenにはオーディオバッファのバイト長が代入される.

この関数は .WAVファイルをオープンできない, 不明な形式が使用されている, または壊れているとき偽を戻す. SDL_GetError()を呼んで詳細を知ることができる.

この関数が戻したaudio_bufを使い終えたとき, SDL_free()を呼んで破棄する必要がある.

詳細

WAVEファイルを読み込むには, src, spec, audio_buf, audio_lenが有効なポインタである必要がある. ファイルのデータ全体がメモリに読み込まれ, 必要ならばデコードされる.

対応する形式はRIFF WAVEファイルで, PCM(8, 16, 24, 32ビット), IEEE浮動小数点(32ビット), Microsoft ADPCMとIMA ADPCM(4ビット), A-lawとμ-law(8ビット)である. 他の形式には現時点では対応しておらずエラーとなる.

この関数が成功すると, 真を戻し, 関数が確保した領域のオーディオデータへのポインタがaudio_bufに書き込まれ, そのバイト数がaudio_lenに代入される. SDL_AudioSpecfreq, channels, formatにはバッファ内の音声データの値が代入される.

この関数が戻したaudio_bufを使い終えたとき, SDL_free()を呼んで破棄する必要がある.

.WAVファイルフォーマットの仕様が不完全なため, デコーダが厳密に解釈すると, 広く出回っている問題のあるファイルを再生できない. これらのファイルを再生するため, デコーダはファイル, factチャンク, RIFFチャンクサイズの切り捨てを認めている. SDL_HINT_WAVE_RIFF_CHUNK_SIZE, SDL_HINT_WAVE_TRUNCATION, SDL_HINT_WAVE_FACT_CHUNKヒントで読込時の動作を調整できる.

不正な(切り捨て, 破損, ヘッダの不正な値), または大きすぎる, または対応していないファイルは全てエラーとなる. また, データソースの致命的なI/Oエラーは, 読み込みを中断してエラーとなる. いずれのエラーの場合もNULLを戻し(srcがNULLの場合を除く), 適当なエラーメッセージが設定される.

データソースはシークに対応している必要がある.

使用例:

SDL_LoadWAV_IO(SDL_IOFromFile("sample.wav", "rb"), true, &spec, &buf, &len);

SDL_LoadWAV関数でも同じことができるが, より単純である:

SDL_LoadWAV("sample.wav", &spec, &buf, &len);

スレッドセーフ

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

バージョン

SDL 3.2.0以降

関連項目

SDL Wikiへのリンク

SDL_LoadWAV_IO - SDL Wiki