我正在开发一个播放音频所需的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()
}
但它仍然不起作用。
附言我使用的是iOS 12 beta 9,xCode 10 beta 4和macOS Mojave 10.14
解决方案:问题不在于ARAudio,原因是:SCNAudioPlayer直接添加到节点,我试图将其从子节点中删除。
若要停止音频播放,请使用removeAudioPlayer(_:)
实例方法。看这里。
func removeAudioPlayer(_ player: SCNAudioPlayer)
此方法从节点中删除指定的音频播放器,停止播放。
您还可以删除所有音频播放器:
func removeAllAudioPlayers()
若要添加音频播放器,请使用以下实例方法:
func addAudioPlayer(_ player: SCNAudioPlayer)
此方法将指定的自动播放器添加到节点并开始播放。
希望这有帮助!