Multithreading 从背景线程播放OpenAL声音

Multithreading 从背景线程播放OpenAL声音,multithreading,ios,audio,openal,Multithreading,Ios,Audio,Openal,在我的iOS应用程序中,我不想使用OpenAL播放声音。我有AudioManager课程,负责声音管理(singleton)。所有声源和缓冲区在创建时都会初始化(在第一次调用实例时) 所以要播放声音,我只需要停止以前的声音,清除旧的缓冲区(必要的源),附加新的缓冲区,设置音调和增益,最后播放声音。所有这些操作都在playSound:(AMSound)sound方法中(AMSound是一个简单的枚举) 对于UI效果,我从主线程调用此方法。但我的应用程序有很多背景工作,有时还伴有声音效果 我可以直接

在我的iOS应用程序中,我不想使用OpenAL播放声音。我有AudioManager课程,负责声音管理(singleton)。所有声源和缓冲区在创建时都会初始化(在第一次调用
实例时)

所以要播放声音,我只需要停止以前的声音,清除旧的缓冲区(必要的源),附加新的缓冲区,设置音调和增益,最后播放声音。所有这些操作都在
playSound:(AMSound)sound
方法中(
AMSound
是一个简单的枚举)

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

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

无论您在哪个线程上调用播放声音,openAL实际上都会在自己的线程上播放。至于同时播放的声音,这取决于您希望如何混合它们,无论如何,openAL将始终管理自己的播放线程,因此从线程的角度来看,无论您在哪里调用
playsound

,另外,与例如OpenGL相比,您实际上可以播放来自任意线程的声音,因为上下文是每个进程的。