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_t | datalen | バッファのバイト数 |
| bool | free_when_done | 真の場合, MIX_Audioが破棄されたときdataをSDL_free()に渡す |
ほとんどの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()で解放できる.
この関数はどのスレッドからも安全に呼べる.