首页 > 解决方案 > ARKit 2.0 – 如何阻止音频在 SCNView 中播放?

问题描述

我正在开发一个播放音频所需的 AR 应用程序。

我已经这样做了:

guard let audioSource = SCNAudioSource(fileNamed: "sample.mp3") else { return }
audioSource.loops = false
audioSource.load()
node.runAction(SCNAction.playAudio(audioSource, waitForCompletion: false))

它工作正常,只是我无法阻止它播放。

我也试过:

node.enumerateChildNodes { (childNode, _) in
   childNode.removeAllAudioPlayers()
   childNode.removeFromParentNode()
}

但它仍在播放。

有人知道如何阻止它吗?

更新: 我已经尝试过:

guard let audioSource = SCNAudioSource(fileNamed: "sample.mp3") else {return}
audioSource.load()
player = SCNAudioPlayer(source: audioSource)
node.addAudioPlayer(player)

并像@Andy 所说的那样删除它:

node.enumerateChildNodes { (childNode, _) in
   childNode.removeAudioPlayer(player)
   childNode.removeFromParentNode()
}

但它仍然无法正常工作。

PS 我正在使用 iOS 12 beta 9、xCode 10 beta 4 和 macOS Mojave 10.14

解决方案:问题不是ARAudio,原因是:SCNAudioPlayer被直接添加到节点,我试图从子节点中删除它。

标签: swiftaugmented-realityscenekitarkitarscnview

解决方案


要停止音频播放,请使用removeAudioPlayer(_:)实例方法。看这里

func removeAudioPlayer(_ player: SCNAudioPlayer)

此方法从节点中删除指定的音频播放器,停止播放。

您还可以删除所有音频播放器:

func removeAllAudioPlayers()

要添加音频播放器,请使用以下实例方法:

func addAudioPlayer(_ player: SCNAudioPlayer)

此方法将指定的自动播放器添加到节点并开始播放。

希望这可以帮助!


推荐阅读