从后台线程播放OpenAL声音

kpo*_*wer 4 audio multithreading openal ios

在我的iOS应用程序中,我不想使用OpenAL播放声音.我有AudioManager类,负责声音管理(单例).创建所有声源和缓冲区(在第一次instance调用时).

因此,播放我需要的声音 - 是停止先前的声音,清除旧的缓冲区(必要的源),连接新的缓冲区,设置音高和增益,最后播放声音.所有这些操作都在playSound:(AMSound)sound方法中(AMSound是一个简单的枚举).

对于UI效果,我从主线程调用此方法.但我的应用程序有很多背景工作,有时还伴有声音效果.

我可以playSound:直接从后台线程调用,还是应该只在主线程上调用它?那么同步声音呢:一个是从主线程创建的,另一个是从背景创建的?

Val*_*adu 6

无论你调用哪个线程playsound,openAL实际上都会在自己的线程上播放它.至于同步声音,它取决于你想要如何混合它们,无论如何,openAL将始终管理自己的游戏线程,所以从线程角度来看,你调用的地方并不重要playsound

  • 另外,与OpenGL相比,你可以实际播放来自任意线程的声音,因为上下文是按进程进行的. (2认同)