关于声音,您可以尝试缓冲它们 - 这意味着根据需要从文件中读取,然后在播放后丢弃数据。
请注意,如果您的声音很小(例如,爆炸声)并且实际上可能造成的伤害更大(因为它每次播放时都必须读取文件),这并不是真的有用 - 当然,这取决于它的播放频率。
使用这种技术的地方是音乐之类的东西。在 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