swift - 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被直接添加到节点,我试图从子节点中删除它。
解决方案
要停止音频播放,请使用removeAudioPlayer(_:)
实例方法。看这里。
func removeAudioPlayer(_ player: SCNAudioPlayer)
此方法从节点中删除指定的音频播放器,停止播放。
您还可以删除所有音频播放器:
func removeAllAudioPlayers()
要添加音频播放器,请使用以下实例方法:
func addAudioPlayer(_ player: SCNAudioPlayer)
此方法将指定的自动播放器添加到节点并开始播放。
希望这可以帮助!
推荐阅读
- testing - 如何在katalon studio中为测试api(restful)传递json参数?
- python-3.x - 检查 EC2 卷的多个条件
- c# - 第一次面板更新后 UpdateProgress 触发
- r - 使用 Rsymphony 和 slam 求解线性程序
- jquery - 这个数据表销毁方法有问题吗?
- c - 从驱动程序注入 DLL
- javascript - 通过laravel中的javascript函数在路由中传递两个变量
- c++ - 为什么我的第二个 time_t 变量没有正确显示
- listview - 如何通过拖放重新排列 QML 列表
- java - Java/SpringBoot:验证加盐哈希返回错误哈希