4

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

基本上我的目标是制作一个简单的系统,我可以在其中发出诸如“播放这个和这个,停止播放那个”之类的命令,而无需关心任何事情。假设程序必须处理 150 种声音,解压缩为 PCM 时总共有 250 MB,并且所有声音在开始时都可用。

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

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

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

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

如果 B,有多少缓冲区以及其中有多少数据是安全的?我还应该建立一个缓冲池并重用它们吗?

另外,我还有一个关于缓冲区排队的问题。我知道我可以设置源缓冲区(作为属性)或将其排队(两者都做会是一个错误,对吧?)。不过,我很惊讶,显然我也必须让他们出队。为什么播放缓冲区后不会自动发生这种情况?我是否必须按照他们排队的顺序来取消他们的排队?

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

4

0 回答 0