OpenAL中的循环缓冲区

时间:2012-12-17 01:34:56

标签: streaming openal soundbuffer

在DirectSound中,有一个非常独特的概念circular buffers

特别是当前读取位置,当前写入位置以及GetPosition的清除方法并锁定缓冲区并开始写入。

enter image description here

我在OpenAL中寻找类似的概念,但我能找到的只是循环AL_STREAMING缓冲区,并使用AL_SAMPLE_OFFSET来确定当前的读取位置(并写下15个样本后)吗?)

OpenAL文档现在已关闭,但可访问here

声明应用程序在播放时写入声音缓冲区的安全方法是什么?我是否正确使用循环流缓冲区?

1 个答案:

答案 0 :(得分:3)

实际上,OpenAL中的循环缓冲区与DirectSound有很大不同。

在OpenAL中,您必须一个接一个地排队声音缓冲区。那么你真的只需要2个声音缓冲区,你只需要连续调用alSourceQueueBuffers和alSourceUnqueueBuffers。

  

在源上排队缓冲区   要不间断地从源连续流式传输音频,需要缓冲区排队。至   使用缓冲区排队,缓冲区和源是以正常方式生成的,但alSourcei不是   用于将缓冲区附加到源。相反,函数alSourceQueueBuffers和   使用alSourceUnqueueBuffers。程序可以将缓冲区或一组缓冲区附加到a   source使用alSourceQueueBuffers,然后在该源上调用alSourcePlay。虽然   源正在播放,可以调用alSourceUnqueueBuffers来删除已经存在的缓冲区   播放。然后可以用新数据填充或丢弃这些缓冲区。新的或重新填充的缓冲区可以   然后使用alSourceQueueBuffers附加到播放源。只要有永远   要在队列中播放的新缓冲区,源将继续播放。