[英]SCNAction playAudio seems to cause a crash
我在 SceneKit 中看到了在 iOS 13.1.2 之前没有看到的崩溃。
我已将问题追溯到以下 function 并且无法完全确定导致问题的原因。
如果我注释掉在节点上运行操作的行,一切都很好。
我可以在场景中的其他预先存在的节点上运行 playAudio 操作,但是当我只想使用下面的 function 进行一次性声音播放时,应用程序崩溃了。
所以我的想法是,也许这与我实例化节点的方式有关,但我想不出另一种方法来实例化节点,只是为了在给定的 position 播放声音。
我也尝试过使用回收的音频源,但这没有什么区别。
可能有人知道这段代码中可能发生的事情会导致崩溃吗? 这对我来说并不明显,特别是因为在 iOS 更新之前它已经完美运行。
我在下面包含了后面的跟踪。
非常感谢任何帮助/想法!
周末愉快!
干杯!
func play(sound: String, atPosition: SCNVector3, volume: Float, pitch: Float, loops: Bool, positional: Bool) {
// Sources will be pre-loaded and recycled for the finished app
if let source = SCNAudioSource(fileNamed: "art.scnassets/"+sound)
{
source.volume = volume
source.rate = pitch
source.isPositional = positional
source.shouldStream = false
source.loops = loops
source.load()
let node = SCNNode()
node.name = "oneShot"
node.position = atPosition
scnScene.rootNode.addChildNode(node)
// node.runAction(SCNAction.sequence([SCNAction.playAudio(source, waitForCompletion: true), SCNAction.removeFromParentNode()]))
// This line causes the crash
node.runAction(SCNAction.playAudio(source, waitForCompletion: false))
}
}
AVAudioEngineImpl::AttachNode(AVAudioNode*, bool) + 272 frame #3: 0x00000001bd5b2324 AVFAudio
objc_retain + 16 frame #1: 0x00000001bd5a90c4 AVFAudio
[avaudioplayernode didattachtoEngine:] AVAudioEngineImpl::AttachNode(AVAudioNode*, bool) + 272 frame #3: 0x00000001bd5b2324 AVFAudio
-[AVAudioEngine attachNode:] + 80 帧 #4: 0x00000001c4aea48c SceneKit CPP3DAudioContext::AddVoice(void const*) + 120 frame #5: 0x00000001c4aeacf0 SceneKit
CPP3DAAudioEngine::AddVoice(void const*) + 192 帧 #6: C3DNodeAddAudioPlayer + 40 frame #7: 0x00000001c4a07924 SceneKit
-[SCNNode addAudioPlayer:] + 132 frame #8: 0x00000001c49325e0 SceneKit SCNCPlaySound::cpp_updateWithTargetForTime(SCNNode*, double) + 96 frame #9: 0x00000001c499c690 SceneKit
SCNActionApply + 112 frame #10: 0x00000001c4a2d7a4 SceneKit _applyActions + 236 frame #11: 0x00000001b0a8e1b8 CoreFoundation
-[ NSFrozenDictionaryM __apply:context:] + 128 帧 #12: 0x00000001c4a2d5c8 SceneKit C3DAnimationManagerApplyActions + 104 frame #13: 0x00000001c4a173e4 SceneKit
C3DAnimationManagerApplyActions + 104 frame #13: 0x00000001c4a173e4 SceneKit
[SCNRENDERER _UPDATE:] + 576帧#14:0x0000000001C4A19A04 SECHEKIT- -[SCNRenderer _drawSceneWithNewRenderer:] + 200 frame #15: 0x00000001c4a19fbc SceneKit
SceneKit -[SCNRenderer _drawAtTime:] + 616 frame #17: 0x00000001c4ab46b8 SceneKit
-[SCNView _drawAtTime:] + 428 frame #18: 0x00000001c497ae38 SceneKit __69-[NSObject(SCN_DisplayLinkExtensions) SCN_setupDisplayLinkWithQueue:]_block_invoke + 56 frame #19: 0x00000001c4a7fe48 SceneKit
__36- [SCNDisplayLink _callbackWithTime:]_block_invoke + 64 frame #20: 0x0000000105726c04 libdispatch.dylib _dispatch_client_callout + 16 frame #21: 0x0000000105735888 libdispatch.dylib
_dispatch_lane_barrier_sync_invoke_and_complete + 124 frame #22: 0x00000001c4a7fdd8 SceneKit -[SCNDisplayLink _callbackWithTime:] + 232 frame #23: 0x00000001058f95f8 GPUToolsCore
-[DYDisplayLinkInterposer forwardDisplayLinkCallback:] + 168 帧 #24: 0x00000001b73da51 4 QuartzCore CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 632 frame #25: 0x00000001b1acdeb0 IOKit
IODispatchCalloutFromCFMessage + 488 帧 #26: 0x00000001b0ae96d4 CoreFoundation __CFMachPortPerform + 172 frame #27: 0x00000001b0b12e5c CoreFoundation
__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION + 56 frame #28: 0x00000001b0b12588 CoreFoundation __CFRunLoopDoSource1 + 444 frame #29: 0x00000001b0b0d45c CoreFoundation
CFRunLoopRun + 2168 frame #30: 0x00000001b0b0c8bc CoreFoundation CFRunLoopRunSpecific + 464 frame #31: 0x00000001b0e4c994 Foundation
-[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 228帧#32:0x00000001c497b214 SceneKit __71-[SCNView(SCNDisplayLink) _initializeDisplayLinkWithCompletionHandler:]_block_invoke + 456 frame #33: 0x00000001c497b45c SceneKit
__SCNRenderThread_start + 96 帧#34:0x00000001b08bp11c.同样在这里,在附加时崩溃,在 -[AVAudioPlayerNode didAttachToEngine:] () 中以 #1 0x00000001af3850c4 结尾的相同堆栈
您找到任何解决方案/原因了吗?
只是想更新我的问题,说这个问题在更新到 iOS 13.2 后已经解决了。 -感谢苹果。 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.