目次 - SDL_mixer 3.0 - MIX_LoadAudioNoCopy

MIX_LoadAudioNoCopy

メモリバッファから再生するオーディオデータをコピーせずに読み込む

ヘッダ

SDL3_mixer/SDL_mixer.h

構文

MIX_Audio * MIX_LoadAudioNoCopy(MIX_Mixer *mixer, const void *data, size_t datalen, bool free_when_done);

引数

MIX_Mixer *mixerオーディオデータを使用するミキサー. NULLも可
const void *dataオーディオデータが書き込まれたバッファ
size_tdatalenバッファのバイト数
boolfree_when_done真の場合, MIX_Audioが破棄されたときdataSDL_free()に渡す

戻り値

(MIX_Audio *) ミキサーで音声を発生させるために使用できるオーディオオブジェクトを戻す. 失敗のときNULLを戻す. SDL_GetError()を呼んで詳細を知ることができる.

詳細

ほとんどのLoadAudio関数では, オーディオデータを読み込むとデータは元のデータ形式で全てRAMに格納され, 必要に応じでデコードされる. この関数は, これらの関数とほとんど同じ動作をするが, アプリケーションが提供したメモリバッファを使用し, コピーを生成しない.

このバッファはMIX_Audioを使用する間は有効である必要があり, ミキサーはミックスするデータが必要なときはいつでもこのバッファをアクセスする.

この関数の意図は最大限の効率化である: データがメモリ上にありそれを維持することができるならばコピーする必要がない. データは対応する全てのオーディオファイル形式(WAV, MP3など)を使用でき, ミキシングのとき必要に応じてデコードされる. MIX_LoadAudio()とは異なり, predecodeオプションは存在しない. 既にメモリ上にあり長時間そこに存在し続けるデータに最適化させているためである. 事前にデコードする場合は, ファイル形式のデータを必要とするのは一度だけで, 単にそれを前もってSDL_CreateIOFromConstMem()でラップしてMIX_LoadAudio_IO()に渡せばよい.

MIX_Audioオブジェクトは複数のミキサーで共有できる. mixer引数はこのオーディオを最も使うミキサーを示唆するもので, 最適化が適用される場合があるが, 必須ではなくミキサーとしてNULLを指定することもできる.

free_when_doneが真の場合, 戻されたMIX_Audioが最終的に破棄されたときSDL_mixerはSDL_free(data)を呼ぶ. これはデータが静的でなく, この特定のMIX_Audioのために読み込まれていて, 単にコピーを生成したくないような場合に有用になりうる.

オーディオ形式の情報はファイルのメタデータから得るため, この関数は生PCMデータでは使用できない. この場合は代わりにMIX_LoadRawAudioNoCopy()を使いSDL_AudioSpecを渡すこと.

MIX_Audioを生成した後は, MIX_SetTrackAudio()MIX_Trackに割り付けるか, そのままMIX_PlayAudio()で再生する.

MIX_Audioを使い終えたならば, MIX_DestroyAudio()で解放できる.

スレッドセーフ

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

バージョン

SDL_image 3.0.0以降

関連項目

SDL Wikiへのリンク

SDL3_mixer/MIX_LoadAudio