Я хочу воспроизвести отдельные аудиофайлы из эталонных изображений.
Могу ли я использовать lazy var
для загрузки аудиофайла, а затем использовать
func getNode(withImageName name: String)
для запуска, какой звук воспроизводить?
Я хочу воспроизвести отдельные аудиофайлы из эталонных изображений.
Могу ли я использовать lazy var
для загрузки аудиофайла, а затем использовать
func getNode(withImageName name: String)
для запуска, какой звук воспроизводить?
Да, можно.
Если вы хотите знать, как использовать SceneKit positional audio
, прочтите это опубликовать.
Если вы используете RealityKit positional audio
в своем приложении, прочтите этот пост .
Посмотрим, как может выглядеть ваш код для 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
}
}