关于OpenAL缓冲区的一些基本问题

时间:2013-03-16 00:19:33

标签: openal

我刚刚开始使用OpenAL,到目前为止一切似乎都很好,我已经尝试了一些教程,设法加载并播放一些声音,但在我开始实现更复杂的东西之前,我想确保我理解如何OpenAL工作。

基本上我的目标是建立一个简单的系统,在这里我可以发出命令,例如“玩这个和这个,停止播放”,而不必关心任何事情。假设程序必须处理150个声音,当解压缩到PCM时总共250 MB,并且所有声音在开始时都可用。

在OpenAL中,有源和缓冲区。我知道我应该有一个源池并重用它们。我不理解,无法找到任何地方,是缓冲区实际代表什么。它们是有限的资源还是只是常规存储,可能转换为可以轻松播放但仍在常规存储器中的格式?

在我描述的情况下,我应该:

  • A)在开头创建150个缓冲区,并用250 MB的数据填充它们,其中一些可能是一小时长的声音,在整个程序期间保留它并在需要时播放它们,或者
  • B)将250 MB加载到内存中,然后在播放前将每个声音加载到一个缓冲区中,然后立即将它们释放出来?

如果A,将数据流式传输到小缓冲区然后排队的目的是什么?

如果B,有多少缓冲区和多少数据是安全的?我还应该制作一个缓冲池并重用它们吗?

另外,我还有一个关于缓冲区排队的问题。我知道我可以设置源的缓冲区(作为属性)或排队(两者都是错误的吗?)。我很惊讶,显然我也必须将它们排成一列。为什么一旦播放缓冲区就不会自动发生这种情况?我是否必须按照他们排队的顺序对它们进行排队?

感谢您帮助我理解这一点。

0 个答案:

没有答案