ios - SceneKit - 音频在我第一次播放声音时导致 cxa_throw 延迟

标签 ios xcode swift audio scenekit

我播放这样的声音(在 SCNNode 子类中):

    let audioSource = SCNAudioSource(named: "coin.wav")
    let audioPlayer = SCNAudioPlayer(source: audioSource)
    self.addAudioPlayer(audioPlayer)

第一次调用时,我遇到了严重的滞后,并抛出了一个期望值。 当我禁用 All_Expection_Breakpoint 时,我注意到延迟。

我该怎么办?

enter image description here

最佳答案

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/

相关文章:

ios - 在 Swift 4 中调用刷新数据函数时 UIViewController 刷新失败

iphone - 我想使用 Phonegap 仅定位 iPhone(不是 iPad)

ios - 自定义View悬浮状态

ios - Swift, super.init() Must call a designated initializer of the superclass 'UIView' 错误

ios - Cocoapods:没有提供足够的参数;要操作的输入文档在哪里?

javascript - iOS 3D Touch API 使用 Javascript for Web App

iOS 9 推送通知在应用程序打开时不显示

objective-c - 编译 pod 时出现 “Include of non-modular header inside framework module”

ios - 如何获取文档目录中文件的所有路径?

swift - stringByEvaluatingJavaScriptFromString