我播放这样的声音(在 SCNNode 子类中):
let audioSource = SCNAudioSource(named: "coin.wav")
let audioPlayer = SCNAudioPlayer(source: audioSource)
self.addAudioPlayer(audioPlayer)
第一次调用时,我遇到了严重的滞后,并抛出了一个期望值。 当我禁用 All_Expection_Breakpoint 时,我注意到延迟。
我该怎么办?
最佳答案
C++ 异常来自 SceneKit 音频层使用的 AVAudioEngine。 AVAudio* 框架在内部使用 C++ 异常,因此如果您在 Xcode 中设置断点以在抛出 C++ 异常时中断 Xcode 将在 AVAudio* 代码中中断很多(主要是在初始时间)。您可以放心地忽略它们,因为它们无论如何都会在到达您的代码之前被框架捕获。
如果你不想要延迟,你可以实例化你的音频源并在启动时加载它: 让 audioSource = SCNAudioSource(命名为:“coin.wav”) audioSource.load()
然后在以后需要时添加播放器: 让 audioPlayer = SCNAudioPlayer(来源:audioSource) self.addAudioPlayer(audioPlayer)
顺便说一句,播放器是缓存和回收的,所以你不必太担心内存被白白占用。
另请注意,SCNAction 使用的 API 与您使用的 API 完全相同,因此,如果您创建的 Action 带有之前未使用 .load() 加载到内存中的声音,您也会遇到延迟。
希望对您有所帮助,
S.
关于ios - SceneKit - 音频在我第一次播放声音时导致 cxa_throw 延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31700145/