【发布时间】:2020-11-22 10:37:16
【问题描述】:
我想播放参考图像中的单个音频文件。
我会使用lazy var 来加载音频文件然后使用
func getNode(withImageName name: String)
触发播放哪个音频?
【问题讨论】:
标签: swift augmented-reality scenekit arkit realitykit
我想播放参考图像中的单个音频文件。
我会使用lazy var 来加载音频文件然后使用
func getNode(withImageName name: String)
触发播放哪个音频?
【问题讨论】:
标签: swift augmented-reality scenekit arkit realitykit
是的,你可以。
如果你想知道如何使用SceneKit positional audio,请阅读this post。
如果您在应用中使用 RealityKit positional audio,请阅读 this post。
让我们看看lazy var 的代码是什么样子的:
lazy var geoAndAudioNode: SCNNode = {
guard let scene: SCNScene = SCNScene(named: "pixar.usdz"),
let node: SCNNode = scene.rootNode.childNode(withName: "model",
recursively: true)
else { return SCNNode() }
let myPath = Bundle.main.path(forResource: "audio", ofType: "mp3")
let myURL = URL(fileURLWithPath: myPath!)
let mySource = SCNAudioSource(url: myURL)!
let audioNode = SCNNode()
let player = SCNAudioPlayer(source: mySource)
node.addChildNode(audioNode)
audioNode.addAudioPlayer(player)
return node
}()
下面是您的代码在 renderer 方法中的样子:
extension ViewController: ARSCNViewDelegate {
func renderer(_ renderer: SCNSceneRenderer,
didAdd node: SCNNode,
for anchor: ARAnchor) {
guard let imageAnchor = anchor as? ARImageAnchor,
let imageName = imageAnchor.referenceImage.name
else { return }
let geometryNode = retrieveNode(name: imageName)
node.addChildNode(geometryNode)
}
func retrieveNode(name: String) -> SCNNode {
var node = SCNNode()
switch name {
case "geoAndAudioImage": node = geoAndAudioNode
default: break
}
return node
}
}
【讨论】: