3

从 OpenAL 文档中:

基本的 OpenAL 对象是 Listener、Source 和 Buffer。可能存在大量包含音频数据的 Buffer。每个缓冲区可以附加到一个或多个源

我的问题是,我有一个声音文件,我需要每秒同时播放多次。声音时长 2 秒。所以会重叠。

我是否需要为此填充多个缓冲区(= 多次在内存中发出声音)?

如果我将一个缓冲区附加到多个源,我是否能够播放声音 10 次,重叠自身,内存中只有一个副本?或者我还需要在内存中处理 10 个该声音的副本吗?

4

1 回答 1

4

你可以,缓冲区独立于,你可以有多个指向同一个缓冲区,通过调用alSourcePlay()你播放而不是缓冲区

他们如何在同时播放指向同一个缓冲区的多个源时管理缓冲区对程序员来说是黑盒,它由 openAL 驱动程序管理。

您应该注意到 openAL缓冲区与内存中的音频数据并不(总是)相同,openAL缓冲区的实现依赖于 openAL 驱动程序,缓冲区的数据可能位于系统内存或声卡内存中。因此,当您调用时,alBuferData您正在将音频数据从内存复制到 openAL 托管内存,之后没有从 openAL 缓冲区到音频数据的引用或指针,您可以在不影响 openAL 缓冲区的情况下操作音频数据。

于 2010-07-29T00:08:12.810 回答