サウンドに関しては、バッファリングを試すことができます。つまり、必要に応じてファイルから読み取り、再生後にデータを破棄します。
これは、サウンドが小さい場合 (爆発など) には実際には役に立たず、実際にはそうでない場合よりも害を及ぼす可能性があることに注意してください (再生するたびにファイルを読み取る必要があるため) - もちろん、再生される頻度によって異なります。
この手法が使用されるのは音楽などです。OpenAL では、以下を使用して小さなオーディオ セグメントをバッファリングできます。
alSourceQueueBuffers(source, numbuffers, buffers);
キューに入れられ、既に処理されたバッファの数をチェックする関数もあります:
ALint numqueued, numprocessed;
// total number, including the already-processed buffers!
alGetSourcei(source, AL_BUFFERS_QUEUED, &numqueued);
// number of buffers played completely
alGetSourcei(source, AL_BUFFERS_PROCESSED, &numprocessed);
処理されたバッファの数を取得したら、完了したものを単純にアンキュー (および削除) できます。
ALuint processed[numprocessed];
// fills "processed" with the buffers that have been removed
alSourceUnqueueBuffers(source, numprocessed, processed);
...そして最後に、バッファを削除します (未使用の場合):
alDeleteBuffers(numprocessed, processed);
詳細については、OpenAL プログラマー ガイド(PDF 警告)を参照してください: http://connect.creativelabs.com/openal/Documentation/OpenAL_Programmers_Guide.pdf