我正在使用 C++ 开发一个使用 OpenGL 的 Xcode 小应用程序。我试图找到一种向我的应用程序添加简单声音的方法。我对 OpenAL 不太成功(Alut 在 Mac 中不可用)并且无法使 sfml 和 SDL 在我的系统上工作。所以我决定尝试 Apple 的 PlayFile 示例:
我可以使用这个例子播放声音。但是,当声音开始播放时,OpenGL 会冻结,即所有动画都会停止,直到声音播放完毕。
我检查了文件 PlayFile.cpp 并找到了这一行:
usleep ((int)(fileDuration * 1000. * 1000.));
我认为它负责冻结OpenGL。在这行之前,我们开始播放声音。在这一行之后,我们清理缓冲区。有什么方法可以更改代码,以便声音开始播放,OpenGL 继续其任务,一旦声音播放完毕,我们就清理缓冲区?我尝试使用指针等其他解决方案在播放开始后进行清理,但现在我无法从应用程序中发出任何声音。
有什么建议么?