don*_*ile 4 iphone audio openal
来自 OpenAL 文档:
基本的 OpenAL 对象是监听器、源和缓冲区。可以有大量的Buffer,其中包含音频数据。每个缓冲区可以附加到一个或多个源
我的问题是,我有一个声音文件,我需要每秒同时播放多次。声音时长2秒。所以会重叠。
我是否需要为此填充多个缓冲区(=内存中声音的多次)?
如果我将一个缓冲区附加到多个源,我是否能够播放声音 10 次(重叠),而内存中只有一份副本?或者我仍然需要在内存中处理该声音的 10 个副本吗?
你可以,buffer独立于source,你可以让多个source指向同一个 buffer,通过调用alSourcePlay()你播放source而不是buffer。
他们如何在同时播放指向同一缓冲区的多个源时管理缓冲区对于程序员来说是黑盒,它由 openAL 驱动程序管理。
您应该注意到,openAL缓冲区(始终)与内存中的音频数据不同,openAL缓冲区的实现取决于 openAL 驱动程序,缓冲区的数据可能位于系统内存或声卡内存中。因此,当您调用时,alBuferData您正在将音频数据从内存复制到 openAL 托管内存,之后就没有从 openAL 缓冲区到音频数据的引用或指针,您可以在不影响 openAL 缓冲区的情况下操作音频数据。