ARKit 2.0 –如何阻止音频在SCNView中播放?

时间:2018-08-27 12:16:55

标签: swift augmented-reality arkit arscnview

我正在开发播放音频所需的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()
}

但它仍然无法正常工作。

P.S。我正在使用iOS 12 beta 9,xCode 10 beta 4和macOS Mojave 10.14

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

1 个答案:

答案 0 :(得分:1)

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

func removeAudioPlayer(_ player: SCNAudioPlayer)
  

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

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

func removeAllAudioPlayers()

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

func addAudioPlayer(_ player: SCNAudioPlayer)

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

希望这会有所帮助!