来自OpenAL文档:
基本的OpenAL对象是一个 监听器,源和缓冲区。 可以有很多 缓冲区,包含音频数据。 每个缓冲区可以连接到一个或 更多来源
我的问题是,我有一个声音文件,我需要每秒多次播放,同时。声音长达2秒。所以它会重叠。
我是否需要多个填充缓冲区(=内存中声音的多倍)?
如果我将一个缓冲区附加到多个源,我是否可以播放声音10次,重叠自身,内存中只有一个副本?或者我还需要在内存中处理10个声音副本吗?
答案 0 :(得分:4)
你可以,缓冲区独立于源,你可以通过调用alSourcePlay()
将多个源指向同一个缓冲区您播放源而不是缓冲区。
他们如何管理缓冲区,同时播放指向同一缓冲区的多个源是blackbox to programmer,由openAL驱动程序管理。
你应该注意到openAL 缓冲区与内存中的音频数据不一样(总是),openAL buffer 是由openAL驱动程序依赖的实现,数据是缓冲区可以位于系统内存或声卡内存中。因此,当您调用alBuferData
时,您正在将内存中的音频数据复制到openAL托管内存,之后没有从openAL缓冲区到音频数据的引用或指针,您可以在不影响openAL缓冲区的情况下操作音频数据。 / p>