2014-04-25 53 views

回答

2

是的,将你的呼叫包装到alSourcePlay的代码被阻止,所以 想要在它自己的线程中。 OpenAL拥有自己的事件循环 ,可缓冲声音并将声音呈现给音频设备。

通常,您希望单独的线程为您的源媒体(线程1)和另一个线程提供OpenAL逻辑(线程2)。这是除了你的UI线程(线程3),如果有的话。

+0

例如,我应该这样做:{后台线程} - 写入PCM数据 - > [共享缓冲区] - 读 - > {主线程}。后台线程在主线程播放时调用数据(调用'alSourcePlay')它们? –

+1

如果最终用户与您的软件进行交互,而不是独立进程而没有用户界面,则UI代码需要其自己的线程(通常是主线程)。需要额外的线程来处理媒体读取/解码和I/O。第三个线程专用于围绕OpenAL代码的逻辑。但是,如果您只是在玩耍,想要撬动OpenAL的轮胎,并且不介意播放过程中出现无响应的流程,请继续操作,并在单个线程中完成,OpenAL不介意,但会在整个媒体播放期间挂起应用程序。 –